]> git.sesse.net Git - vlc/commitdiff
add new playlist_PreparseEnqueueItem function which preparses a playlist_item
authorAntoine Cellerier <dionoea@videolan.org>
Sat, 20 Aug 2005 10:17:20 +0000 (10:17 +0000)
committerAntoine Cellerier <dionoea@videolan.org>
Sat, 20 Aug 2005 10:17:20 +0000 (10:17 +0000)
and all its children.

include/vlc_playlist.h
include/vlc_symbols.h
src/playlist/playlist.c

index dcc590a7432f20bb97dcfbd4878dc87810426357..2e4038d5d86de056638a3a982ee2648cf906a96e 100644 (file)
@@ -261,6 +261,7 @@ VLC_EXPORT( int,  playlist_Clear, ( playlist_t * ) );
 VLC_EXPORT( int,  playlist_LockClear, ( playlist_t * ) );
 
 VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) );
+VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) );
 
 /* Services discovery */
 
index 962918a37fbc86cfe738236c5dc5c2c21b0195ce..c744470cf9a4c5e41ac8ccc174390d009a3926f3 100644 (file)
@@ -416,6 +416,7 @@ struct module_symbols_t
     const char * (*VLC_CompileHost_inner) (void);
     const char * (*VLC_Version_inner) (void);
     const char * (*VLC_CompileTime_inner) (void);
+    int (*playlist_PreparseEnqueueItem_inner) (playlist_t *, playlist_item_t *);
 };
 # if defined (__PLUGIN__)
 #  define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
@@ -814,6 +815,7 @@ struct module_symbols_t
 #  define VLC_CompileHost (p_symbols)->VLC_CompileHost_inner
 #  define VLC_Version (p_symbols)->VLC_Version_inner
 #  define VLC_CompileTime (p_symbols)->VLC_CompileTime_inner
+#  define playlist_PreparseEnqueueItem (p_symbols)->playlist_PreparseEnqueueItem_inner
 # elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
 /******************************************************************
  * STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
@@ -1215,6 +1217,7 @@ struct module_symbols_t
     ((p_symbols)->VLC_CompileHost_inner) = VLC_CompileHost; \
     ((p_symbols)->VLC_Version_inner) = VLC_Version; \
     ((p_symbols)->VLC_CompileTime_inner) = VLC_CompileTime; \
+    ((p_symbols)->playlist_PreparseEnqueueItem_inner) = playlist_PreparseEnqueueItem; \
     (p_symbols)->net_ConvertIPv4_deprecated = NULL; \
     (p_symbols)->vlc_fix_readdir_charset_deprecated = NULL; \
     (p_symbols)->__osd_VolumeDown_deprecated = NULL; \
index caa9628ff9476374bb5cc1849bc151822ac2660f..93212c64a7e77deebe0866e426c6513fa7e50d85 100644 (file)
@@ -52,6 +52,8 @@ static int ItemChange( vlc_object_t *, const char *,
 
 int playlist_vaControl( playlist_t * p_playlist, int i_query, va_list args );
 
+void playlist_PreparseEnqueueItemSub( playlist_t *, playlist_item_t * );
+
 
 /**
  * Create playlist
@@ -450,6 +452,39 @@ int playlist_PreparseEnqueue( playlist_t *p_playlist,
     return VLC_SUCCESS;
 }
 
+/* Should only be called if playlist and preparser are locked */
+void playlist_PreparseEnqueueItemSub( playlist_t *p_playlist,
+                                     playlist_item_t *p_item )
+{
+    int i;
+    if( p_item->i_children == -1 )
+    {
+        INSERT_ELEM( p_playlist->p_preparse->pp_waiting,
+                     p_playlist->p_preparse->i_waiting,
+                     p_playlist->p_preparse->i_waiting,
+                     &(p_item->input) );
+    }
+    else
+    {
+        for( i = 0; i < p_item->i_children; i++)
+        {
+            playlist_PreparseEnqueueItemSub( p_playlist,
+                                             p_item->pp_children[i] );
+        }
+    }
+}
+
+int playlist_PreparseEnqueueItem( playlist_t *p_playlist,
+                                  playlist_item_t *p_item )
+{
+    vlc_mutex_lock( &p_playlist->object_lock );
+    vlc_mutex_lock( &p_playlist->p_preparse->object_lock );
+    playlist_PreparseEnqueueItemSub( p_playlist, p_item );
+    vlc_mutex_unlock( &p_playlist->p_preparse->object_lock );
+    vlc_mutex_unlock( &p_playlist->object_lock );
+    return VLC_SUCCESS;
+}
+
 
 /* Destroy remaining objects */
 static mtime_t ObjectGarbageCollector( playlist_t *p_playlist, int i_type,