+ p_tag = mpeg->ID3v2Tag();
+ if( !p_tag )
+ return;
+ TagLib::ID3v2::FrameList list = p_tag->frameListMap()[ "APIC" ];
+ if( list.isEmpty() )
+ return;
+ input_thread_t *p_input = (input_thread_t *)
+ vlc_object_find( p_demux,VLC_OBJECT_INPUT, FIND_PARENT );
+ if( !p_input )
+ return;
+ input_item_t *p_item = input_GetItem( p_input );
+ TagLib::ID3v2::AttachedPictureFrame *p_apic;
+
+ TAB_INIT( p_demux_meta->i_attachments, p_demux_meta->attachments );
+ for( TagLib::ID3v2::FrameList::Iterator iter = list.begin();
+ iter != list.end(); iter++ )
+ {
+ p_apic = dynamic_cast<TagLib::ID3v2::AttachedPictureFrame*>(*iter);
+ input_attachment_t *p_attachment;
+
+ const char *psz_name, *psz_mime, *psz_description;
+ TagLib::ByteVector p_data_taglib; const char *p_data; int i_data;
+
+ psz_mime = p_apic->mimeType().toCString(true);
+ psz_description = p_apic->description().toCString(true);
+ psz_name = psz_description;
+
+ p_data_taglib = p_apic->picture();
+ p_data = p_data_taglib.data();
+ i_data = p_data_taglib.size();
+
+ msg_Dbg( p_demux, "Found embedded art: %s (%s) is %i bytes",
+ psz_name, psz_mime, i_data );
+
+ p_attachment = vlc_input_attachment_New( psz_name, psz_mime,
+ psz_description, p_data, i_data );
+ TAB_APPEND_CAST( (input_attachment_t**),
+ p_demux_meta->i_attachments, p_demux_meta->attachments,
+ p_attachment );
+
+ if( pi_cover_score[p_apic->type()] > i_score )
+ {
+ i_score = pi_cover_score[p_apic->type()];
+ char *psz_url;
+ if( asprintf( &psz_url, "attachment://%s",
+ p_attachment->psz_name ) == -1 )
+ {
+ vlc_object_release( p_input );
+ return;
+ }
+ vlc_meta_SetArtURL( p_meta, psz_url );
+ free( psz_url );
+ }
+ }
+ vlc_object_release( p_input );