X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fplaylist%2Ffetcher.c;h=de85c8bf2cfb86a55fbb6e05119780a1b570309a;hb=3863d8b088c06aa4f536bf334351e558bf5dc01b;hp=d74f75f4d2514344bfb7961b2529ac17de33214b;hpb=6efc8da001c90f46d2b91a09dc57dedd59a5415c;p=vlc diff --git a/src/playlist/fetcher.c b/src/playlist/fetcher.c index d74f75f4d2..de85c8bf2c 100644 --- a/src/playlist/fetcher.c +++ b/src/playlist/fetcher.c @@ -32,12 +32,13 @@ #include #include #include +#include +#include #include "art.h" #include "fetcher.h" #include "playlist_internal.h" - /***************************************************************************** * Structures/definitions *****************************************************************************/ @@ -293,7 +294,7 @@ static int DownloadArt( playlist_fetcher_t *p_fetcher, input_item_t *p_item ) if( i_data >= INT_MAX - i_read ) break; - p_data = realloc( p_data, i_data + i_read ); + p_data = realloc_or_free( p_data, i_data + i_read ); if( !p_data ) break; @@ -324,6 +325,28 @@ error: return VLC_EGENERIC; } +/** + * FetchMeta, run the "meta fetcher". They are going to do network + * connections, and gather information upon the playing media. + * (even artwork). + */ +static void FetchMeta( playlist_fetcher_t *p_fetcher, input_item_t *p_item ) +{ + demux_meta_t *p_demux_meta = vlc_custom_create(p_fetcher->p_playlist, + sizeof(*p_demux_meta), + VLC_OBJECT_GENERIC, "demux meta" ); + if( !p_demux_meta ) + return; + + vlc_object_attach( p_demux_meta, p_fetcher->p_playlist ); + p_demux_meta->p_demux = NULL; + p_demux_meta->p_item = p_item; + + module_t *p_meta_fetcher = module_need( p_demux_meta, "meta fetcher", NULL, false ); + if( p_meta_fetcher ) + module_unneed( p_demux_meta, p_meta_fetcher ); + vlc_object_release( p_demux_meta ); +} static int InputEvent( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ) @@ -411,6 +434,12 @@ static void *Thread( void *p_data ) /* Wait that the input item is preparsed if it is being played */ WaitPreparsed( p_fetcher, p_item ); + /* Triggers "meta fetcher", eventually fetch meta on the network. + * They are identical to "meta reader" expect that may actually + * takes time. That's why they are running here. + * The result of this fetch is not cached. */ + FetchMeta( p_fetcher, p_item ); + /* Find art, and download it if needed */ int i_ret = FindArt( p_fetcher, p_item ); if( i_ret == 1 )