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

Reply via email to