#error You are not libvlc or one of its plugins. You cannot include this file
#endif
+#ifndef __USE_GNU
+#define __USE_GNU
+#endif
+#include <string.h> /* strcasestr() */
+
/* __ is need because conflict with <vlc/input.h> */
#ifndef _VLC__INPUT_H
#define _VLC__INPUT_H 1
{
vlc_event_t event;
- //vlc_mutex_lock( &p_i->lock );
+ vlc_mutex_lock( &p_i->lock );
if( !p_i->p_meta )
p_i->p_meta = vlc_meta_New();
vlc_meta_Set( p_i->p_meta, meta_type, psz_val );
- //vlc_mutex_unlock( &p_i->lock );
+ vlc_mutex_unlock( &p_i->lock );
/* Notify interested third parties */
event.type = vlc_InputItemMetaChanged;
static inline vlc_bool_t input_item_MetaMatch( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz )
{
- //vlc_mutex_lock( &p_i->lock );
+ vlc_mutex_lock( &p_i->lock );
const char * meta = vlc_meta_Get( p_i->p_meta, meta_type );
vlc_bool_t ret = meta && strcasestr( meta, psz );
- //vlc_mutex_unlock( &p_i->lock );
+ vlc_mutex_unlock( &p_i->lock );
return ret;
}
static inline char * input_item_GetMeta( input_item_t *p_i, vlc_meta_type_t meta_type )
{
char * psz = NULL;
- //vlc_mutex_lock( &p_i->lock );
+ vlc_mutex_lock( &p_i->lock );
if( !p_i->p_meta )
{
- //vlc_mutex_unlock( &p_i->lock );
+ vlc_mutex_unlock( &p_i->lock );
return NULL;
}
if( vlc_meta_Get( p_i->p_meta, meta_type ) )
psz = strdup( vlc_meta_Get( p_i->p_meta, meta_type ) );
- //vlc_mutex_unlock( &p_i->lock );
+ vlc_mutex_unlock( &p_i->lock );
return psz;
}
static inline char * input_item_GetName( input_item_t * p_i )
{
- //vlc_mutex_lock( &p_i->lock );
+ vlc_mutex_lock( &p_i->lock );
char *psz_s = p_i->psz_name ? strdup( p_i->psz_name ) : NULL;
- //vlc_mutex_unlock( &p_i->lock );
+ vlc_mutex_unlock( &p_i->lock );
return psz_s;
}
if( !p_input ) return VLC_SUCCESS;
vlc_object_yield( p_input );
- if( p_input->b_dead || !input_GetItem(p_input)->psz_name )
+ char *psz_name = input_item_GetName( input_GetItem( p_input ) );
+ if( p_input->b_dead || !psz_name )
{
/* Not playing anything ... */
+ free( psz_name );
vlc_object_release( p_input );
return VLC_SUCCESS;
}
+ free( psz_name );
/* Playing something ... */
- psz_artist = input_item_GetArtist( input_GetItem(p_input) ) ?
- strdup( input_item_GetArtist( input_GetItem(p_input) ) ) :
- strdup( "" );
- psz_album = input_item_GetAlbum( input_GetItem(p_input) ) ?
- strdup( input_item_GetAlbum( input_GetItem(p_input) ) ) :
- strdup("" );
- psz_title = strdup( input_GetItem(p_input)->psz_name );
+ psz_artist = input_item_GetArtist( input_GetItem( p_input ) );
+ if( psz_artist == NULL ) psz_artist = strdup( "" );
+ psz_album = input_item_GetAlbum( input_GetItem( p_input ) ) ;
+ if( psz_album == NULL ) psz_album = strdup( "" );
+ psz_title = input_item_GetName( input_GetItem( p_input ) );
if( psz_title == NULL ) psz_title = strdup( N_("(no title)") );
snprintf( psz_tmp, GROWL_MAX_LENGTH, "%s %s %s",
psz_title, psz_artist, psz_album );
}
/* Playing something ... */
- psz_artist = input_item_GetArtist( input_GetItem(p_input) ) ?
- strdup( input_item_GetArtist( input_GetItem(p_input) ) ) :
- strdup( _("no artist") );
- psz_album = input_item_GetAlbum( input_GetItem(p_input) ) ?
- strdup( input_item_GetAlbum( input_GetItem(p_input) ) ) :
- strdup( _("no album") );
- psz_title = strdup( input_GetItem(p_input)->psz_name );
+ psz_artist = input_item_GetArtist( input_GetItem( p_input ) );
+ if( psz_artist == NULL ) psz_artist = strdup( _("no artist") );
+ psz_album = input_item_GetAlbum( input_GetItem( p_input ) ) ;
+ if( psz_album == NULL ) psz_album = strdup( _("no album") );
+ psz_title = input_item_GetName( input_GetItem( p_input ) );
vlc_object_release( p_input );
assert( p_current->p_input->psz_uri );
/* General info */
- if( p_current->p_input->psz_name &&
- strcmp( p_current->p_input->psz_uri,
- p_current->p_input->psz_name ) )
+ char *psz_name = input_item_GetName( p_current->p_input );
+ if( psz_name && strcmp( p_current->p_input->psz_uri, psz_name ) )
{
- char *psz_artist = input_item_GetArtist( p_current->p_input ) ?
- strdup( input_item_GetArtist( p_current->p_input ) ):
- strdup( "" );
+ char *psz_artist = input_item_GetArtist( p_current->p_input );
+ if( psz_artist == NULL ) psz_artist = strdup( "" );
if( psz_artist && *psz_artist )
{
/* write EXTINF with artist */
(int)( p_current->p_input->i_duration/1000000 ),
p_current->p_input->psz_name);
}
- if( psz_artist )
- free( psz_artist );
+ free( psz_artist );
}
+ free( psz_name );
/* VLC specific options */
for( j = 0; j < p_current->p_input->i_options; j++ )
}
/* -> the artist/creator */
- psz = input_item_GetArtist( p_item->p_input ) ?
- strdup( input_item_GetArtist( p_item->p_input ) ):
- strdup( "" );
+ psz = input_item_GetArtist( p_item->p_input );
+ if( psz == NULL ) psz = strdup( "" );
psz_temp = convert_xml_special_chars( psz );
- if( psz ) free( psz );
+ free( psz );
if( *psz_temp )
{
fprintf( p_file, "\t\t\t<creator>%s</creator>\n", psz_temp );
free( psz_temp );
/* -> the album */
- psz = input_item_GetAlbum( p_item->p_input ) ?
- strdup( input_item_GetAlbum( p_item->p_input ) ):
- strdup( "" );
+ psz = input_item_GetAlbum( p_item->p_input );
+ if( psz == NULL ) psz = strdup( "" );
psz_temp = convert_xml_special_chars( psz );
- if( psz ) free( psz );
+ free( psz );
if( *psz_temp )
{
fprintf( p_file, "\t\t\t<album>%s</album>\n", psz_temp );
free( psz_temp );
/* -> the track number */
- psz = input_item_GetTrackNum( p_item->p_input ) ?
- strdup( input_item_GetTrackNum( p_item->p_input ) ):
- strdup( "" );
+ psz = input_item_GetTrackNum( p_item->p_input );
+ if( psz == NULL ) psz = strdup( "" );
if( psz )
{
if( *psz )
{
fprintf( p_file, "\t\t\t<trackNum>%i</trackNum>\n", atoi( psz ) );
}
- free( psz );
}
+ free( psz );
/* -> the description */
- psz = input_item_GetDescription( p_item->p_input ) ?
- strdup( input_item_GetDescription( p_item->p_input ) ):
- strdup( "" );
+ psz = input_item_GetDescription( p_item->p_input );
+ if( psz == NULL ) psz = strdup( "" );
psz_temp = convert_xml_special_chars( psz );
- if( psz ) free( psz );
+ free( psz );
if( *psz_temp )
{
fprintf( p_file, "\t\t\t<annotation>%s</annotation>\n", psz_temp );
if( p_input )
{
- if( !EMPTY_STR( input_item_GetTitle( input_GetItem(p_input) ) ) )
- {
- psz_title = strdup( input_item_GetTitle( input_GetItem(p_input) ) );
- }
- else
+ psz_title = strdup( input_item_GetTitle( input_GetItem( p_input ) ) );
+ if( EMPTY_STR( psz_title ) )
{
+ free( psz_title );
char *psz = strrchr( input_GetItem(p_input)->psz_uri, '/' );
if( psz )
p_cat = malloc( sizeof( info_category_t ) );
if( !p_cat )
{
- vlc_mutex_lock( &p_input->p->input.p_item->lock );
+ vlc_mutex_unlock( &p_input->p->input.p_item->lock );
return VLC_EGENERIC;
}
p_cat->psz_name = strdup( psz_cat );
p_info = malloc( sizeof( info_t ) );
if( !p_info )
{
- vlc_mutex_lock( &p_input->p->input.p_item->lock );
+ vlc_mutex_unlock( &p_input->p->input.p_item->lock );
return VLC_EGENERIC;
}
}
/* Update now playing */
- vlc_mutex_lock( &p_input->p->input.p_item->lock );
input_item_SetNowPlaying( p_input->p->input.p_item,
p_pgrm->psz_now_playing );
input_item_SetPublisher( p_input->p->input.p_item,
p_pgrm->psz_publisher );
- vlc_mutex_unlock( &p_input->p->input.p_item->lock );
var_SetBool( p_sys->p_input, "intf-change", VLC_TRUE );
}
if( psz_provider )
{
if( p_sys->p_pgrm == p_pgrm )
- {
- vlc_mutex_lock( &p_input->p->input.p_item->lock );
input_item_SetPublisher( p_input->p->input.p_item, psz_provider );
- vlc_mutex_unlock( &p_input->p->input.p_item->lock );
- }
input_Control( p_input, INPUT_ADD_INFO, psz_cat, input_MetaTypeToLocalizedString(vlc_meta_Publisher), psz_provider );
}
char ** ppsz_all_keys = vlc_dictionary_all_keys( &p_meta->extra_tags );
if( p_epg->p_current && p_epg->p_current->psz_name && *p_epg->p_current->psz_name )
p_pgrm->psz_now_playing = strdup( p_epg->p_current->psz_name );
- vlc_mutex_lock( &p_input->p->input.p_item->lock );
if( p_pgrm == p_sys->p_pgrm )
input_item_SetNowPlaying( p_input->p->input.p_item, p_pgrm->psz_now_playing );
- vlc_mutex_unlock( &p_input->p->input.p_item->lock );
if( p_pgrm->psz_now_playing )
{
input_Control( p_input, INPUT_DEL_INFO,
_(VLC_META_INFO_CAT),
_(VLC_META_NOW_PLAYING) );
- vlc_mutex_lock( &p_item->lock );
input_item_SetNowPlaying( p_item, NULL );
- vlc_mutex_unlock( &p_item->lock );
/* */
if( p_input->b_preparsing )
static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta )
{
input_item_t *p_item = p_input->p->input.p_item;
- char * psz_saved_arturl = NULL;
- const char * psz_arturl = NULL;
+ char * psz_arturl = NULL;
char *psz_title = NULL;
int i;
+ int i_arturl_event = VLC_FALSE;
if( !p_meta )
return;
+ psz_arturl = input_item_GetArtURL( p_item );
+
vlc_mutex_lock( &p_item->lock );
if( vlc_meta_Get( p_meta, vlc_meta_Title ) && !p_item->b_fixed_name )
psz_title = strdup( vlc_meta_Get( p_meta, vlc_meta_Title ) );
- if( input_item_GetArtURL( p_item ) )
- psz_saved_arturl = strdup( input_item_GetArtURL( p_item ) );
-
vlc_meta_Merge( p_item->p_meta, p_meta );
- if( psz_saved_arturl && *psz_saved_arturl )
- input_item_SetArtURL( p_item, psz_saved_arturl );
+ if( psz_arturl && *psz_arturl )
+ {
+ vlc_meta_Set( p_item->p_meta, vlc_meta_ArtworkURL, psz_arturl );
+ i_arturl_event = VLC_TRUE;
+ }
- free( psz_saved_arturl );
vlc_meta_Delete( p_meta );
- psz_arturl = input_item_GetArtURL( p_item );
if( psz_arturl && !strncmp( psz_arturl, "attachment://", strlen("attachment") ) )
{
/* Don't look for art cover if sout
* XXX It can change when sout has meta data support */
if( p_input->p->p_sout && !p_input->b_preparsing )
- input_item_SetArtURL( p_item, "" );
+ {
+ vlc_meta_Set( p_item->p_meta, vlc_meta_ArtworkURL, "" );
+ i_arturl_event = VLC_TRUE;
+
+ }
else
input_ExtractAttachmentAndCacheArt( p_input );
}
+ free( psz_arturl );
input_item_SetPreparsed( p_item, VLC_TRUE );
}
vlc_mutex_unlock( &p_item->lock );
+ if( i_arturl_event == VLC_TRUE )
+ {
+ vlc_event_t event;
+
+ /* Notify interested third parties */
+ event.type = vlc_InputItemMetaChanged;
+ event.u.input_item_meta_changed.meta_type = vlc_meta_ArtworkURL;
+ vlc_event_send( &p_item->event_manager, &event );
+ }
+
if( psz_title )
{
input_Control( p_input, INPUT_SET_NAME, psz_title );
{
int i_ret = VLC_EGENERIC;
module_t *p_module;
+ char *psz_name, *psz_title, *psz_artist, *psz_album;
if( !p_item->p_meta )
return VLC_EGENERIC;
- if( !p_item->psz_name && !input_item_GetTitle( p_item ) &&
- (!input_item_GetArtist( p_item ) || !input_item_GetAlbum( p_item )) )
+ psz_name = input_item_GetName( p_item );
+ psz_title = input_item_GetTitle( p_item );
+ psz_artist = input_item_GetArtist( p_item );
+ psz_album = input_item_GetAlbum( p_item );
+
+ if( !psz_name && !psz_title && !psz_artist && !psz_album )
return VLC_EGENERIC;
+ free( psz_name );
+ free( psz_title );
/* If we already checked this album in this session, skip */
- if( input_item_GetArtist( p_item ) && input_item_GetAlbum( p_item ) )
+ if( psz_artist && psz_album )
{
FOREACH_ARRAY( playlist_album_t album, p_playlist->p_fetcher->albums )
- if( !strcmp( album.psz_artist, input_item_GetArtist( p_item ) ) &&
- !strcmp( album.psz_album, input_item_GetAlbum( p_item ) ) )
+ if( !strcmp( album.psz_artist, psz_artist ) &&
+ !strcmp( album.psz_album, psz_album ) )
{
msg_Dbg( p_playlist, " %s - %s has already been searched",
- input_item_GetArtist( p_item ), input_item_GetAlbum( p_item ) );
+ psz_artist, psz_album );
/* TODO-fenrir if we cache art filename too, we can go faster */
+ free( psz_artist );
+ free( psz_album );
if( album.b_found )
{
/* Actually get URL from cache */
}
FOREACH_END();
}
+ free( psz_artist );
+ free( psz_album );
+ char *psz_arturl = input_item_GetArtURL( p_item );
input_FindArtInCache( p_playlist, p_item );
- if( !EMPTY_STR(input_item_GetArtURL( p_item )) )
+ if( !EMPTY_STR( psz_arturl ) )
+ {
+ free( psz_arturl );
return 0;
+ }
+ free( psz_arturl );
PL_LOCK;
p_playlist->p_private = p_item;
- if( input_item_GetAlbum( p_item ) && input_item_GetArtist( p_item ) )
+ psz_album = input_item_GetAlbum( p_item );
+ psz_artist = input_item_GetArtist( p_item );
+ psz_name = input_item_GetName( p_item );
+ psz_title = input_item_GetTitle( p_item );
+ if( psz_album && psz_artist )
{
msg_Dbg( p_playlist, "searching art for %s - %s",
- input_item_GetArtist( p_item ), input_item_GetAlbum( p_item ) );
+ psz_artist, psz_album );
}
else
{
msg_Dbg( p_playlist, "searching art for %s",
- input_item_GetTitle( p_item ) ? input_item_GetTitle( p_item ) : p_item->psz_name );
+ psz_title ? psz_title : psz_name );
}
+ free( psz_title );
+ free( psz_name );
p_module = module_Need( p_playlist, "art finder", 0, VLC_FALSE );
msg_Dbg( p_playlist, "unable to find art" );
/* Record this album */
- if( input_item_GetArtist( p_item ) && input_item_GetAlbum( p_item ) )
+ if( psz_artist && psz_album )
{
playlist_album_t a;
- a.psz_artist = strdup( input_item_GetArtist( p_item ) );
- a.psz_album = strdup( input_item_GetAlbum( p_item ) );
+ a.psz_artist = psz_artist;
+ a.psz_album = psz_album;
a.b_found = (i_ret == VLC_EGENERIC ? VLC_FALSE : VLC_TRUE );
ARRAY_APPEND( p_playlist->p_fetcher->albums, a );
}
+ else
+ {
+ free( psz_artist );
+ free( psz_album );
+ }
if( p_module )
module_Unneed( p_playlist, p_module );
static int __input_FindArtInCache( vlc_object_t *p_obj, input_item_t *p_item )
{
- const char *psz_artist;
- const char *psz_album;
- const char *psz_title;
+ char *psz_artist;
+ char *psz_album;
+ char *psz_title;
char psz_filename[MAX_PATH+1];
int i;
struct stat a;
psz_artist = input_item_GetArtist( p_item );
psz_album = input_item_GetAlbum( p_item );
psz_title = input_item_GetTitle( p_item );
- if( !psz_title ) psz_title = p_item->psz_name;
+ if( !psz_title ) psz_title = input_item_GetName( p_item );
- if( (!psz_artist || !psz_album) && !psz_title ) return VLC_EGENERIC;
+ if( !psz_title && ( !psz_album || !psz_artist ) )
+ {
+ free( psz_artist );
+ free( psz_album );
+ free( psz_title );
+ return VLC_EGENERIC;
+ }
+ free( psz_title );
for( i = 0; i < 5; i++ )
{
if( utf8_stat( psz_filename+7, &a ) == 0 )
{
input_item_SetArtURL( p_item, psz_filename );
+ free( psz_artist );
+ free( psz_album );
return VLC_SUCCESS;
}
}
+ free( psz_artist );
+ free( psz_album );
return VLC_EGENERIC;
}
char *psz_artist = NULL;
char *psz_album = NULL;
char *psz_title = NULL;
+ char *psz_artist_m, *psz_album_m, *psz_title_m, *psz_name_m, *psz_arturl_m;
char *psz_type;
- if( input_item_GetArtist( p_item ) )
- psz_artist = ArtCacheCreateString( input_item_GetArtist( p_item ) );
- if( input_item_GetAlbum( p_item ) )
- psz_album = ArtCacheCreateString( input_item_GetAlbum( p_item ) );
- if( input_item_GetTitle( p_item ) )
- psz_title = ArtCacheCreateString( input_item_GetTitle( p_item ) );
- else if( p_item->psz_name )
- psz_title = ArtCacheCreateString( p_item->psz_name );
+
+ psz_artist_m = input_item_GetArtist( p_item );
+ psz_album_m = input_item_GetAlbum( p_item );
+ psz_title_m = input_item_GetTitle( p_item );
+ psz_name_m = input_item_GetName( p_item );
+
+ if( psz_artist_m ) psz_artist = ArtCacheCreateString( psz_artist_m );
+ if( psz_album_m ) psz_album = ArtCacheCreateString( psz_album_m );
+ if( psz_title_m ) psz_title = ArtCacheCreateString( psz_title_m );
+ else if( psz_name_m ) psz_title = ArtCacheCreateString( psz_name_m );
+
+ free( psz_artist_m );
+ free( psz_album_m );
+ free( psz_title_m );
+ free( psz_name_m );
if( !psz_title && (!psz_artist || !psz_album) )
{
return VLC_EGENERIC;
}
- assert( !EMPTY_STR(input_item_GetArtURL( p_item )) );
+ psz_arturl_m = input_item_GetArtURL( p_item );
+ assert( !EMPTY_STR( psz_arturl_m ) );
- psz_type = strrchr( input_item_GetArtURL( p_item ), '.' );
+ psz_type = strrchr( psz_arturl_m, '.' );
/* */
ArtCacheCreateName( p_playlist, psz_filename, psz_title /* Used only if needed*/,
free( psz_album );
free( psz_title );
- if( !strncmp( input_item_GetArtURL( p_item ) , "APIC", 4 ) )
+ if( !strncmp( psz_arturl_m , "APIC", 4 ) )
{
msg_Warn( p_playlist, "APIC fetch not supported yet" );
+ free( psz_arturl_m );
return VLC_EGENERIC;
}
- p_stream = stream_UrlNew( p_playlist, input_item_GetArtURL( p_item ) );
+ p_stream = stream_UrlNew( p_playlist, psz_arturl_m );
if( p_stream )
{
uint8_t p_buffer[65536];
input_item_SetArtURL( p_item, psz_filename );
i_status = VLC_SUCCESS;
}
+ free( psz_arturl_m );
return i_status;
}
char *psz_album = NULL;
char *psz_title = NULL;
char *psz_type = NULL;
+ char *psz_artist_m, *psz_album_m, *psz_title_m, *psz_name_m;
char psz_filename[MAX_PATH+1];
FILE *f;
input_attachment_t *p_attachment;
/* TODO-fenrir merge input_ArtFind with download and make it set the flags FETCH
* and then set it here to to be faster */
- psz_arturl = strdup( input_item_GetArtURL( p_item ) );
+ psz_arturl = input_item_GetArtURL( p_item );
if( !psz_arturl || strncmp( psz_arturl, "attachment://", strlen("attachment://") ) )
{
+ free( psz_arturl );
msg_Err( p_input, "internal input error with input_ExtractAttachmentAndCacheArt" );
return;
}
goto end;
}
- if( input_item_GetArtist( p_item ) )
- psz_artist = ArtCacheCreateString( input_item_GetArtist( p_item ) );
- if( input_item_GetAlbum( p_item ) )
- psz_album = ArtCacheCreateString( input_item_GetAlbum( p_item ) );
- if( input_item_GetTitle( p_item ) )
- psz_title = ArtCacheCreateString( input_item_GetTitle( p_item ) );
- else if( p_item->psz_name )
- psz_title = ArtCacheCreateString( p_item->psz_name );
+ psz_artist_m = input_item_GetArtist( p_item );
+ psz_album_m = input_item_GetAlbum( p_item );
+ psz_title_m = input_item_GetTitle( p_item );
+ psz_name_m = input_item_GetName( p_item );
+
+ if( psz_artist_m ) psz_artist = ArtCacheCreateString( psz_artist_m );
+ if( psz_album_m ) psz_album = ArtCacheCreateString( psz_album_m );
+ if( psz_title_m ) psz_title = ArtCacheCreateString( psz_title_m );
+ else if( psz_name_m ) psz_title = ArtCacheCreateString( psz_name_m );
+
+ free( psz_artist_m );
+ free( psz_album_m );
+ free( psz_title_m );
+ free( psz_name_m );
if( (!psz_artist || !psz_album ) && !psz_title )
goto end;
{
vlc_bool_t b_has_art;
- vlc_mutex_lock( &p_input->lock );
- /* p_input->p_meta should not be null after a successfull CreateThread */
- b_has_art = !EMPTY_STR( input_item_GetArtURL( p_input ) );
- vlc_mutex_unlock( &p_input->lock );
+ char *psz_arturl, *psz_name;
+ psz_arturl = input_item_GetArtURL( p_input );
+ psz_name = input_item_GetName( p_input );
+
+ /* p_input->p_meta should not be null after a successfull CreateThread*/
+ b_has_art = !EMPTY_STR( psz_arturl );
if( !b_has_art )
{
- PL_DEBUG( "requesting art for %s", p_input->psz_name );
+ PL_DEBUG( "requesting art for %s", psz_name );
playlist_AskForArtEnqueue( p_playlist, p_input );
}
+ free( psz_arturl );
+ free( psz_name );
}
val.i_int = p_input->i_id;
* This only checks for meta, not for art
* \todo don't do this for things we won't get meta for, like vids
*/
+ char *psz_arturl = input_item_GetArtURL( p_current );
+ char *psz_name = input_item_GetName( p_current );
if( !input_MetaSatisfied( p_playlist, p_current, &i_m, &i_o ) )
{
preparse_item_t p;
}
/* We already have all needed meta, but we need art right now */
else if( p_playlist->p_fetcher->i_art_policy == ALBUM_ART_ALL &&
- EMPTY_STR( input_item_GetArtURL( p_current ) ) )
+ EMPTY_STR( psz_arturl ) )
{
preparse_item_t p;
- PL_DEBUG("meta ok for %s, need to fetch art",
- p_current->psz_name );
+ PL_DEBUG("meta ok for %s, need to fetch art", psz_name );
p.p_item = p_current;
p.b_fetch_art = VLC_TRUE;
vlc_mutex_lock( &p_playlist->p_fetcher->object_lock );
else
{
PL_DEBUG( "no fetch required for %s (art currently %s)",
- p_current->psz_name,
- input_item_GetArtURL( p_current ));
+ psz_name, psz_arturl );
vlc_gc_decref( p_current );
}
+ free( psz_name );
+ free( psz_arturl );
PL_UNLOCK;
}
else
vlc_cond_signal( &p_playlist->object_wait );
}
/* Preparse if PREPARSE or SPREPARSE & not enough meta */
+ char *psz_artist = input_item_GetArtist( p_item_cat->p_input );
+ char *psz_album = input_item_GetAlbum( p_item_cat->p_input );
if( p_playlist->b_auto_preparse &&
(i_mode & PLAYLIST_PREPARSE ||
( i_mode & PLAYLIST_SPREPARSE &&
- ( EMPTY_STR( input_item_GetArtist( p_item_cat->p_input ) ) ||
- ( EMPTY_STR( input_item_GetAlbum( p_item_cat->p_input ) ) ) )
+ ( EMPTY_STR( psz_artist ) || ( EMPTY_STR( psz_album ) ) )
) ) )
playlist_PreparseEnqueue( p_playlist, p_item_cat->p_input );
/* If we already have it, signal it */
- else if( !EMPTY_STR( input_item_GetArtist( p_item_cat->p_input ) ) &&
- !EMPTY_STR( input_item_GetAlbum( p_item_cat->p_input ) ) )
+ else if( !EMPTY_STR( psz_artist ) && !EMPTY_STR( psz_album ) )
input_item_SetPreparsed( p_item_cat->p_input, VLC_TRUE );
+ free( psz_artist );
+ free( psz_album );
}
/* Add the playlist item to the requested node and fire a notification */
}
#define INSERT_STRING( check, string ) \
- if( check && string ) \
+ if( check ) \
{ \
- int len = strlen( string ); \
- dst = realloc( dst, \
- i_size = i_size + len + 1 ); \
- strncpy( d, string, len+1 ); \
- d += len; \
- } \
- else \
- { \
- *d = '-'; \
- d++; \
+ psz_meta = string; \
+ if( string ) \
+ { \
+ int len = strlen( psz_meta ); \
+ dst = realloc( dst, \
+ i_size = i_size + len + 1 ); \
+ strncpy( d, psz_meta, len+1 ); \
+ d += len; \
+ free( psz_meta ); \
+ } \
+ else \
+ { \
+ *d = '-'; \
+ d++; \
+ } \
}
char *__str_format_meta( vlc_object_t *p_object, const char *string )
{
{
switch( *s )
{
+ char *psz_meta; /* used by INSERT_STRING */
case 'a':
INSERT_STRING( p_item, input_item_GetArtist(p_item) );
break;
{
i_now = mdate();
i_stop = i_now + (mtime_t)(p_vout->i_title_timeout * 1000);
- if( !EMPTY_STR(input_item_GetNowPlaying(input_GetItem(p_input))) )
+ char *psz_nowplaying =
+ input_item_GetNowPlaying( input_GetItem( p_input ) );
+ char *psz_artist = input_item_GetArtist( input_GetItem( p_input ) );
+ char *psz_name = input_item_GetName( input_GetItem( p_input ) );
+ if( !EMPTY_STR( psz_nowplaying ) )
{
vout_ShowTextAbsolute( p_vout, DEFAULT_CHAN,
- input_item_GetNowPlaying(input_GetItem(p_input)), NULL,
+ psz_nowplaying, NULL,
p_vout->i_title_position,
30 + p_vout->fmt_in.i_width
- p_vout->fmt_in.i_visible_width
20 + p_vout->fmt_in.i_y_offset,
i_now, i_stop );
}
- else if( !EMPTY_STR(input_item_GetArtist(input_GetItem(p_input))) )
+ else if( !EMPTY_STR( psz_artist ) )
{
char *psz_string = NULL;
- psz_string = malloc( strlen(input_GetItem(p_input)->psz_name) ) +
- strlen( input_item_GetArtist(input_GetItem(p_input)) );
+ psz_string = malloc( strlen( psz_name ) + strlen( psz_artist ) );
if( psz_string )
{
- sprintf( psz_string, "%s - %s",
- input_GetItem(p_input)->psz_name,
- input_item_GetArtist(input_GetItem(p_input)) );
+ sprintf( psz_string, "%s - %s", psz_name, psz_artist );
vout_ShowTextAbsolute( p_vout, DEFAULT_CHAN,
psz_string, NULL,
else
{
vout_ShowTextAbsolute( p_vout, DEFAULT_CHAN,
- input_GetItem(p_input)->psz_name, NULL,
+ psz_name, NULL,
p_vout->i_title_position,
30 + p_vout->fmt_in.i_width
- p_vout->fmt_in.i_visible_width
i_now, i_stop );
}
vlc_object_release( p_input );
+ free( psz_artist );
+ free( psz_name );
+ free( psz_nowplaying );
}
}