]> git.sesse.net Git - vlc/commitdiff
Some more demux and access code factorization
authorClément Stenac <zorglub@videolan.org>
Wed, 19 Jul 2006 09:33:41 +0000 (09:33 +0000)
committerClément Stenac <zorglub@videolan.org>
Wed, 19 Jul 2006 09:33:41 +0000 (09:33 +0000)
21 files changed:
include/vlc_access.h
include/vlc_demux.h
modules/access/cdda.c
modules/access/dv.c
modules/access/dvdnav.c
modules/access/dvdread.c
modules/access/fake.c
modules/access/file.c
modules/access/ftp.c
modules/access/gnomevfs.c
modules/access/http.c
modules/access/smb.c
modules/access/tcp.c
modules/access/udp.c
modules/demux/a52.c
modules/demux/dts.c
modules/demux/mpeg/h264.c
modules/demux/mpeg/m4a.c
modules/demux/mpeg/m4v.c
modules/demux/mpeg/mpga.c
modules/demux/mpeg/mpgv.c

index 7c9bb2196e9dece23c75c39010ab1604cc81b6b9..f95520825d94151ade5b80c0668f7174a42e6133 100644 (file)
@@ -130,4 +130,32 @@ static inline int access2_Control( access_t *p_access, int i_query, ... )
     return i_result;
 }
 
+static void inline access_InitFields( access_t *p_a )
+{
+    p_a->info.i_update = 0;
+    p_a->info.i_size = 0;
+    p_a->info.i_pos = 0;
+    p_a->info.b_eof = VLC_FALSE;
+    p_a->info.i_title = 0;
+    p_a->info.i_seekpoint = 0;
+}
+
+#define ACCESS_SET_CALLBACKS( read, block, control, seek ) \
+    p_access->pf_read = read;  \
+    p_access->pf_block = block; \
+    p_access->pf_control = control; \
+    p_access->pf_seek = seek; \
+
+#define STANDARD_READ_ACCESS_INIT \
+    access_InitFields( p_access ); \
+    ACCESS_SET_CALLBACKS( Read, NULL, Control, Seek ); \
+    MALLOC_ERR( p_access->p_sys, access_sys_t ); \
+    p_sys = p_access->p_sys; memset( p_sys, 0, sizeof( access_sys_t ) );
+
+#define STANDARD_BLOCK_ACCESS_INIT \
+    access_InitFields( p_access ); \
+    ACCESS_SET_CALLBACKS( NULL, Block, Control, Seek ); \
+    MALLOC_ERR( p_access->p_sys, access_sys_t ); \
+    p_sys = p_access->p_sys; memset( p_sys, 0, sizeof( access_sys_t ) );
+
 #endif
index 085f08e6ed2064457b9cb60e145db789e9bddc58..4318e300417b875a45305ce12e752a617c2674b7 100644 (file)
@@ -155,12 +155,14 @@ static inline vlc_bool_t isDemux( demux_t *p_demux, char *psz_requested )
 #define STANDARD_DEMUX_INIT \
     p_demux->pf_control = Control; \
     p_demux->pf_demux = Demux; \
-    MALLOC_ERR( p_demux->p_sys, demux_sys_t );
+    MALLOC_ERR( p_demux->p_sys, demux_sys_t ); \
+    memset( p_demux->p_sys, 0, sizeof( demux_sys_t ) );
 
 #define STANDARD_DEMUX_INIT_MSG( msg ) \
     p_demux->pf_control = Control; \
     p_demux->pf_demux = Demux; \
     MALLOC_ERR( p_demux->p_sys, demux_sys_t ); \
+    memset( p_demux->p_sys, 0, sizeof( demux_sys_t ) ); \
     msg_Dbg( p_demux, msg ); \
 
 #define DEMUX_BY_EXTENSION( ext ) \
@@ -229,6 +231,10 @@ static inline vlc_bool_t isDemux( demux_t *p_demux, char *psz_requested )
         return VLC_EGENERIC; \
     }
 
+#define DESTROY_PACKETIZER( location ) \
+    if( location->p_module ) module_Unneed( location, location->p_module ); \
+    vlc_object_destroy( location );
+
 /**
  * @}
  */
index d71d5c410295f6449aaec138fcdf248c556c7eee..2e34463aa55323c55eda172c9124e33af9fdbd9d 100644 (file)
@@ -174,18 +174,7 @@ static int Open( vlc_object_t *p_this )
     free( psz_name );
 
     /* Set up p_access */
-    p_access->pf_read = NULL;
-    p_access->pf_block = Block;
-    p_access->pf_control = Control;
-    p_access->pf_seek = Seek;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
-    memset( p_sys, 0, sizeof( access_sys_t ) );
+    STANDARD_BLOCK_ACCESS_INIT
     p_sys->vcddev = vcddev;
 
     /* We only do separate items if the whole disc is requested -
index 551e569a916d1e3c6a5c4ff43b6d9d5fdb39f091..cb7b1f0ffd71629fb12147c56affbb0ca485bca1 100644 (file)
@@ -142,17 +142,9 @@ static int Open( vlc_object_t *p_this )
     msg_Dbg( p_access, "opening device %s", psz_name );
 
     /* Set up p_access */
-    p_access->pf_read = NULL;
-    p_access->pf_block = Block;
-    p_access->pf_control = Control;
-    p_access->pf_seek = NULL;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
+    access_InitFields( p_access );
+    ACCESS_SET_CALLBACKS( NULL, Block, Control, NULL );
     p_access->info.b_prebuffered = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
 
     p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
     if( !p_sys )
index f362e3eecf0b7760494ea717edc0a31fb4149f39..e7c3baa9032c71b2ee745ce8ead56a323922a3e3 100644 (file)
@@ -206,10 +206,7 @@ static int Open( vlc_object_t *p_this )
     free( psz_name );
 
     /* Fill p_demux field */
-    p_demux->pf_demux = Demux;
-    p_demux->pf_control = Control;
-    p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
-    memset( p_sys, 0, sizeof( demux_sys_t ) );
+    STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
     p_sys->dvdnav = p_dvdnav;
 
     ps_track_init( p_sys->tk );
index cb60704efd3ea02bb7c8d4d0542b3f67bcd5f8b0..e6ed058835683bbc3f59c374508b859302da5e79 100644 (file)
@@ -246,10 +246,7 @@ static int Open( vlc_object_t *p_this )
     msg_Dbg( p_demux, "VMG opened" );
 
     /* Fill p_demux field */
-    p_demux->pf_demux = Demux;
-    p_demux->pf_control = Control;
-    p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
-    memset( p_sys, 0, sizeof( demux_sys_t ) );
+    STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
 
     ps_track_init( p_sys->tk );
     p_sys->i_aspect = -1;
index d24bdb2161448420b719bc6b39c74a6c5e45a200..bfbfe998f70544ae00ea3a0959051a8490b961e5 100644 (file)
@@ -92,7 +92,6 @@ static int Open( vlc_object_t *p_this )
 {
     demux_t     *p_demux = (demux_t*)p_this;
     demux_sys_t *p_sys;
-    vlc_value_t val;
     es_format_t fmt;
 
     /* Only when selected */
@@ -100,27 +99,17 @@ static int Open( vlc_object_t *p_this )
         return VLC_EGENERIC;
 
     /* Set up p_demux */
-    p_demux->pf_demux = Demux;
-    p_demux->pf_control = Control;
+    STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
     p_demux->info.i_update = 0;
     p_demux->info.i_title = 0;
     p_demux->info.i_seekpoint = 0;
-    p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
-    memset( p_sys, 0, sizeof( demux_sys_t ) );
 
-    var_Create( p_demux, "fake-duration", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
-    var_Get( p_demux, "fake-duration", &val );
-    p_sys->i_duration = val.i_int * 1000;
-
-    var_Create( p_demux, "fake-fps", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
-    var_Get( p_demux, "fake-fps", &val );
-    p_sys->f_fps = val.f_float;
+    p_sys->i_duration = var_CreateGetInteger( p_demux, "fake-duration" ) * 1000;
+    p_sys->f_fps = var_CreateGetFloat( p_demux, "fake-fps" );
 
     /* Declare the elementary stream */
     es_format_Init( &fmt, VIDEO_ES, VLC_FOURCC('f','a','k','e') );
-    var_Create( p_demux, "fake-id", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
-    var_Get( p_demux, "fake-id", &val );
-    fmt.i_id = val.i_int;
+    fmt.i_id = var_CreateGetInteger( p_demux, "fake-id" );
     p_sys->p_es_video = es_out_Add( p_demux->out, &fmt );
 
     /* Update default_pts to a suitable value for access */
index ec3b40e753ee48e28762416bc47e19d817024574..e50375c0023e268eeef64fd420586852810c8260 100644 (file)
@@ -153,11 +153,8 @@ static int Open( vlc_object_t *p_this )
 #ifdef HAVE_SYS_STAT_H
     struct stat         stat_info;
 #endif
-    vlc_bool_t          b_stdin;
-
     file_entry_t *      p_file;
-
-    b_stdin = psz_name[0] == '-' && psz_name[1] == '\0';
+    vlc_bool_t          b_stdin = psz_name[0] == '-' && psz_name[1] == '\0';
 
     if( !b_stdin )
     {
@@ -192,17 +189,7 @@ static int Open( vlc_object_t *p_this )
 #endif
     }
 
-    p_access->pf_read = Read;
-    p_access->pf_block = NULL;
-    p_access->pf_seek = Seek;
-    p_access->pf_control = Control;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
+    STANDARD_READ_ACCESS_INIT;
     p_sys->i_nb_reads = 0;
     p_sys->b_kfir = VLC_FALSE;
     p_sys->file = NULL;
index c1737e0ada3f97dd46ee872aa288cc6874c203c5..70728ba3fd61f6feab734c2a6a90b0fbd1f8de78 100644 (file)
@@ -207,18 +207,7 @@ static int Open( vlc_object_t *p_this )
     char         *psz_arg;
 
     /* Init p_access */
-    p_access->pf_read = Read;
-    p_access->pf_block = NULL;
-    p_access->pf_seek = Seek;
-    p_access->pf_control = Control;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
-    memset( p_sys, 0, sizeof( access_sys_t ) );
+    STANDARD_READ_ACCESS_INIT
     p_sys->fd_cmd = -1;
     p_sys->fd_data = -1;
 
index 097c4e4683fade56d92db39e1716219c542321d9..73c27b24d5b3feca6c9833e8a712532f70de804d 100644 (file)
@@ -104,20 +104,7 @@ static int Open( vlc_object_t *p_this )
        open a file with a valid protocol, try to open at least file:// */
     gnome_vfs_open( &p_handle, "file://", 5 );
 
-    p_access->pf_read = Read;
-    p_access->pf_block = NULL;
-    p_access->pf_seek = Seek;
-    p_access->pf_control = Control;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
-
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
-    if( !p_sys )
-        return VLC_ENOMEM;
+    STANDARD_READ_ACCESS_INIT;
 
     p_sys->p_handle = p_handle;
     p_sys->i_nb_reads = 0;
index 369d2ac69ae3f4067e93da9fabc0ef5e6c75d69e..b0c2044789e00c44f18dee437cef72b0b18d20f8 100644 (file)
@@ -161,18 +161,7 @@ static int Open( vlc_object_t *p_this )
     char         *psz, *p;
 
     /* Set up p_access */
-    p_access->pf_read = Read;
-    p_access->pf_block = NULL;
-    p_access->pf_control = Control;
-    p_access->pf_seek = Seek;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
-    memset( p_sys, 0, sizeof( access_sys_t ) );
+    STANDARD_READ_ACCESS_INIT;
     p_sys->fd = -1;
     p_sys->b_proxy = VLC_FALSE;
     p_sys->i_version = 1;
index 727fa1343c135b289debac585cf5a27e598e9584..f9eca7de0943f4ffc956da5cb56ff59fcd824eb2 100644 (file)
@@ -235,11 +235,12 @@ static int Open( vlc_object_t *p_this )
         return VLC_EGENERIC;
     }
 
-    p_access->info.i_size = 0;
+    /* Init p_access */
+    STANDARD_READ_ACCESS_INIT;
+
     i_ret = p_smb->fstat( p_smb, p_file, &filestat );
     if( i_ret ) msg_Err( p_access, "stat failed (%s)", strerror(errno) );
     else p_access->info.i_size = filestat.st_size;
-
 #else
 
 #ifndef WIN32
@@ -258,7 +259,9 @@ static int Open( vlc_object_t *p_this )
         return VLC_EGENERIC;
     }
 
-    p_access->info.i_size = 0;
+    /* Init p_access */
+    STANDARD_READ_ACCESS_INIT;
+
     i_ret = smbc_fstat( i_smb, &filestat );
     if( i_ret ) msg_Err( p_access, "stat failed (%s)", strerror(i_ret) );
     else p_access->info.i_size = filestat.st_size;
@@ -266,19 +269,6 @@ static int Open( vlc_object_t *p_this )
 
     free( psz_uri );
 
-    /* Init p_access */
-    p_access->pf_read = Read;
-    p_access->pf_block = NULL;
-    p_access->pf_seek = Seek;
-    p_access->pf_control = Control;
-    p_access->info.i_update = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
-    memset( p_sys, 0, sizeof( access_sys_t ) );
-
 #ifdef USE_CTX
     p_sys->p_smb = p_smb;
     p_sys->p_file = p_file;
index e8690e6c1f685f54bb5ff82968a86768908a5eff..db44cc56f754c48189906d1aea9de74eff399192 100644 (file)
@@ -98,17 +98,10 @@ static int Open( vlc_object_t *p_this )
     *psz_parser++ = '\0';
 
     /* Init p_access */
-    p_access->pf_read = Read;
-    p_access->pf_block = NULL;
-    p_access->pf_control = Control;
-    p_access->pf_seek = NULL;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
+    access_InitFields( p_access ); \
+    ACCESS_SET_CALLBACKS( Read, NULL, Control, NULL ); \
+    MALLOC_ERR( p_access->p_sys, access_sys_t ); \
+    p_sys = p_access->p_sys; memset( p_sys, 0, sizeof( access_sys_t ) );
 
     p_sys->fd = net_ConnectTCP( p_access, psz_dup, atoi( psz_parser ) );
     free( psz_dup );
index 0dec318d035536072f0b1ba44d7ef98c623be6b5..a455e066655df91bc22e5cf17bf38b9e77e9819a 100644 (file)
@@ -190,19 +190,11 @@ static int Open( vlc_object_t *p_this )
              psz_server_addr, i_server_port, psz_bind_addr, i_bind_port );
 
     /* Set up p_access */
-    p_access->pf_read = NULL;
-    p_access->pf_block = BlockChoose;
-    p_access->pf_control = Control;
-    p_access->pf_seek = NULL;
-    p_access->info.i_update = 0;
-    p_access->info.i_size = 0;
-    p_access->info.i_pos = 0;
-    p_access->info.b_eof = VLC_FALSE;
+    access_InitFields( p_access );
+    ACCESS_SET_CALLBACKS( NULL, BlockChoose, Control, NULL );
     p_access->info.b_prebuffered = VLC_FALSE;
-    p_access->info.i_title = 0;
-    p_access->info.i_seekpoint = 0;
+    MALLOC_ERR( p_access->p_sys, access_sys_t ); p_sys = p_access->p_sys;
 
-    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) );
     p_sys->fd = net_OpenUDP( p_access, psz_bind_addr, i_bind_port,
                                       psz_server_addr, i_server_port );
     if( p_sys->fd < 0 )
@@ -226,7 +218,6 @@ static int Open( vlc_object_t *p_this )
     /* Update default_pts to a suitable value for udp access */
     var_Create( p_access, "udp-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
 
-
     /* RTP reordering for out-of-sequence packets */
     p_sys->i_rtp_late = var_CreateGetInteger( p_access, "rtp-late" ) * 1000;
     p_sys->i_last_seqno = 0;
index fe1d013295b11b6a1e95d7f1f21bbaa005f5b8d0..88370267c77eb1dbef2efdd6e2f6c398771fc607 100644 (file)
@@ -163,12 +163,7 @@ static void Close( vlc_object_t * p_this )
     demux_t        *p_demux = (demux_t*)p_this;
     demux_sys_t    *p_sys = p_demux->p_sys;
 
-    /* Unneed module */
-    module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
-
-    /* Delete the decoder */
-    vlc_object_destroy( p_sys->p_packetizer );
-
+    DESTROY_PACKETIZER( p_sys->p_packetizer );
     free( p_sys );
 }
 
index 8e6fb8045f69360502439b336c708035a53be3f1..f8d1105cf634d1f180c418f1a87a3cfb71a7ec73 100644 (file)
@@ -167,11 +167,7 @@ static void Close( vlc_object_t *p_this )
     demux_t     *p_demux = (demux_t*)p_this;
     demux_sys_t *p_sys = p_demux->p_sys;
 
-    /* Unneed module */
-    module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
-
-    /* Delete the decoder */
-    vlc_object_destroy( p_sys->p_packetizer );
+    DESTROY_PACKETIZER( p_sys->p_packetizer );
 
     free( p_sys );
 }
index 03346368989ebeb0eb4f009f278eb346de6bd871..9d0f8e24b68e181d58f1f1cf8fb624140cb8d25c 100644 (file)
@@ -118,27 +118,10 @@ static int Open( vlc_object_t * p_this )
     }
     msg_Dbg( p_demux, "using %.2f fps", p_sys->f_fps );
 
-    /*
-     * Load the mpegvideo packetizer
-     */
-    p_sys->p_packetizer = vlc_object_create( p_demux, VLC_OBJECT_PACKETIZER );
-    p_sys->p_packetizer->pf_decode_audio = NULL;
-    p_sys->p_packetizer->pf_decode_video = NULL;
-    p_sys->p_packetizer->pf_decode_sub = NULL;
-    p_sys->p_packetizer->pf_packetize = NULL;
-    es_format_Init( &p_sys->p_packetizer->fmt_in, VIDEO_ES,
-                    VLC_FOURCC( 'h', '2', '6', '4' ) );
+    /* Load the mpegvideo packetizer */
+    INIT_VPACKETIZER( p_sys->p_packetizer,  'h', '2', '6', '4'  );
     es_format_Init( &p_sys->p_packetizer->fmt_out, UNKNOWN_ES, 0 );
-    p_sys->p_packetizer->p_module =
-        module_Need( p_sys->p_packetizer, "packetizer", NULL, 0 );
-
-    if( p_sys->p_packetizer->p_module == NULL)
-    {
-        vlc_object_destroy( p_sys->p_packetizer );
-        msg_Err( p_demux, "cannot find mp4v packetizer" );
-        free( p_sys );
-        return VLC_EGENERIC;
-    }
+    LOAD_PACKETIZER_OR_FAIL( p_sys->p_packetizer, "H264" );
 
     return VLC_SUCCESS;
 }
@@ -151,8 +134,7 @@ static void Close( vlc_object_t * p_this )
     demux_t     *p_demux = (demux_t*)p_this;
     demux_sys_t *p_sys = p_demux->p_sys;
 
-    module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
-    vlc_object_destroy( p_sys->p_packetizer );
+    DESTROY_PACKETIZER( p_sys->p_packetizer );
 
     free( p_sys );
 }
index 00ad088817665b36c384f1718ba711da90767acc..c5e23e86748dd5cea43d2f49c13c8cb64604a305 100644 (file)
@@ -122,8 +122,7 @@ static void Close( vlc_object_t * p_this )
     demux_t     *p_demux = (demux_t*)p_this;
     demux_sys_t *p_sys = p_demux->p_sys;
 
-    module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
-    vlc_object_destroy( p_sys->p_packetizer );
+    DESTROY_PACKETIZER( p_sys->p_packetizer );
 
     free( p_sys );
 }
index 5ba3e71af73ce8fe091eea7cc61fbab88e96a6da..a2995a10b85db0e1532ceb432c8a34fe733524c1 100644 (file)
@@ -104,27 +104,11 @@ static int Open( vlc_object_t * p_this )
     p_sys->p_es        = NULL;
     p_sys->i_dts       = 1;
 
-    /*
-     * Load the mpegvideo packetizer
-     */
-    p_sys->p_packetizer = vlc_object_create( p_demux, VLC_OBJECT_PACKETIZER );
-    p_sys->p_packetizer->pf_decode_audio = NULL;
-    p_sys->p_packetizer->pf_decode_video = NULL;
-    p_sys->p_packetizer->pf_decode_sub = NULL;
-    p_sys->p_packetizer->pf_packetize = NULL;
-    es_format_Init( &p_sys->p_packetizer->fmt_in, VIDEO_ES,
-                    VLC_FOURCC( 'm', 'p', '4', 'v' ) );
+    /*  Load the mpeg4video packetizer */
+    INIT_VPACKETIZER( p_sys->p_packetizer, 'm', 'p', '4', 'v' );
     es_format_Init( &p_sys->p_packetizer->fmt_out, UNKNOWN_ES, 0 );
-    p_sys->p_packetizer->p_module =
-        module_Need( p_sys->p_packetizer, "packetizer", NULL, 0 );
-
-    if( p_sys->p_packetizer->p_module == NULL)
-    {
-        vlc_object_destroy( p_sys->p_packetizer );
-        msg_Err( p_demux, "cannot find mp4v packetizer" );
-        free( p_sys );
-        return VLC_EGENERIC;
-    }
+    
+    LOAD_PACKETIZER_OR_FAIL( p_sys->p_packetizer, "mpeg4 video" );
 
     /* We need to wait until we gtt p_extra (VOL header) from the packetizer
      * before we create the output */
@@ -140,8 +124,7 @@ static void Close( vlc_object_t * p_this )
     demux_t     *p_demux = (demux_t*)p_this;
     demux_sys_t *p_sys = p_demux->p_sys;
 
-    module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
-    vlc_object_destroy( p_sys->p_packetizer );
+    DESTROY_PACKETIZER( p_sys->p_packetizer) ;
 
     free( p_sys );
 }
index e1e3951d6c0a223ea87a94b8781ceb3b0ee6d045..ea83502654dbcada99aa1a89eef2136805c791f0 100644 (file)
@@ -157,35 +157,16 @@ static int Open( vlc_object_t * p_this )
         if( !b_ok && !p_demux->b_force ) return VLC_EGENERIC;
     }
 
-    p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) );
+    STANDARD_DEMUX_INIT; p_sys = p_demux->p_sys;
     memset( p_sys, 0, sizeof( demux_sys_t ) );
     p_sys->p_es = 0;
-    p_sys->p_packetizer = 0;
     p_sys->b_start = VLC_TRUE;
     p_sys->meta = 0;
-    p_demux->pf_demux   = Demux;
-    p_demux->pf_control = Control;
-
-    /*
-     * Load the mpeg audio packetizer
-     */
-    p_sys->p_packetizer = vlc_object_create( p_demux, VLC_OBJECT_PACKETIZER );
-    p_sys->p_packetizer->pf_decode_audio = NULL;
-    p_sys->p_packetizer->pf_decode_video = NULL;
-    p_sys->p_packetizer->pf_decode_sub = NULL;
-    p_sys->p_packetizer->pf_packetize = NULL;
-    es_format_Init( &p_sys->p_packetizer->fmt_in, AUDIO_ES,
-                    VLC_FOURCC( 'm', 'p', 'g', 'a' ) );
-    es_format_Init( &p_sys->p_packetizer->fmt_out, UNKNOWN_ES, 0 );
-    p_sys->p_packetizer->p_module =
-        module_Need( p_sys->p_packetizer, "packetizer", NULL, 0 );
 
-    if( p_sys->p_packetizer->p_module == NULL )
-    {
-        msg_Err( p_demux, "cannot find mpga packetizer" );
-        Close( VLC_OBJECT(p_demux ) );
-        return VLC_EGENERIC;
-    }
+    /* Load the mpeg audio packetizer */
+    INIT_APACKETIZER( p_sys->p_packetizer, 'm', 'p', 'g', 'a' );
+    es_format_Init( &p_sys->p_packetizer->fmt_out, UNKNOWN_ES, 0 );
+    LOAD_PACKETIZER_OR_FAIL( p_sys->p_packetizer, "mpga" );
 
     /* Xing header */
     if( HeaderCheck( header ) )
@@ -354,13 +335,9 @@ static void Close( vlc_object_t * p_this )
     demux_t     *p_demux = (demux_t*)p_this;
     demux_sys_t *p_sys = p_demux->p_sys;
 
+    DESTROY_PACKETIZER( p_sys->p_packetizer );
     if( p_sys->meta ) vlc_meta_Delete( p_sys->meta );
 
-    if( p_sys->p_packetizer && p_sys->p_packetizer->p_module )
-        module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
-    if( p_sys->p_packetizer )
-        vlc_object_destroy( p_sys->p_packetizer );
-
     free( p_sys );
 }
 
index 7a3c4ca3489a930f39a25ecbbbdda01facd27da5..80d9a40c0c36a7e665e99d6a44a966bc72e95622 100644 (file)
@@ -125,8 +125,7 @@ static void Close( vlc_object_t * p_this )
     demux_t     *p_demux = (demux_t*)p_this;
     demux_sys_t *p_sys = p_demux->p_sys;
 
-    module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
-    vlc_object_destroy( p_sys->p_packetizer );
+    DESTROY_PACKETIZER( p_sys->p_packetizer );
 
     free( p_sys );
 }