+ 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);
+ psz_description = psz_name = p_apic->description().toCString(true);
+
+ /* some old iTunes version not only sets incorrectly the mime type
+ * or the description of the image,
+ * but also embeds incorrectly the image.
+ * Recent versions seem to behave correctly */
+ if( !strncmp( psz_mime, "PNG", 3 ) ||
+ !strncmp( psz_name, "\xC2\x89PNG", 5 ) )
+ {
+ msg_Warn( p_demux,
+ "%s: Invalid picture embedded by broken iTunes version, "
+ "you really shouldn't use this crappy software.",
+ (const char *)f.file()->name() );
+ break;
+ }
+
+ 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 );
+ }
+ }