From 626e56bfc8c041fcf1db5873a7a2824d6f4f688a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C3=ABl=20Carr=C3=A9?= Date: Thu, 4 Oct 2007 03:44:34 +0000 Subject: [PATCH] demuxers: remove the need for input_thread_t by using the new "meta-preparsed" input variable. tta & ffmpeg: remove unneeded "meta reader" loading tta didn't use anyway, and ffmpeg uses information from libavcodec --- modules/codec/ffmpeg/demux.c | 30 -------------------- modules/demux/flac.c | 53 +++++++++++++++--------------------- modules/demux/mpc.c | 37 ++++++++++--------------- modules/demux/mpeg/m4a.c | 41 ++++++++++++---------------- modules/demux/mpeg/mpga.c | 37 ++++++++++--------------- modules/demux/ogg.c | 51 +++++++++++++++++----------------- modules/demux/tta.c | 37 ++----------------------- 7 files changed, 97 insertions(+), 189 deletions(-) diff --git a/modules/codec/ffmpeg/demux.c b/modules/codec/ffmpeg/demux.c index 10051e0a90..3ae0570b89 100644 --- a/modules/codec/ffmpeg/demux.c +++ b/modules/codec/ffmpeg/demux.c @@ -30,7 +30,6 @@ #include #include #include -#include /* ffmpeg header */ #ifdef HAVE_FFMPEG_AVFORMAT_H @@ -256,35 +255,6 @@ int E_(OpenDemux)( vlc_object_t *p_this ) ( p_sys->ic->duration != (int64_t)AV_NOPTS_VALUE ) ? p_sys->ic->duration * 1000000 / AV_TIME_BASE : -1 ); - input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); - if( p_input ) - { - if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) - { - p_demux->p_private = malloc( sizeof( demux_meta_t ) ); - if( !p_demux->p_private ) - { - vlc_object_release( p_input ); - return VLC_ENOMEM; - } - module_t *p_meta = module_Need( p_demux, "meta reader", NULL, 0 ); - if( p_meta ) - { - demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; - vlc_meta_Merge( input_GetItem(p_input)->p_meta, - p_demux_meta->p_meta ); - vlc_meta_Delete( p_demux_meta->p_meta ); - module_Unneed( p_demux, p_meta ); - int i; - for( i = 0; i < p_demux_meta->i_attachments; i++ ) - free( p_demux_meta->attachments[i] ); - TAB_CLEAN( p_demux_meta->i_attachments, p_demux_meta->attachments ); - } - free( p_demux->p_private ); - } - vlc_object_release( p_input ); - } - return VLC_SUCCESS; } diff --git a/modules/demux/flac.c b/modules/demux/flac.c index 7ff557cc8b..8ab99d8bd4 100644 --- a/modules/demux/flac.c +++ b/modules/demux/flac.c @@ -155,44 +155,34 @@ static int Open( vlc_object_t * p_this ) } /* Parse possible id3 header */ - input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); - if( p_input ) + if( !var_CreateGetBool( p_demux, "meta-preparsed" ) ) { - if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) + p_demux->p_private = malloc( sizeof( demux_meta_t ) ); + if( !p_demux->p_private ) + return VLC_ENOMEM; + if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) { - p_demux->p_private = malloc( sizeof( demux_meta_t ) ); - if( !p_demux->p_private ) + module_Unneed( p_demux, p_id3 ); + demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; + vlc_meta_t *p_meta = p_demux_meta->p_meta; + + if( !p_sys->p_meta ) { - vlc_object_release( p_input ); - return VLC_ENOMEM; + p_sys->p_meta = p_meta; } - if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) + else if( p_meta ) { - demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; - vlc_meta_t *p_meta = p_demux_meta->p_meta; - - if( !p_sys->p_meta ) - { - p_sys->p_meta = p_meta; - } - else if( p_meta ) - { - vlc_meta_Merge( p_sys->p_meta, p_meta ); - vlc_meta_Delete( p_meta ); - } - p_demux->p_private = NULL; - module_Unneed( p_demux, p_id3 ); - int i; - for( i = 0; i < p_demux_meta->i_attachments; i++ ) - TAB_APPEND_CAST( (input_attachment_t**), - p_sys->i_attachments, p_sys->attachments, - p_demux_meta->attachments[p_demux_meta->i_attachments] ); - TAB_CLEAN( p_demux_meta->i_attachments, - p_demux_meta->attachments ); + vlc_meta_Merge( p_sys->p_meta, p_meta ); + vlc_meta_Delete( p_meta ); } - free( p_demux->p_private ); + int i; + for( i = 0; i < p_demux_meta->i_attachments; i++ ) + TAB_APPEND_CAST( (input_attachment_t**), + p_sys->i_attachments, p_sys->attachments, + p_demux_meta->attachments[p_demux_meta->i_attachments] ); + TAB_CLEAN( p_demux_meta->i_attachments, p_demux_meta->attachments ); } - vlc_object_release( p_input ); + free( p_demux->p_private ); } if( p_sys->i_cover_idx < p_sys->i_attachments ) @@ -216,6 +206,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; + var_Destroy( p_demux, "meta-preparsed" ); TAB_CLEAN( p_sys->i_seekpoint, p_sys->seekpoint ); int i; diff --git a/modules/demux/mpc.c b/modules/demux/mpc.c index c201ed8fa2..52357a2010 100644 --- a/modules/demux/mpc.c +++ b/modules/demux/mpc.c @@ -189,31 +189,23 @@ static int Open( vlc_object_t * p_this ) } /* Parse possible id3 header */ - input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); - if( p_input ) + if( !var_CreateGetBool( p_demux, "meta-preparsed" ) ) { - if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) + p_demux->p_private = malloc( sizeof( demux_meta_t ) ); + if( !p_demux->p_private ) + return VLC_ENOMEM; + if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) { - p_demux->p_private = malloc( sizeof( demux_meta_t ) ); - if( !p_demux->p_private ) - { - vlc_object_release( p_input ); - return VLC_ENOMEM; - } - if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) - { - demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; - p_sys->p_meta = p_demux_meta->p_meta; - module_Unneed( p_demux, p_id3 ); - int i; - for( i = 0; i < p_demux_meta->i_attachments; i++ ) - free( p_demux_meta->attachments[i] ); - TAB_CLEAN( p_demux_meta->i_attachments, - p_demux_meta->attachments ); - } - free( p_demux->p_private ); + module_Unneed( p_demux, p_id3 ); + demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; + p_sys->p_meta = p_demux_meta->p_meta; + int i; + for( i = 0; i < p_demux_meta->i_attachments; i++ ) + free( p_demux_meta->attachments[i] ); + TAB_CLEAN( p_demux_meta->i_attachments, + p_demux_meta->attachments ); } - vlc_object_release( p_input ); + free( p_demux->p_private ); } if( !p_sys->p_meta ) @@ -233,6 +225,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; + var_Destroy( p_demux, "meta-preparsed" ); free( p_sys ); } diff --git a/modules/demux/mpeg/m4a.c b/modules/demux/mpeg/m4a.c index 5911d49dc5..ccbce1c6b8 100644 --- a/modules/demux/mpeg/m4a.c +++ b/modules/demux/mpeg/m4a.c @@ -27,7 +27,6 @@ #include #include -#include #include "vlc_codec.h" /***************************************************************************** @@ -110,32 +109,23 @@ static int Open( vlc_object_t * p_this ) LOAD_PACKETIZER_OR_FAIL( p_sys->p_packetizer, "mp4 audio" ); /* Parse possible id3 header */ - input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); - if( p_input ) + if( !var_CreateGetBool( p_demux, "meta-preparsed" ) ) { - if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) + p_demux->p_private = malloc( sizeof( demux_meta_t ) ); + if( !p_demux->p_private ) + return VLC_ENOMEM; + if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) { - p_demux->p_private = malloc( sizeof( demux_meta_t ) ); - if( !p_demux->p_private ) - { - vlc_object_release( p_input ); - return VLC_ENOMEM; - } - if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) - { - demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; - p_sys->meta = p_demux_meta->p_meta; - p_demux->p_private = NULL; - module_Unneed( p_demux, p_id3 ); - int i; - for( i = 0; i < p_demux_meta->i_attachments; i++ ) - free( p_demux_meta->attachments[i] ); - TAB_CLEAN( p_demux_meta->i_attachments, - p_demux_meta->attachments ); - } - free( p_demux->p_private ); + module_Unneed( p_demux, p_id3 ); + demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; + p_sys->meta = p_demux_meta->p_meta; + int i; + /* attachments not supported in this demuxer */ + for( i = 0; i < p_demux_meta->i_attachments; i++ ) + free( p_demux_meta->attachments[i] ); + TAB_CLEAN( p_demux_meta->i_attachments, p_demux_meta->attachments ); } - vlc_object_release( p_input ); + free( p_demux->p_private ); } return VLC_SUCCESS; } @@ -148,6 +138,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; + var_Destroy( p_demux, "meta-preparsed" ); + if( p_sys->meta ) vlc_meta_Delete( p_sys->meta ); + DESTROY_PACKETIZER( p_sys->p_packetizer ); free( p_sys ); diff --git a/modules/demux/mpeg/mpga.c b/modules/demux/mpeg/mpga.c index 2d2400ef12..d1f871b592 100644 --- a/modules/demux/mpeg/mpga.c +++ b/modules/demux/mpeg/mpga.c @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -255,32 +256,22 @@ static int Open( vlc_object_t * p_this ) p_sys->p_block_out = p_block_out; /* Parse possible id3 header */ - input_thread_t *p_input = (input_thread_t *) - vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); - if( p_input ) + if( !var_CreateGetBool( p_demux, "meta-preparsed" ) ) { - if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) + p_demux->p_private = malloc( sizeof( demux_meta_t ) ); + if( !p_demux->p_private ) + return VLC_ENOMEM; + if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) { - p_demux->p_private = malloc( sizeof( demux_meta_t ) ); - if( !p_demux->p_private ) - { - vlc_object_release( p_input ); - return VLC_ENOMEM; - } - if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) - { - demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; - p_sys->meta = p_demux_meta->p_meta; - p_demux->p_private = NULL; - module_Unneed( p_demux, p_id3 ); - p_sys->i_attachments = p_demux_meta->i_attachments; - p_sys->attachments = p_demux_meta->attachments; - } - free( p_demux->p_private ); + module_Unneed( p_demux, p_id3 ); + demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; + p_sys->meta = p_demux_meta->p_meta; + p_sys->i_attachments = p_demux_meta->i_attachments; + p_sys->attachments = p_demux_meta->attachments; } - vlc_object_release( p_input ); + free( p_demux->p_private ); } - + else printf("SKIP\n"); /* */ p_sys->p_packetizer->fmt_out.b_packetized = VLC_TRUE; vlc_audio_replay_gain_MergeFromMeta( &p_sys->p_packetizer->fmt_out.audio_replay_gain, @@ -355,6 +346,8 @@ 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; + var_Destroy( p_demux, "meta-preparsed" ); + DESTROY_PACKETIZER( p_sys->p_packetizer ); if( p_sys->meta ) vlc_meta_Delete( p_sys->meta ); if( p_sys->p_block_out ) block_Release( p_sys->p_block_out ); diff --git a/modules/demux/ogg.c b/modules/demux/ogg.c index b2b56cfe09..4b8e6149c8 100644 --- a/modules/demux/ogg.c +++ b/modules/demux/ogg.c @@ -26,8 +26,9 @@ * Preamble *****************************************************************************/ #include -#include #include +#include +#include #include @@ -104,6 +105,9 @@ struct demux_sys_t /* bitrate */ int i_bitrate; + /* meta data */ + vlc_meta_t *meta; + /* attachments */ int i_attachments; input_attachment_t **attachments; @@ -183,7 +187,6 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *, logical_stream_t *, ogg_packe static int Open( vlc_object_t * p_this ) { demux_t *p_demux = (demux_t *)p_this; - input_thread_t *p_input; demux_sys_t *p_sys; const uint8_t *p_peek; @@ -207,32 +210,21 @@ static int Open( vlc_object_t * p_this ) /* Begnning of stream, tell the demux to look for elementary streams. */ p_sys->i_eos = 0; - - p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); - if( p_input ) + if( !var_CreateGetBool( p_demux, "meta-preparsed" ) ) { - if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) + p_demux->p_private = malloc( sizeof( demux_meta_t ) ); + if( !p_demux->p_private ) + return VLC_ENOMEM; + module_t *p_meta = module_Need( p_demux, "meta reader", NULL, 0 ); + if( p_meta ) { - p_demux->p_private = malloc( sizeof( demux_meta_t ) ); - if( !p_demux->p_private ) - { - vlc_object_release( p_input ); - return VLC_ENOMEM; - } - module_t *p_meta = module_Need( p_demux, "meta reader", NULL, 0 ); - if( p_meta ) - { - demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; - vlc_meta_Merge( input_GetItem(p_input)->p_meta, - p_demux_meta->p_meta ); - vlc_meta_Delete( p_demux_meta->p_meta ); - module_Unneed( p_demux, p_meta ); - p_sys->i_attachments = p_demux_meta->i_attachments; - p_sys->attachments = p_demux_meta->attachments; - } - free( p_demux->p_private ); + module_Unneed( p_demux, p_meta ); + demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; + p_sys->meta = p_demux_meta->p_meta; + p_sys->i_attachments = p_demux_meta->i_attachments; + p_sys->attachments = p_demux_meta->attachments; } - vlc_object_release( p_input ); + free( p_demux->p_private ); } /* Initialize the Ogg physical bitstream parser */ @@ -254,6 +246,9 @@ static void Close( vlc_object_t *p_this ) Ogg_EndOfStream( p_demux ); + var_Destroy( p_demux, "meta-preparsed" ); + if( p_sys->meta ) vlc_meta_Delete( p_sys->meta ); + int i; for( i = 0; i < p_sys->i_attachments; i++ ) free( p_sys->attachments[i] ); @@ -406,9 +401,15 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) int i; input_attachment_t ***ppp_attach; int *pi_int; + vlc_meta_t *p_meta; switch( i_query ) { + case DEMUX_GET_META: + p_meta = (vlc_meta_t *)va_arg( args, vlc_meta_t* ); + vlc_meta_Merge( p_meta, p_sys->meta ); + return VLC_SUCCESS; + case DEMUX_GET_TIME: pi64 = (int64_t*)va_arg( args, int64_t * ); *pi64 = p_sys->i_pcr; diff --git a/modules/demux/tta.c b/modules/demux/tta.c index 7763edf2cb..cd1aaefefd 100644 --- a/modules/demux/tta.c +++ b/modules/demux/tta.c @@ -139,39 +139,6 @@ static int Open( vlc_object_t * p_this ) free( p_seektable ); p_sys->i_start = stream_Tell( p_demux->s ); -#if 0 - /* Parse possible id3 header */ - input_thread_t *p_input = (input_thread_t *) - vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); - if( p_input ) - { - if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) - { - p_demux->p_private = malloc( sizeof( demux_meta_t ) ); - if( !p_demux->p_private ) - { - vlc_object_release( p_input ); - return VLC_ENOMEM; - } - if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) - { - demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; - p_sys->p_meta = p_demux_meta->p_meta; - p_demux->p_private = NULL; - module_Unneed( p_demux, p_id3 ); - int i; - for( i = 0; i < p_demux_meta->i_attachments; i++ ) - free( p_demux_meta->attachments[i] ); - TAB_CLEAN( p_demux_meta->i_attachments, - p_demux_meta->attachments ); - } - free( p_demux->p_private ); - } - vlc_object_release( p_input ); - } - if( !p_sys->p_meta ) - p_sys->p_meta = vlc_meta_New(); -#endif return VLC_SUCCESS; } @@ -252,7 +219,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) return VLC_SUCCESS; } return VLC_EGENERIC; - + case DEMUX_GET_LENGTH: pi64 = (int64_t*)va_arg( args, int64_t * ); *pi64 = I64C(1000000) * p_sys->i_totalframes * TTA_FRAMETIME; @@ -262,7 +229,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) pi64 = (int64_t*)va_arg( args, int64_t * ); *pi64 = I64C(1000000) * p_sys->i_currentframe * TTA_FRAMETIME; return VLC_SUCCESS; - + default: return VLC_EGENERIC; } -- 2.39.2