Hello! I just upgraded to xmms2 for the first time, and it's great! However, I noticed that most of my mp3s edited with iTunes don't display album artwork. I tracked this down to the id3 parser - it support 2.(3,4) APIC tags, but not 2.2 PIC tags. I've attached a patch to add this support to xmms2.
Cheers! - jesse
--- xmms2-0.5DrLecter/src/plugins/id3v2/id3.c 2008-06-15 10:31:38.000000000 -0700 +++ xmms2-0.5DrLecter-patched/src/plugins/id3v2/id3.c 2009-03-04 16:40:13.042672000 -0800 @@ -352,6 +352,49 @@ } static void +handle_id3v2_pic (xmms_xform_t *xform, xmms_id3v2_header_t *head, + const gchar *key, gchar *buf, gsize len) +{ + const gchar *enc, *desc, *data; + gchar mime[4]; + gchar hash[33]; + + // Text encoding. + enc = binary_to_enc (buf[0]); + buf++; + len--; + // Store format. + mime[0] = buf[0]; + mime[1] = buf[1]; + mime[2] = buf[2]; + mime[3] = '\0'; + buf += 3; + + // Only allow front cover or "OTHER" type. + if (buf[0] != 0x00 && buf[0] != 0x03) { + XMMS_DBG ("Picture type %02x not handled", buf[0]); + return; + } + + buf++; + desc = buf; + len--; + + /* XXX desc might be UCS2 and find_nul will not do what we want */ + data = find_nul (desc, &len); + + if (data && xmms_bindata_plugin_add ((const guchar *)data, len, hash)) { + const gchar *metakey; + + metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_PICTURE_FRONT; + xmms_xform_metadata_set_str (xform, metakey, hash); + + metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_PICTURE_FRONT_MIME; + xmms_xform_metadata_set_str (xform, metakey, mime); + } +} + +static void handle_id3v2_apic (xmms_xform_t *xform, xmms_id3v2_header_t *head, const gchar *key, gchar *buf, gsize len) { @@ -457,6 +500,7 @@ { quad2long ('T','P','O','S'), XMMS_MEDIALIB_ENTRY_PROPERTY_PARTOFSET, handle_int_field }, { quad2long ('T','X','X','X'), NULL, handle_id3v2_txxx }, { quad2long ('U','F','I','D'), NULL, handle_id3v2_ufid }, + { quad2long ('P','I','C', 0), NULL, handle_id3v2_pic }, { quad2long ('A','P','I','C'), NULL, handle_id3v2_apic }, { quad2long ('C','O','M','M'), NULL, handle_id3v2_comm }, { quad2long ('T','I','T','1'), XMMS_MEDIALIB_ENTRY_PROPERTY_GROUPING, NULL }, @@ -665,7 +709,7 @@ return FALSE; } - if (buf[0] == 'T' || buf[0] == 'U' || buf[0] == 'C') { + if (buf[0] == 'T' || buf[0] == 'U' || buf[0] == 'C' || buf[0] == 'P') { handle_id3v2_text (xform, head, type, (gchar *)(buf + 6), 0, size); }
-- _______________________________________________ Xmms2-devel mailing list Xmms2-devel@lists.xmms.se http://lists.xmms.se/cgi-bin/mailman/listinfo/xmms2-devel