Commit a0cbc6ed authored by Clément Stenac's avatar Clément Stenac

Improve meta/art logic

parent 71079c79
...@@ -474,10 +474,11 @@ VLC_EXPORT( void, input_StopThread, ( input_thread_t * ) ); ...@@ -474,10 +474,11 @@ VLC_EXPORT( void, input_StopThread, ( input_thread_t * ) );
VLC_EXPORT( void, input_DestroyThread, ( input_thread_t * ) ); VLC_EXPORT( void, input_DestroyThread, ( input_thread_t * ) );
#define input_MetaFetch(a,b) __input_MetaFetch(VLC_OBJECT(a),b) int input_MetaFetch ( playlist_t *, input_item_t * );
VLC_EXPORT( int, __input_MetaFetch, ( vlc_object_t *, input_item_t * ) ); int input_ArtFetch ( playlist_t *, input_item_t * );
#define input_ArtFetch(a,b) __input_ArtFetch(VLC_OBJECT(a),b) vlc_bool_t input_MetaSatisfied ( playlist_t*, input_item_t*,
VLC_EXPORT( int, __input_ArtFetch, ( vlc_object_t *, input_item_t * ) ); uint32_t*, uint32_t*, vlc_bool_t );
int input_DownloadAndCacheArt ( playlist_t *, input_item_t * );
enum input_query_e enum input_query_e
{ {
...@@ -540,7 +541,6 @@ VLC_EXPORT( void, input_DecoderDecode,( decoder_t *, block_t * ) ); ...@@ -540,7 +541,6 @@ VLC_EXPORT( void, input_DecoderDecode,( decoder_t *, block_t * ) );
VLC_EXPORT( vlc_bool_t, input_AddSubtitles, ( input_thread_t *, char *, vlc_bool_t ) ); VLC_EXPORT( vlc_bool_t, input_AddSubtitles, ( input_thread_t *, char *, vlc_bool_t ) );
VLC_EXPORT( int, input_DownloadAndCacheArt, ( vlc_object_t *p_parent, input_item_t *p_item ) );
#endif #endif
...@@ -225,6 +225,6 @@ struct meta_engine_t ...@@ -225,6 +225,6 @@ struct meta_engine_t
input_item_t *p_item; input_item_t *p_item;
}; };
VLC_EXPORT( uint32_t, input_GetMetaEngineFlags, ( vlc_meta_t *p_meta ) ); uint32_t input_CurrentMetaFlags( vlc_meta_t *p_meta );
#endif #endif
...@@ -543,10 +543,10 @@ struct module_symbols_t ...@@ -543,10 +543,10 @@ struct module_symbols_t
char * (*input_ItemGetInfo_inner) (input_item_t *p_i, const char *psz_cat,const char *psz_name); char * (*input_ItemGetInfo_inner) (input_item_t *p_i, const char *psz_cat,const char *psz_name);
int (*input_ItemAddInfo_inner) (input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ...); int (*input_ItemAddInfo_inner) (input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ...);
void (*input_ItemAddOptionNoDup_inner) (input_item_t *, const char *); void (*input_ItemAddOptionNoDup_inner) (input_item_t *, const char *);
int (*__input_MetaFetch_inner) (vlc_object_t *, input_item_t *); void *__input_MetaFetch_deprecated;
int (*input_DownloadAndCacheArt_inner) (vlc_object_t *p_parent, input_item_t *p_item); void *input_DownloadAndCacheArt_deprecated;
uint32_t (*input_GetMetaEngineFlags_inner) (vlc_meta_t *p_meta); void *input_GetMetaEngineFlags_deprecated;
int (*__input_ArtFetch_inner) (vlc_object_t *, input_item_t *); void *__input_ArtFetch_deprecated;
void *input_AskForArt_deprecated; void *input_AskForArt_deprecated;
int (*playlist_AskForArtEnqueue_inner) (playlist_t *, input_item_t *); int (*playlist_AskForArtEnqueue_inner) (playlist_t *, input_item_t *);
}; };
...@@ -1022,10 +1022,6 @@ struct module_symbols_t ...@@ -1022,10 +1022,6 @@ struct module_symbols_t
# define input_ItemGetInfo (p_symbols)->input_ItemGetInfo_inner # define input_ItemGetInfo (p_symbols)->input_ItemGetInfo_inner
# define input_ItemAddInfo (p_symbols)->input_ItemAddInfo_inner # define input_ItemAddInfo (p_symbols)->input_ItemAddInfo_inner
# define input_ItemAddOptionNoDup (p_symbols)->input_ItemAddOptionNoDup_inner # define input_ItemAddOptionNoDup (p_symbols)->input_ItemAddOptionNoDup_inner
# define __input_MetaFetch (p_symbols)->__input_MetaFetch_inner
# define input_DownloadAndCacheArt (p_symbols)->input_DownloadAndCacheArt_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 # define playlist_AskForArtEnqueue (p_symbols)->playlist_AskForArtEnqueue_inner
# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__) # elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
/****************************************************************** /******************************************************************
...@@ -1503,10 +1499,6 @@ struct module_symbols_t ...@@ -1503,10 +1499,6 @@ struct module_symbols_t
((p_symbols)->input_ItemGetInfo_inner) = input_ItemGetInfo; \ ((p_symbols)->input_ItemGetInfo_inner) = input_ItemGetInfo; \
((p_symbols)->input_ItemAddInfo_inner) = input_ItemAddInfo; \ ((p_symbols)->input_ItemAddInfo_inner) = input_ItemAddInfo; \
((p_symbols)->input_ItemAddOptionNoDup_inner) = input_ItemAddOptionNoDup; \ ((p_symbols)->input_ItemAddOptionNoDup_inner) = input_ItemAddOptionNoDup; \
((p_symbols)->__input_MetaFetch_inner) = __input_MetaFetch; \
((p_symbols)->input_DownloadAndCacheArt_inner) = input_DownloadAndCacheArt; \
((p_symbols)->input_GetMetaEngineFlags_inner) = input_GetMetaEngineFlags; \
((p_symbols)->__input_ArtFetch_inner) = __input_ArtFetch; \
((p_symbols)->playlist_AskForArtEnqueue_inner) = playlist_AskForArtEnqueue; \ ((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; \
...@@ -1561,6 +1553,10 @@ struct module_symbols_t ...@@ -1561,6 +1553,10 @@ 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_MetaFetch_deprecated = NULL; \
(p_symbols)->input_DownloadAndCacheArt_deprecated = NULL; \
(p_symbols)->input_GetMetaEngineFlags_deprecated = NULL; \
(p_symbols)->__input_ArtFetch_deprecated = NULL; \
(p_symbols)->input_AskForArt_deprecated = NULL; \ (p_symbols)->input_AskForArt_deprecated = NULL; \
# endif /* __PLUGIN__ */ # endif /* __PLUGIN__ */
......
...@@ -32,48 +32,50 @@ ...@@ -32,48 +32,50 @@
# include <sys/stat.h> # include <sys/stat.h>
#endif #endif
int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item ); int input_FindArtInCache( playlist_t *p_playlist, input_item_t *p_item );
int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item ) vlc_bool_t input_MetaSatisfied( playlist_t *p_playlist, input_item_t *p_item,
uint32_t *pi_mandatory, uint32_t *pi_optional,
vlc_bool_t b_check_cache )
{
// FIXME don't var_Stuff at each loop
int i_policy = var_CreateGetInteger( p_playlist, "album-art" );
if( b_check_cache )
input_FindArtInCache( p_playlist, p_item );
*pi_mandatory = VLC_META_ENGINE_TITLE | VLC_META_ENGINE_ARTIST |
(i_policy == ALBUM_ART_ALL ? VLC_META_ENGINE_ART_URL : 0 );
uint32_t i_meta = input_CurrentMetaFlags( p_item->p_meta );
*pi_mandatory &= ~i_meta;
*pi_optional = 0; /// Todo
return *pi_mandatory ? VLC_FALSE:VLC_TRUE;
}
int input_MetaFetch( playlist_t *p_playlist, input_item_t *p_item )
{ {
struct meta_engine_t *p_me; struct meta_engine_t *p_me;
uint32_t i_mandatory = 0, i_optional = 0, i_meta; uint32_t i_mandatory, i_optional;
int i_policy;
if( !p_item->p_meta ) return VLC_EGENERIC; if( !p_item->p_meta ) return VLC_EGENERIC;
i_policy = var_CreateGetInteger( p_parent, "album-art" ); input_MetaSatisfied( p_playlist, p_item,
&i_mandatory, &i_optional, VLC_FALSE );
i_mandatory = VLC_META_ENGINE_TITLE
| VLC_META_ENGINE_ARTIST;
if( i_policy == ALBUM_ART_ALL )
{
i_mandatory |= VLC_META_ENGINE_ART_URL;
}
else
{
i_optional |= VLC_META_ENGINE_ART_URL;
}
input_FindArtInCache( p_parent, p_item );
i_meta = input_GetMetaEngineFlags( p_item->p_meta );
i_mandatory &= ~i_meta;
i_optional &= ~i_meta;
if( !i_mandatory ) return VLC_SUCCESS; // Meta shouldn't magically appear
assert( i_mandatory );
p_me = vlc_object_create( p_parent, VLC_OBJECT_META_ENGINE ); p_me = vlc_object_create( p_playlist, VLC_OBJECT_META_ENGINE );
p_me->i_flags |= OBJECT_FLAGS_NOINTERACT; p_me->i_flags |= OBJECT_FLAGS_NOINTERACT;
p_me->i_mandatory = i_mandatory; p_me->i_mandatory = i_mandatory;
p_me->i_optional = i_optional; p_me->i_optional = i_optional;
p_me->p_item = p_item; p_me->p_item = p_item;
p_me->p_module = module_Need( p_me, "meta fetcher", 0, VLC_FALSE ); p_me->p_module = module_Need( p_me, "meta fetcher", 0, VLC_FALSE );
vlc_object_attach( p_me, p_parent ); vlc_object_attach( p_me, p_playlist );
if( !p_me->p_module ) if( !p_me->p_module )
{ {
msg_Err( p_parent, "no suitable meta fetcher module" ); msg_Dbg( p_playlist, "unable to fetch meta" );
vlc_object_detach( p_me ); vlc_object_detach( p_me );
vlc_object_destroy( p_me ); vlc_object_destroy( p_me );
return VLC_EGENERIC; return VLC_EGENERIC;
...@@ -87,27 +89,34 @@ int __input_MetaFetch( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -87,27 +89,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 ) int input_ArtFetch( playlist_t *p_playlist, input_item_t *p_item )
{ {
if( !p_item->p_meta ) if( !p_item->p_meta ) return VLC_EGENERIC;
return VLC_EGENERIC;
/* TODO: call art fetcher modules */
if( !p_item->p_meta->psz_arturl || !*p_item->p_meta->psz_arturl ) if( !p_item->p_meta->psz_arturl || !*p_item->p_meta->psz_arturl )
{
module_t *p_module;
PL_LOCK;
p_playlist->p_private = p_item;
p_module = module_Need( p_playlist, "art finder", 0, VLC_FALSE );
if( !p_module )
{
msg_Dbg( p_playlist, "unable to find art" );
return VLC_EGENERIC; return VLC_EGENERIC;
}
module_Unneed( p_playlist, p_module );
p_playlist->p_private = NULL;
if( strncmp( "file://", p_item->p_meta->psz_arturl, 7 ) ) if( !p_item->p_meta->psz_arturl || !*p_item->p_meta->psz_arturl )
{ return VLC_EGENERIC;
return input_DownloadAndCacheArt( p_parent, p_item );
} }
return VLC_SUCCESS; return input_DownloadAndCacheArt( p_playlist, p_item );
} }
#ifndef MAX_PATH #ifndef MAX_PATH
# define MAX_PATH 250 # define MAX_PATH 250
#endif #endif
int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item ) int input_FindArtInCache( playlist_t *p_playlist, input_item_t *p_item )
{ {
char *psz_artist; char *psz_artist;
char *psz_album; char *psz_album;
...@@ -126,20 +135,19 @@ int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -126,20 +135,19 @@ int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item )
snprintf( psz_filename, MAX_PATH, snprintf( psz_filename, MAX_PATH,
"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_playlist->p_libvlc->psz_homedir,
psz_artist, psz_album, ppsz_type[i] ); 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_playlist, "album art %s already exists in cache"
, psz_filename ); , psz_filename );
vlc_meta_SetArtURL( p_item->p_meta, psz_filename ); vlc_meta_SetArtURL( p_item->p_meta, psz_filename );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
} }
/* Use a art finder module to find the URL */
return VLC_EGENERIC; return VLC_EGENERIC;
} }
...@@ -147,7 +155,7 @@ int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -147,7 +155,7 @@ int input_FindArtInCache( vlc_object_t *p_parent, input_item_t *p_item )
* Download the art using the URL or an art downloaded * Download the art using the URL or an art downloaded
* This function should be called only if data is not already in cache * This function should be called only if data is not already in cache
*/ */
int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item ) int input_DownloadAndCacheArt( playlist_t *p_playlist, input_item_t *p_item )
{ {
int i_status = VLC_EGENERIC; int i_status = VLC_EGENERIC;
stream_t *p_stream; stream_t *p_stream;
...@@ -169,27 +177,27 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -169,27 +177,27 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item )
snprintf( psz_filename, MAX_PATH, snprintf( psz_filename, MAX_PATH,
"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_playlist->p_libvlc->psz_homedir,
psz_artist, psz_album, psz_type ); psz_artist, psz_album, psz_type );
snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR, snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR,
p_parent->p_libvlc->psz_homedir ); p_playlist->p_libvlc->psz_homedir );
utf8_mkdir( psz_dir ); utf8_mkdir( psz_dir );
snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP "art", snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP "art",
p_parent->p_libvlc->psz_homedir ); p_playlist->p_libvlc->psz_homedir );
utf8_mkdir( psz_dir ); utf8_mkdir( psz_dir );
snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP
"art" DIR_SEP "%s", "art" DIR_SEP "%s",
p_parent->p_libvlc->psz_homedir, psz_artist ); p_playlist->p_libvlc->psz_homedir, psz_artist );
utf8_mkdir( psz_dir ); utf8_mkdir( psz_dir );
snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP snprintf( psz_dir, MAX_PATH, "%s" DIR_SEP CONFIG_DIR DIR_SEP
"art" DIR_SEP "%s" DIR_SEP "%s", "art" DIR_SEP "%s" DIR_SEP "%s",
p_parent->p_libvlc->psz_homedir, p_playlist->p_libvlc->psz_homedir,
psz_artist, psz_album ); psz_artist, psz_album );
utf8_mkdir( psz_dir ); utf8_mkdir( psz_dir );
/* Todo: check for stuff that needs a downloader module */ /* Todo: check for stuff that needs a downloader module */
p_stream = stream_UrlNew( p_parent, p_item->p_meta->psz_arturl ); p_stream = stream_UrlNew( p_playlist, p_item->p_meta->psz_arturl );
if( p_stream ) if( p_stream )
{ {
...@@ -203,7 +211,7 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -203,7 +211,7 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item )
free( p_buffer ); free( p_buffer );
fclose( p_file ); fclose( p_file );
stream_Delete( p_stream ); stream_Delete( p_stream );
msg_Dbg( p_parent, "Album art saved to %s\n", psz_filename ); msg_Dbg( p_playlist, "Album art saved to %s\n", psz_filename );
free( p_item->p_meta->psz_arturl ); free( p_item->p_meta->psz_arturl );
p_item->p_meta->psz_arturl = strdup( psz_filename ); p_item->p_meta->psz_arturl = strdup( psz_filename );
i_status = VLC_SUCCESS; i_status = VLC_SUCCESS;
...@@ -211,7 +219,7 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item ) ...@@ -211,7 +219,7 @@ int input_DownloadAndCacheArt( vlc_object_t *p_parent, input_item_t *p_item )
return i_status; return i_status;
} }
uint32_t input_GetMetaEngineFlags( vlc_meta_t *p_meta ) uint32_t input_CurrentMetaFlags( vlc_meta_t *p_meta )
{ {
uint32_t i_meta = 0; uint32_t i_meta = 0;
......
...@@ -447,6 +447,7 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -447,6 +447,7 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
{ {
playlist_t *p_playlist = (playlist_t *)p_obj->p_parent; playlist_t *p_playlist = (playlist_t *)p_obj->p_parent;
int i_activity; int i_activity;
uint32_t i_m, i_o;
vlc_mutex_lock( &p_obj->object_lock ); vlc_mutex_lock( &p_obj->object_lock );
...@@ -459,7 +460,6 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -459,7 +460,6 @@ 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 ) &&
...@@ -484,17 +484,16 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -484,17 +484,16 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
var_SetInteger( p_playlist, "item-change", p_current->i_id ); var_SetInteger( p_playlist, "item-change", p_current->i_id );
} }
PL_LOCK; PL_LOCK;
/* We haven't retrieved enough meta, add to secondary queue /* If we haven't retrieved enough meta, add to secondary queue
* which will run the "meta fetchers" * which will run the "meta fetchers"
* TODO: - use i_mandatory stuff here instead of hardcoded T/A * TODO:
* - 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( !input_MetaSatisfied( p_playlist, p_current, &i_m, &i_o,
&& p_current->p_meta->psz_artist && VLC_TRUE ) )
*p_current->p_meta->psz_artist) ) {
{*/ preparse_item_t p;
p.p_item = p_current; p.p_item = p_current;
p.b_fetch_art = VLC_FALSE; 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);
...@@ -504,9 +503,9 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj ) ...@@ -504,9 +503,9 @@ void playlist_PreparseLoop( playlist_preparse_t *p_obj )
p ); 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
...@@ -536,10 +535,13 @@ void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t *p_obj ) ...@@ -536,10 +535,13 @@ void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t *p_obj )
REMOVE_ELEM( p_obj->p_waiting, p_obj->i_waiting, 0 ); 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_item ) if( p_item )
{
if( !b_fetch_art )
{ {
input_MetaFetch( p_playlist, p_item ); input_MetaFetch( p_playlist, p_item );
p_item->p_meta->i_status |= ITEM_META_FETCHED; p_item->p_meta->i_status |= ITEM_META_FETCHED;
if( b_fetch_art == VLC_TRUE ) }
else
{ {
input_ArtFetch( p_playlist, p_item ); input_ArtFetch( p_playlist, p_item );
p_item->p_meta->i_status |= ITEM_ART_FETCHED; p_item->p_meta->i_status |= ITEM_ART_FETCHED;
...@@ -547,8 +549,6 @@ void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t *p_obj ) ...@@ -547,8 +549,6 @@ void playlist_SecondaryPreparseLoop( playlist_secondary_preparse_t *p_obj )
var_SetInteger( p_playlist, "item-change", p_item->i_id ); var_SetInteger( p_playlist, "item-change", p_item->i_id );
vlc_gc_decref( p_item ); vlc_gc_decref( p_item );
} }
else
PL_UNLOCK;
return; return;
} }
vlc_mutex_unlock( &p_obj->object_lock ); vlc_mutex_unlock( &p_obj->object_lock );
......
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