demuxers: remove the need for input_thread_t by using the new "meta-preparsed" input...
authorRafaël Carré <funman@videolan.org>
Thu, 4 Oct 2007 03:44:34 +0000 (03:44 +0000)
committerRafaël Carré <funman@videolan.org>
Thu, 4 Oct 2007 03:44:34 +0000 (03:44 +0000)
tta & ffmpeg: remove unneeded "meta reader" loading
tta didn't use anyway, and ffmpeg uses information from libavcodec

modules/codec/ffmpeg/demux.c
modules/demux/flac.c
modules/demux/mpc.c
modules/demux/mpeg/m4a.c
modules/demux/mpeg/mpga.c
modules/demux/ogg.c
modules/demux/tta.c

index 10051e0..3ae0570 100644 (file)
@@ -30,7 +30,6 @@
 #include <vlc_demux.h>
 #include <vlc_stream.h>
 #include <vlc_meta.h>
-#include <vlc_input.h>
 
 /* 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;
 }
 
index 7ff557c..8ab99d8 100644 (file)
@@ -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;
index c201ed8..52357a2 100644 (file)
@@ -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 );
 }
 
index 5911d49..ccbce1c 100644 (file)
@@ -27,7 +27,6 @@
 
 #include <vlc/vlc.h>
 #include <vlc_demux.h>
-#include <vlc_input.h>
 #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 );
index 2d2400e..d1f871b 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <vlc/vlc.h>
 #include <vlc_demux.h>
+#include <vlc_meta.h>
 #include <vlc_codec.h>
 #include <vlc_input.h>
 
@@ -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 );
index b2b56cf..4b8e614 100644 (file)
@@ -26,8 +26,9 @@
  * Preamble
  *****************************************************************************/
 #include <vlc/vlc.h>
-#include <vlc_input.h>
 #include <vlc_demux.h>
+#include <vlc_meta.h>
+#include <vlc_input.h>
 
 #include <ogg/ogg.h>
 
@@ -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;
index 7763edf..cd1aaef 100644 (file)
@@ -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;
     }