Cosmetics.
authorLaurent Aimar <fenrir@videolan.org>
Mon, 1 Dec 2008 22:16:39 +0000 (23:16 +0100)
committerLaurent Aimar <fenrir@videolan.org>
Thu, 4 Dec 2008 19:34:06 +0000 (20:34 +0100)
src/input/input.c

index d5c3dae..5430237 100644 (file)
@@ -70,6 +70,8 @@ static void             WaitDie   ( input_thread_t *p_input );
 static void             End     ( input_thread_t *p_input );
 static void             MainLoop( input_thread_t *p_input );
 
+static void ObjectKillChildrens( input_thread_t *, vlc_object_t * );
+
 static inline int ControlPopNoLock( input_thread_t *, int *, vlc_value_t *, mtime_t i_deadline );
 static void       ControlReduce( input_thread_t * );
 static bool Control( input_thread_t *, int, vlc_value_t );
@@ -86,6 +88,8 @@ static input_source_t *InputSourceNew( input_thread_t *);
 static int  InputSourceInit( input_thread_t *, input_source_t *,
                              const char *, const char *psz_forced_demux );
 static void InputSourceClean( input_source_t * );
+static void InputSourceMeta( input_thread_t *, input_source_t *, vlc_meta_t * );
+
 /* TODO */
 //static void InputGetAttachments( input_thread_t *, input_source_t * );
 static void SlaveDemux( input_thread_t *p_input );
@@ -96,8 +100,6 @@ static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta );
 static char *InputGetExtraFiles( input_thread_t *p_input,
                                  const char *psz_access, const char *psz_path );
 
-static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_demux );
-static void AccessMeta( input_thread_t * p_input, vlc_meta_t *p_meta );
 static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_attachment,
                               int i_new, input_attachment_t **pp_new );
 
@@ -443,23 +445,6 @@ int __input_Preparse( vlc_object_t *p_parent, input_item_t *p_item )
  *
  * \param the input thread to stop
  */
-static void ObjectKillChildrens( input_thread_t *p_input, vlc_object_t *p_obj )
-{
-    vlc_list_t *p_list;
-    int i;
-
-    if( p_obj->i_object_type == VLC_OBJECT_VOUT ||
-        p_obj->i_object_type == VLC_OBJECT_AOUT ||
-        p_obj == VLC_OBJECT(p_input->p->p_sout) )
-        return;
-
-    vlc_object_kill( p_obj );
-
-    p_list = vlc_list_children( p_obj );
-    for( i = 0; i < p_list->i_count; i++ )
-        ObjectKillChildrens( p_input, p_list->p_values[i].p_object );
-    vlc_list_release( p_list );
-}
 void input_StopThread( input_thread_t *p_input )
 {
     /* Set die for input and ALL of this childrens (even (grand-)grand-childrens)
@@ -479,6 +464,27 @@ sout_instance_t *input_DetachSout( input_thread_t *p_input )
     return p_sout;
 }
 
+/*****************************************************************************
+ * ObjectKillChildrens
+ *****************************************************************************/
+static void ObjectKillChildrens( input_thread_t *p_input, vlc_object_t *p_obj )
+{
+    vlc_list_t *p_list;
+    int i;
+
+    if( p_obj->i_object_type == VLC_OBJECT_VOUT ||
+        p_obj->i_object_type == VLC_OBJECT_AOUT ||
+        p_obj == VLC_OBJECT(p_input->p->p_sout) )
+        return;
+
+    vlc_object_kill( p_obj );
+
+    p_list = vlc_list_children( p_obj );
+    for( i = 0; i < p_list->i_count; i++ )
+        ObjectKillChildrens( p_input, p_list->p_values[i].p_object );
+    vlc_list_release( p_list );
+}
+
 /*****************************************************************************
  * Run: main thread loop
  * This is the "normal" thread that spawns the input processing chain,
@@ -1204,11 +1210,13 @@ static int Init( input_thread_t * p_input )
     InputMetaUser( p_input, p_meta );
 
     /* Get meta data from master input */
-    DemuxMeta( p_input, p_meta, p_input->p->input.p_demux );
+    InputSourceMeta( p_input, &p_input->p->input, p_meta );
 
-    /* Access_file does not give any meta, and there are no slave */
-    AccessMeta( p_input, p_meta );
+    /* And from slave */
+    for( int i = 0; i < p_input->p->i_slave; i++ )
+        InputSourceMeta( p_input, p_input->p->slave[i], p_meta );
 
+    /* */
     InputUpdateMeta( p_input, p_meta );
 
     if( !p_input->b_preparsing )
@@ -2235,10 +2243,8 @@ static void UpdateGenericFromAccess( input_thread_t *p_input )
 static input_source_t *InputSourceNew( input_thread_t *p_input )
 {
     VLC_UNUSED(p_input);
-    input_source_t *in = malloc( sizeof( input_source_t ) );
-    if( in )
-        memset( in, 0, sizeof( input_source_t ) );
-    return in;
+
+    return calloc( 1,  sizeof( input_source_t ) );
 }
 
 /*****************************************************************************
@@ -2717,61 +2723,6 @@ static void InputMetaUser( input_thread_t *p_input, vlc_meta_t *p_meta )
 #undef GET_META
 }
 
-/*****************************************************************************
- * InputGetExtraFiles
- *  Autodetect extra input list
- *****************************************************************************/
-static char *InputGetExtraFiles( input_thread_t *p_input,
-                                 const char *psz_access, const char *psz_path )
-{
-    char *psz_list = NULL;
-
-    if( ( psz_access && *psz_access && strcmp( psz_access, "file" ) ) || !psz_path )
-        return NULL;
-
-
-    const char *psz_ext = strrchr( psz_path, '.' );
-    if( !psz_ext || strcmp( psz_ext, ".001" ) )
-        return NULL;
-
-    char *psz_file = strdup( psz_path );
-    if( !psz_file )
-        return NULL;
-
-    /* Try to list .xyz files */
-    for( int i = 2; i < 999; i++ )
-    {
-        char *psz_ext = strrchr( psz_file, '.' );
-        struct stat st;
-
-        snprintf( psz_ext, 5, ".%.3d", i );
-
-        if( utf8_stat( psz_file, &st )
-         || !S_ISREG( st.st_mode ) || !st.st_size )
-            continue;
-
-        msg_Dbg( p_input, "Detected extra file `%s'", psz_file );
-
-        if( psz_list )
-        {
-            char *psz_old = psz_list;
-            /* FIXME how to handle file with ',' ?*/
-            if( asprintf( &psz_list, "%s,%s", psz_old, psz_file ) < 0 )
-            {
-                psz_list = psz_old;
-                break;
-            }
-        }
-        else
-        {
-            psz_list = strdup( psz_file );
-        }
-    }
-    free( psz_file );
-
-    return psz_list;
-}
-
 /*****************************************************************************
  * InputUpdateMeta: merge p_item meta data with p_meta taking care of
  * arturl and locking issue.
@@ -2826,7 +2777,6 @@ static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta )
     /** \todo handle sout meta */
 }
 
-
 static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_attachment,
                               int i_new, input_attachment_t **pp_new )
 {
@@ -2845,61 +2795,36 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta
     *ppp_attachment = attachment;
 }
 
-static void AccessMeta( input_thread_t * p_input, vlc_meta_t *p_meta )
+static void InputSourceMeta( input_thread_t *p_input,
+                             input_source_t *p_source, vlc_meta_t *p_meta )
 {
-    int i;
+    access_t *p_access = p_source->p_access;
+    demux_t *p_demux = p_source->p_demux;
 
-    if( p_input->b_preparsing )
-        return;
+    /* XXX Remember that checking against p_item->p_meta->i_status & ITEM_PREPARSED
+     * is a bad idea */
 
-    if( p_input->p->input.p_access )
-        access_Control( p_input->p->input.p_access, ACCESS_GET_META,
-                         p_meta );
+    /* Read access meta */
+    if( p_access )
+        access_Control( p_access, ACCESS_GET_META, p_meta );
 
-    /* Get meta data from slave input */
-    for( i = 0; i < p_input->p->i_slave; i++ )
-    {
-        DemuxMeta( p_input, p_meta, p_input->p->slave[i]->p_demux );
-        if( p_input->p->slave[i]->p_access )
-        {
-            access_Control( p_input->p->slave[i]->p_access,
-                             ACCESS_GET_META, p_meta );
-        }
-    }
-}
+    /* Read demux meta */
+    demux_Control( p_demux, DEMUX_GET_META, p_meta );
 
-static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_demux )
-{
+    /* If the demux report unsupported meta data, try an external "meta reader" */
     bool b_bool;
-    module_t *p_id3;
-
-#if 0
-    /* XXX I am not sure it is a great idea, besides, there is more than that
-     * if we want to do it right */
-    vlc_mutex_lock( &p_item->lock );
-    if( p_item->p_meta && (p_item->p_meta->i_status & ITEM_PREPARSED ) )
-    {
-        vlc_mutex_unlock( &p_item->lock );
-        return;
-    }
-    vlc_mutex_unlock( &p_item->lock );
-#endif
-
-    demux_Control( p_demux, DEMUX_GET_META, p_meta );
     if( demux_Control( p_demux, DEMUX_HAS_UNSUPPORTED_META, &b_bool ) )
         return;
     if( !b_bool )
         return;
 
-    p_demux->p_private = calloc( 1, sizeof( demux_meta_t ) );
-    if(! p_demux->p_private )
+    demux_meta_t *p_demux_meta = p_demux->p_private = calloc( 1, sizeof(*p_demux_meta) );
+    if( !p_demux_meta )
         return;
 
-    p_id3 = module_need( p_demux, "meta reader", NULL, 0 );
+    module_t *p_id3 = module_need( p_demux, "meta reader", NULL, 0 );
     if( p_id3 )
     {
-        demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
-
         if( p_demux_meta->p_meta )
         {
             vlc_meta_Merge( p_meta, p_demux_meta->p_meta );
@@ -2915,9 +2840,66 @@ static void DemuxMeta( input_thread_t *p_input, vlc_meta_t *p_meta, demux_t *p_d
         }
         module_unneed( p_demux, p_id3 );
     }
-    free( p_demux->p_private );
+    free( p_demux_meta );
 }
 
+/*****************************************************************************
+ * InputGetExtraFiles
+ *  Autodetect extra input list
+ *****************************************************************************/
+static char *InputGetExtraFiles( input_thread_t *p_input,
+                                 const char *psz_access, const char *psz_path )
+{
+    char *psz_list = NULL;
+
+    if( ( psz_access && *psz_access && strcmp( psz_access, "file" ) ) || !psz_path )
+        return NULL;
+
+
+    const char *psz_ext = strrchr( psz_path, '.' );
+    if( !psz_ext || strcmp( psz_ext, ".001" ) )
+        return NULL;
+
+    char *psz_file = strdup( psz_path );
+    if( !psz_file )
+        return NULL;
+
+    /* Try to list .xyz files */
+    for( int i = 2; i < 999; i++ )
+    {
+        char *psz_ext = strrchr( psz_file, '.' );
+        struct stat st;
+
+        snprintf( psz_ext, 5, ".%.3d", i );
+
+        if( utf8_stat( psz_file, &st )
+         || !S_ISREG( st.st_mode ) || !st.st_size )
+            continue;
+
+        msg_Dbg( p_input, "Detected extra file `%s'", psz_file );
+
+        if( psz_list )
+        {
+            char *psz_old = psz_list;
+            /* FIXME how to handle file with ',' ?*/
+            if( asprintf( &psz_list, "%s,%s", psz_old, psz_file ) < 0 )
+            {
+                psz_list = psz_old;
+                break;
+            }
+        }
+        else
+        {
+            psz_list = strdup( psz_file );
+        }
+    }
+    free( psz_file );
+
+    return psz_list;
+}
+
+
+/* */
 static void input_ChangeState( input_thread_t *p_input, int i_state )
 {
     const bool b_changed = p_input->i_state != i_state;