+ ID3v2::Tag *p_tag = mpeg->ID3v2Tag();
+ if( !p_tag )
+ return;
+ ID3v2::FrameList list = p_tag->frameListMap()[ "APIC" ];
+ if( list.isEmpty() )
+ return;
+ ID3v2::AttachedPictureFrame *p_apic;
+
+ TAB_INIT( p_demux_meta->i_attachments, p_demux_meta->attachments );
+ for( ID3v2::FrameList::Iterator iter = list.begin();
+ iter != list.end(); iter++ )
+ {
+ p_apic = dynamic_cast<ID3v2::AttachedPictureFrame*>(*iter);
+ input_attachment_t *p_attachment;
+
+ const char *psz_name, *psz_mime, *psz_description;
+ ByteVector p_data_taglib; const char *p_data; int i_data;
+
+ psz_mime = p_apic->mimeType().toCString(true);
+
+ /* some old iTunes version not only sets incorrectly the mime type
+ * but also embeds incorrectly the image.
+ * Recent versions seem to behave correctly */
+ if( !strncmp( psz_mime, "PNG", 3 ) )
+ {
+ msg_Warn( p_demux,
+ "%s: Invalid picture embedded by broken iTunes version",
+ f.file()->name() );
+ break;
+ }
+
+ 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 )
+ return;
+ vlc_meta_SetArtURL( p_meta, psz_url );
+ free( psz_url );
+ }
+ }
+ }
+ else
+ if( Ogg::Vorbis::File *oggv = dynamic_cast<Ogg::Vorbis::File *>(f.file() ) )
+ {
+ Ogg::XiphComment *p_tag = oggv->tag();
+ if( !p_tag )
+ return;
+
+ StringList mime_list = p_tag->fieldListMap()[ "COVERARTMIME" ];
+ StringList art_list = p_tag->fieldListMap()[ "COVERART" ];
+
+ /* we support only one cover in ogg/vorbis */
+ if( mime_list.size() != 1 || art_list.size() != 1 )
+ return;
+
+ input_attachment_t *p_attachment;
+
+ const char *psz_name, *psz_mime, *psz_description;
+ uint8_t *p_data;
+ int i_data;
+
+ psz_name = "cover";
+ psz_mime = mime_list[0].toCString(true);
+ psz_description = "cover";
+
+ i_data = vlc_b64_decode_binary( &p_data, art_list[0].toCString(true) );
+
+ msg_Dbg( p_demux, "Found embedded art: %s (%s) is %i bytes",
+ psz_name, psz_mime, i_data );
+
+ TAB_INIT( p_demux_meta->i_attachments, p_demux_meta->attachments );
+ p_attachment = vlc_input_attachment_New( psz_name, psz_mime,
+ psz_description, p_data, i_data );
+ free( p_data );
+
+ TAB_APPEND_CAST( (input_attachment_t**),
+ p_demux_meta->i_attachments, p_demux_meta->attachments,
+ p_attachment );
+
+ vlc_meta_SetArtURL( p_meta, "attachment://cover" );