Commit 2d90e869 authored by Antoine Cellerier's avatar Antoine Cellerier

Some more (mostly) untested stuff:

 * Secondary queue items now have a b_fetch_art flag
 * You can use the playlist_AskForArtEnqueue function to ask for art from an interface. This will enqueue at the begining of the secondary queue
 * other stuff which i don't remember :)
 * (fix issues with previous (and unrelated) DIR_SEP commit)
parent e398a81b
...@@ -237,6 +237,7 @@ typedef struct services_discovery_t services_discovery_t; ...@@ -237,6 +237,7 @@ typedef struct services_discovery_t services_discovery_t;
typedef struct services_discovery_sys_t services_discovery_sys_t; typedef struct services_discovery_sys_t services_discovery_sys_t;
typedef struct playlist_add_t playlist_add_t; typedef struct playlist_add_t playlist_add_t;
typedef struct playlist_preparse_t playlist_preparse_t; typedef struct playlist_preparse_t playlist_preparse_t;
typedef struct playlist_secondary_preparse_t playlist_secondary_preparse_t;
/* Modules */ /* Modules */
typedef struct module_bank_t module_bank_t; typedef struct module_bank_t module_bank_t;
...@@ -1280,7 +1281,9 @@ VLC_EXPORT( const char *, VLC_Changeset, ( void ) ); ...@@ -1280,7 +1281,9 @@ VLC_EXPORT( const char *, VLC_Changeset, ( void ) );
#endif #endif
#if defined( WIN32 ) || defined( UNDER_CE ) #if defined( WIN32 ) || defined( UNDER_CE )
# define DIR_SEP_CHAR '\\'
# define DIR_SEP "\\" # define DIR_SEP "\\"
#else #else
# define DIR_SEP_CHAR '/'
# define DIR_SEP "/" # define DIR_SEP "/"
#endif #endif
...@@ -476,6 +476,8 @@ VLC_EXPORT( void, input_DestroyThread, ( input_thread_t * ) ); ...@@ -476,6 +476,8 @@ VLC_EXPORT( void, input_DestroyThread, ( input_thread_t * ) );
#define input_MetaFetch(a,b) __input_MetaFetch(VLC_OBJECT(a),b) #define input_MetaFetch(a,b) __input_MetaFetch(VLC_OBJECT(a),b)
VLC_EXPORT( int, __input_MetaFetch, ( vlc_object_t *, input_item_t * ) ); VLC_EXPORT( int, __input_MetaFetch, ( vlc_object_t *, input_item_t * ) );
#define input_ArtFetch(a,b) __input_ArtFetch(VLC_OBJECT(a),b)
VLC_EXPORT( int, __input_ArtFetch, ( vlc_object_t *, input_item_t * ) );
enum input_query_e enum input_query_e
{ {
......
...@@ -145,7 +145,7 @@ struct playlist_t ...@@ -145,7 +145,7 @@ struct playlist_t
mtime_t i_vout_destroyed_date; mtime_t i_vout_destroyed_date;
mtime_t i_sout_destroyed_date; mtime_t i_sout_destroyed_date;
playlist_preparse_t *p_preparse; /**< Preparser object */ playlist_preparse_t *p_preparse; /**< Preparser object */
playlist_preparse_t *p_secondary_preparse; /**< Preparser object */ playlist_secondary_preparse_t *p_secondary_preparse;/**< Preparser object */
vlc_mutex_t gc_lock; /**< Lock to protect the garbage collection */ vlc_mutex_t gc_lock; /**< Lock to protect the garbage collection */
...@@ -237,6 +237,7 @@ VLC_EXPORT( void, playlist_LockClear, ( playlist_t * ) ); ...@@ -237,6 +237,7 @@ VLC_EXPORT( void, playlist_LockClear, ( playlist_t * ) );
VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) ); VLC_EXPORT( int, playlist_PreparseEnqueue, (playlist_t *, input_item_t *) );
VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) ); VLC_EXPORT( int, playlist_PreparseEnqueueItem, (playlist_t *, playlist_item_t *) );
VLC_EXPORT( int, playlist_AskForArtEnqueue, (playlist_t *, input_item_t *) );
/* Services discovery */ /* Services discovery */
......
...@@ -546,6 +546,9 @@ struct module_symbols_t ...@@ -546,6 +546,9 @@ struct module_symbols_t
int (*__input_MetaFetch_inner) (vlc_object_t *, input_item_t *); int (*__input_MetaFetch_inner) (vlc_object_t *, input_item_t *);
int (*input_DownloadAndCacheArt_inner) (vlc_object_t *p_parent, input_item_t *p_item); int (*input_DownloadAndCacheArt_inner) (vlc_object_t *p_parent, input_item_t *p_item);
uint32_t (*input_GetMetaEngineFlags_inner) (vlc_meta_t *p_meta); uint32_t (*input_GetMetaEngineFlags_inner) (vlc_meta_t *p_meta);
int (*__input_ArtFetch_inner) (vlc_object_t *, input_item_t *);
void *input_AskForArt_deprecated;
int (*playlist_AskForArtEnqueue_inner) (playlist_t *, input_item_t *);
}; };
# if defined (__PLUGIN__) # if defined (__PLUGIN__)
# define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner # define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
...@@ -1022,6 +1025,8 @@ struct module_symbols_t ...@@ -1022,6 +1025,8 @@ struct module_symbols_t
# define __input_MetaFetch (p_symbols)->__input_MetaFetch_inner # define __input_MetaFetch (p_symbols)->__input_MetaFetch_inner
# define input_DownloadAndCacheArt (p_symbols)->input_DownloadAndCacheArt_inner # define input_DownloadAndCacheArt (p_symbols)->input_DownloadAndCacheArt_inner
# define input_GetMetaEngineFlags (p_symbols)->input_GetMetaEngineFlags_inner # define input_GetMetaEngineFlags (p_symbols)->input_GetMetaEngineFlags_inner
# define __input_ArtFetch (p_symbols)->__input_ArtFetch_inner
# define playlist_AskForArtEnqueue (p_symbols)->playlist_AskForArtEnqueue_inner
# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__) # elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
/****************************************************************** /******************************************************************
* STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access. * STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
...@@ -1501,6 +1506,8 @@ struct module_symbols_t ...@@ -1501,6 +1506,8 @@ struct module_symbols_t
((p_symbols)->__input_MetaFetch_inner) = __input_MetaFetch; \ ((p_symbols)->__input_MetaFetch_inner) = __input_MetaFetch; \
((p_symbols)->input_DownloadAndCacheArt_inner) = input_DownloadAndCacheArt; \ ((p_symbols)->input_DownloadAndCacheArt_inner) = input_DownloadAndCacheArt; \
((p_symbols)->input_GetMetaEngineFlags_inner) = input_GetMetaEngineFlags; \ ((p_symbols)->input_GetMetaEngineFlags_inner) = input_GetMetaEngineFlags; \
((p_symbols)->__input_ArtFetch_inner) = __input_ArtFetch; \
((p_symbols)->playlist_AskForArtEnqueue_inner) = playlist_AskForArtEnqueue; \
(p_symbols)->net_ConvertIPv4_deprecated = NULL; \ (p_symbols)->net_ConvertIPv4_deprecated = NULL; \
(p_symbols)->vlc_input_item_GetInfo_deprecated = NULL; \ (p_symbols)->vlc_input_item_GetInfo_deprecated = NULL; \
(p_symbols)->vlc_input_item_AddInfo_deprecated = NULL; \ (p_symbols)->vlc_input_item_AddInfo_deprecated = NULL; \
...@@ -1554,6 +1561,7 @@ struct module_symbols_t ...@@ -1554,6 +1561,7 @@ struct module_symbols_t
(p_symbols)->__intf_IntfProgress_deprecated = NULL; \ (p_symbols)->__intf_IntfProgress_deprecated = NULL; \
(p_symbols)->streaming_ChainToPsz_deprecated = NULL; \ (p_symbols)->streaming_ChainToPsz_deprecated = NULL; \
(p_symbols)->__input_SecondaryPreparse_deprecated = NULL; \ (p_symbols)->__input_SecondaryPreparse_deprecated = NULL; \
(p_symbols)->input_AskForArt_deprecated = NULL; \
# endif /* __PLUGIN__ */ # endif /* __PLUGIN__ */
#endif /* __VLC_SYMBOLS_H */ #endif /* __VLC_SYMBOLS_H */
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
# include <sys/stat.h> # include <sys/stat.h>
#endif #endif
int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item ); int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item );
int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item ) int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item )
{ {
...@@ -55,7 +55,7 @@ int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -55,7 +55,7 @@ int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item )
i_optional |= VLC_META_ENGINE_ART_URL; i_optional |= VLC_META_ENGINE_ART_URL;
} }
input_FindArt( p_parent, p_item ); input_FindArtInCache( p_parent, p_item );
i_meta = input_GetMetaEngineFlags( p_item->p_meta ); i_meta = input_GetMetaEngineFlags( p_item->p_meta );
i_mandatory &= ~i_meta; i_mandatory &= ~i_meta;
...@@ -87,18 +87,34 @@ int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -87,18 +87,34 @@ int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item )
return VLC_SUCCESS; return VLC_SUCCESS;
} }
int __input_ArtFetch( vlc_object_t *p_parent, input_item_t *p_item )
{
if( !p_item->p_meta )
return VLC_EGENERIC;
/* TODO: call art fetcher modules */
if( !p_item->p_meta->psz_arturl || !*p_item->p_meta->psz_arturl )
return VLC_EGENERIC;
if( strncmp( "file://", p_item->p_meta->psz_arturl, 7 ) )
{
return input_DownloadAndCacheArt( p_parent, p_item );
}
return VLC_SUCCESS;
}
#ifndef MAX_PATH #ifndef MAX_PATH
# define MAX_PATH 250 # define MAX_PATH 250
#endif #endif
int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item ) int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item )
{ {
char *psz_artist; char *psz_artist;
char *psz_album; char *psz_album;
char *psz_type;
char psz_filename[MAX_PATH]; char psz_filename[MAX_PATH];
int i; int i;
struct stat a; struct stat a;
const char ppsz_type[] = { ".jpg", ".png", ".gif", ".bmp", "" }; const char *ppsz_type[] = { ".jpg", ".png", ".gif", ".bmp", "" };
if( !p_item->p_meta ) return VLC_EGENERIC; if( !p_item->p_meta ) return VLC_EGENERIC;
...@@ -111,13 +127,14 @@ int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -111,13 +127,14 @@ int input_FindArt( vlc_object_t *p_parent, input_item_t *p_item )
"file://%s" DIR_SEP CONFIG_DIR DIR_SEP "art" "file://%s" DIR_SEP CONFIG_DIR DIR_SEP "art"
DIR_SEP "%s" DIR_SEP "%s" DIR_SEP "art%s", DIR_SEP "%s" DIR_SEP "%s" DIR_SEP "art%s",
p_parent->p_libvlc->psz_homedir, p_parent->p_libvlc->psz_homedir,
psz_artist, psz_album, psz_type ); psz_artist, psz_album, ppsz_type[i] );
/* Check if file exists */ /* Check if file exists */
if( utf8_stat( psz_filename+7, &a ) == 0 ) if( utf8_stat( psz_filename+7, &a ) == 0 )
{ {
msg_Dbg( p_parent, "album art %s already exists in cache" msg_Dbg( p_parent, "album art %s already exists in cache"
, psz_filename ); , psz_filename );
vlc_meta_SetArtURL( p_item->p_meta, psz_filename );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
} }
......
...@@ -222,7 +222,7 @@ static char **paths_to_list( char *psz_dir, char *psz_path ) ...@@ -222,7 +222,7 @@ static char **paths_to_list( char *psz_dir, char *psz_path )
psz_subdir[0] == '.' ? psz_dir : "", psz_subdir[0] == '.' ? psz_dir : "",
psz_subdir, psz_subdir,
psz_subdir[strlen(psz_subdir) - 1] == psz_subdir[strlen(psz_subdir) - 1] ==
DIR_SEP ? '\0' : DIR_SEP ); DIR_SEP_CHAR ? '\0' : DIR_SEP_CHAR );
subdirs[i] = psz_temp; subdirs[i] = psz_temp;
i++; i++;
} }
...@@ -277,7 +277,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path, ...@@ -277,7 +277,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
} }
/* extract filename & dirname from psz_fname */ /* extract filename & dirname from psz_fname */
tmp = strrchr( psz_fname, DIR_SEP ); tmp = strrchr( psz_fname, DIR_SEP_CHAR );
if( tmp ) if( tmp )
{ {
int dirlen = 0; int dirlen = 0;
...@@ -304,7 +304,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path, ...@@ -304,7 +304,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
} }
dirlen = strlen( f_dir ); dirlen = strlen( f_dir );
f_dir = (char *)realloc(f_dir, dirlen +2 ); f_dir = (char *)realloc(f_dir, dirlen +2 );
f_dir[dirlen] = DIR_SEP; f_dir[dirlen] = DIR_SEP_CHAR;
f_dir[dirlen+1] = '\0'; f_dir[dirlen+1] = '\0';
f_fname = FromLocaleDup( psz_fname ); f_fname = FromLocaleDup( psz_fname );
} }
......
...@@ -214,6 +214,27 @@ int playlist_PreparseEnqueueItem( playlist_t *p_playlist, ...@@ -214,6 +214,27 @@ int playlist_PreparseEnqueueItem( playlist_t *p_playlist,
return VLC_SUCCESS; return VLC_SUCCESS;
} }
int playlist_AskForArtEnqueue( playlist_t *p_playlist,
input_item_t *p_item )
{
int i;
preparse_item_t p;
p.p_item = p_item;
p.b_fetch_art = VLC_TRUE;
vlc_mutex_lock( &p_playlist->p_secondary_preparse->object_lock );
for( i = 0; i < p_playlist->p_secondary_preparse->i_waiting &&
p_playlist->p_secondary_preparse->p_waiting->b_fetch_art == VLC_TRUE;
i++ );
vlc_gc_incref( p_item );
INSERT_ELEM( p_playlist->p_secondary_preparse->p_waiting,
p_playlist->p_secondary_preparse->i_waiting,
i,
p );
vlc_mutex_unlock( &p_playlist->p_secondary_preparse->object_lock );
return VLC_SUCCESS;
}
void PreparseEnqueueItemSub( playlist_t *p_playlist, void PreparseEnqueueItemSub( playlist_t *p_playlist,
playlist_item_t *p_item ) playlist_item_t *p_item )
{ {
......
...@@ -459,6 +459,7 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -459,6 +459,7 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
if( p_current ) if( p_current )
{ {
vlc_bool_t b_preparsed = VLC_FALSE; vlc_bool_t b_preparsed = VLC_FALSE;
preparse_item_t p;
if( strncmp( p_current->psz_uri, "http:", 5 ) && if( strncmp( p_current->psz_uri, "http:", 5 ) &&
strncmp( p_current->psz_uri, "rtsp:", 5 ) && strncmp( p_current->psz_uri, "rtsp:", 5 ) &&
strncmp( p_current->psz_uri, "udp:", 4 ) && strncmp( p_current->psz_uri, "udp:", 4 ) &&
...@@ -488,21 +489,24 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -488,21 +489,24 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
* TODO: - use i_mandatory stuff here instead of hardcoded T/A * TODO: - use i_mandatory stuff here instead of hardcoded T/A
* - don't do this for things we won't get meta for, like * - don't do this for things we won't get meta for, like
* videos * videos
* -> done in input_MetaFetch atm
*/ */
if( !(p_current->p_meta->psz_title && *p_current->p_meta->psz_title /*if( !(p_current->p_meta->psz_title && *p_current->p_meta->psz_title
&& p_current->p_meta->psz_artist && && p_current->p_meta->psz_artist &&
*p_current->p_meta->psz_artist) ) *p_current->p_meta->psz_artist) )
{ {*/
p.p_item = p_current;
p.b_fetch_art = VLC_FALSE;
vlc_mutex_lock( &p_playlist->p_secondary_preparse->object_lock); vlc_mutex_lock( &p_playlist->p_secondary_preparse->object_lock);
INSERT_ELEM( p_playlist->p_secondary_preparse->pp_waiting, INSERT_ELEM( p_playlist->p_secondary_preparse->p_waiting,
p_playlist->p_secondary_preparse->i_waiting, p_playlist->p_secondary_preparse->i_waiting,
p_playlist->p_secondary_preparse->i_waiting, p_playlist->p_secondary_preparse->i_waiting,
p_current ); p );
vlc_mutex_unlock( vlc_mutex_unlock(
&p_playlist->p_secondary_preparse->object_lock); &p_playlist->p_secondary_preparse->object_lock);
} /*}
else else
vlc_gc_decref( p_current ); vlc_gc_decref( p_current );*/
PL_UNLOCK; PL_UNLOCK;
} }
else else
...@@ -519,7 +523,7 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -519,7 +523,7 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
} }
/** Main loop for secondary preparser queue */ /** Main loop for secondary preparser queue */
void playlist_SecondaryPreparseLoop( playlist_preparse_t *p_obj ) void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t *p_obj )
{ {
playlist_t *p_playlist = (playlist_t *)p_obj->p_parent; playlist_t *p_playlist = (playlist_t *)p_obj->p_parent;
...@@ -527,15 +531,21 @@ void playlist_SecondaryPreparseLoop( playlist_preparse_t *p_obj ) ...@@ -527,15 +531,21 @@ void playlist_SecondaryPreparseLoop( playlist_preparse_t *p_obj )
if( p_obj->i_waiting > 0 ) if( p_obj->i_waiting > 0 )
{ {
input_item_t *p_current = p_obj->pp_waiting[0]; vlc_bool_t b_fetch_art = p_obj->p_waiting->b_fetch_art;
REMOVE_ELEM( p_obj->pp_waiting, p_obj->i_waiting, 0 ); input_item_t *p_item = p_obj->p_waiting->p_item;
REMOVE_ELEM( p_obj->p_waiting, p_obj->i_waiting, 0 );
vlc_mutex_unlock( &p_obj->object_lock ); vlc_mutex_unlock( &p_obj->object_lock );
if( p_current ) if( p_item )
{ {
input_MetaFetch( p_playlist, p_current ); input_MetaFetch( p_playlist, p_item );
p_current->p_meta->i_status |= ITEM_META_FETCHED; p_item->p_meta->i_status |= ITEM_META_FETCHED;
var_SetInteger( p_playlist, "item-change", p_current->i_id ); if( b_fetch_art == VLC_TRUE )
vlc_gc_decref( p_current ); {
input_ArtFetch( p_playlist, p_item );
p_item->p_meta->i_status |= ITEM_ART_FETCHED;
}
var_SetInteger( p_playlist, "item-change", p_item->i_id );
vlc_gc_decref( p_item );
} }
else else
PL_UNLOCK; PL_UNLOCK;
......
...@@ -39,6 +39,19 @@ struct playlist_preparse_t ...@@ -39,6 +39,19 @@ struct playlist_preparse_t
input_item_t **pp_waiting; input_item_t **pp_waiting;
}; };
typedef struct preparse_item_t
{
input_item_t *p_item;
vlc_bool_t b_fetch_art;
} preparse_item_t;
struct playlist_secondary_preparse_t
{
VLC_COMMON_MEMBERS
vlc_mutex_t lock;
int i_waiting;
preparse_item_t *p_waiting;
};
/***************************************************************************** /*****************************************************************************
* Prototypes * Prototypes
...@@ -52,7 +65,7 @@ void playlist_Destroy ( playlist_t * ); ...@@ -52,7 +65,7 @@ void playlist_Destroy ( playlist_t * );
void playlist_MainLoop( playlist_t * ); void playlist_MainLoop( playlist_t * );
void playlist_LastLoop( playlist_t * ); void playlist_LastLoop( playlist_t * );
void playlist_PreparseLoop( playlist_preparse_t * ); void playlist_PreparseLoop( playlist_preparse_t * );
void playlist_SecondaryPreparseLoop( playlist_preparse_t * ); void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t * );
/* Control */ /* Control */
playlist_item_t * playlist_NextItem ( playlist_t * ); playlist_item_t * playlist_NextItem ( playlist_t * );
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
*****************************************************************************/ *****************************************************************************/
static void RunControlThread ( playlist_t * ); static void RunControlThread ( playlist_t * );
static void RunPreparse( playlist_preparse_t * ); static void RunPreparse( playlist_preparse_t * );
static void RunSecondaryPreparse( playlist_preparse_t * ); static void RunSecondaryPreparse( playlist_secondary_preparse_t * );
static playlist_t * CreatePlaylist( vlc_object_t *p_parent ); static playlist_t * CreatePlaylist( vlc_object_t *p_parent );
static void HandlePlaylist( playlist_t * ); static void HandlePlaylist( playlist_t * );
...@@ -96,7 +96,7 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent ) ...@@ -96,7 +96,7 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent )
// Secondary Preparse // Secondary Preparse
p_playlist->p_secondary_preparse = vlc_object_create( p_playlist, p_playlist->p_secondary_preparse = vlc_object_create( p_playlist,
sizeof( playlist_preparse_t ) ); sizeof( playlist_secondary_preparse_t ) );
if( !p_playlist->p_secondary_preparse ) if( !p_playlist->p_secondary_preparse )
{ {
msg_Err( p_playlist, "unable to create secondary preparser" ); msg_Err( p_playlist, "unable to create secondary preparser" );
...@@ -104,7 +104,7 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent ) ...@@ -104,7 +104,7 @@ void __playlist_ThreadCreate( vlc_object_t *p_parent )
return; return;
} }
p_playlist->p_secondary_preparse->i_waiting = 0; p_playlist->p_secondary_preparse->i_waiting = 0;
p_playlist->p_secondary_preparse->pp_waiting = NULL; p_playlist->p_secondary_preparse->p_waiting = NULL;
vlc_object_attach( p_playlist->p_secondary_preparse, p_playlist ); vlc_object_attach( p_playlist->p_secondary_preparse, p_playlist );
if( vlc_thread_create( p_playlist->p_secondary_preparse, if( vlc_thread_create( p_playlist->p_secondary_preparse,
...@@ -218,7 +218,7 @@ static void RunPreparse ( playlist_preparse_t *p_obj ) ...@@ -218,7 +218,7 @@ static void RunPreparse ( playlist_preparse_t *p_obj )
} }
} }
static void RunSecondaryPreparse( playlist_preparse_t *p_obj ) static void RunSecondaryPreparse( playlist_secondary_preparse_t *p_obj )
{ {
playlist_t *p_playlist = (playlist_t *)p_obj->p_parent; playlist_t *p_playlist = (playlist_t *)p_obj->p_parent;
/* Tell above that we're ready */ /* Tell above that we're ready */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment