+ playlist_private_t *p_sys = pl_priv(p_playlist);
+ input_item_t *p_input = p_item->p_input;
+
+ PL_ASSERT_LOCKED;
+
+ msg_Dbg( p_playlist, "creating new input thread" );
+
+ p_input->i_nb_played++;
+ set_current_status_item( p_playlist, p_item );
+
+ p_sys->status.i_status = PLAYLIST_RUNNING;
+
+ UpdateActivity( p_playlist, DEFAULT_INPUT_ACTIVITY );
+
+ assert( p_sys->p_input == NULL );
+
+ input_thread_t *p_input_thread =
+ input_CreateThreadExtended( p_playlist, p_input, NULL, p_sys->p_input_ressource );
+
+ if( p_input_thread )
+ {
+ p_sys->p_input = p_input_thread;
+
+ var_AddCallback( p_input_thread, "intf-event", InputEvent, p_playlist );
+ }
+
+ p_sys->p_input_ressource = NULL;
+
+ char *psz_uri = input_item_GetURI( p_item->p_input );
+ if( psz_uri && ( !strncmp( psz_uri, "directory:", 10 ) ||
+ !strncmp( psz_uri, "vlc:", 4 ) ) )
+ {
+ free( psz_uri );
+ return VLC_SUCCESS;
+ }
+ free( psz_uri );
+
+ /* TODO store art policy in playlist private data */
+ if( var_GetInteger( p_playlist, "album-art" ) == ALBUM_ART_WHEN_PLAYED )
+ {
+ bool b_has_art;
+
+ 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 || strncmp( psz_arturl, "attachment://", 13 ) )
+ {
+ PL_DEBUG( "requesting art for %s", psz_name );
+ playlist_AskForArtEnqueue( p_playlist, p_input, pl_Locked );
+ }
+ free( psz_arturl );
+ free( psz_name );
+ }