vlc | branch: master | Timothy B. Terriberry <[email protected]> | Wed Apr 24 21:50:42 2013 -0700| [e4673369e8356c84ca99b66fb222dee07c8e4962] | committer: Jean-Baptiste Kempf
Update attachments when updating metadata. This makes album art work for formats like Vorbis and Opus which do not have metadata available immediately after Open(). Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e4673369e8356c84ca99b66fb222dee07c8e4962 --- src/input/input.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/input/input.c b/src/input/input.c index be1959a..5c73331 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -2836,16 +2836,6 @@ static void InputMetaUser( input_thread_t *p_input, vlc_meta_t *p_meta ) } } -/***************************************************************************** - * InputUpdateMeta: merge p_item meta data with p_meta taking care of - * arturl and locking issue. - *****************************************************************************/ -static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta ) -{ - es_out_ControlSetMeta( p_input->p->p_es_out, p_meta ); - vlc_meta_Delete( p_meta ); -} - static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_attachment, int i_new, input_attachment_t **pp_new ) { @@ -2863,6 +2853,36 @@ static void AppendAttachment( int *pi_attachment, input_attachment_t ***ppp_atta *pi_attachment = i_attachment; *ppp_attachment = attachment; } + +/***************************************************************************** + * InputUpdateMeta: merge p_item meta data with p_meta taking care of + * arturl and locking issue. + *****************************************************************************/ +static void InputUpdateMeta( input_thread_t *p_input, vlc_meta_t *p_meta ) +{ + /* If metadata changed, then the attachments might have changed. + We need to update them in case they contain album art. */ + input_source_t *in = &p_input->p->input; + int i_attachment; + input_attachment_t **attachment; + if( !demux_Control( in->p_demux, DEMUX_GET_ATTACHMENTS, + &attachment, &i_attachment ) ) + { + vlc_mutex_lock( &p_input->p->p_item->lock ); + if( p_input->p->i_attachment > 0 ) + { + for( int i = 0; i < p_input->p->i_attachment; i++ ) + vlc_input_attachment_Delete( p_input->p->attachment[i] ); + TAB_CLEAN( p_input->p->i_attachment, p_input->p->attachment ); + } + AppendAttachment( &p_input->p->i_attachment, &p_input->p->attachment, + i_attachment, attachment ); + vlc_mutex_unlock( &p_input->p->p_item->lock ); + } + es_out_ControlSetMeta( p_input->p->p_es_out, p_meta ); + vlc_meta_Delete( p_meta ); +} + /***************************************************************************** * InputGetExtraFiles * Autodetect extra input list _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
