diff options
Diffstat (limited to 'community/xmms2/vorbis-albumart.patch')
-rw-r--r-- | community/xmms2/vorbis-albumart.patch | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/community/xmms2/vorbis-albumart.patch b/community/xmms2/vorbis-albumart.patch new file mode 100644 index 000000000..de4305f6f --- /dev/null +++ b/community/xmms2/vorbis-albumart.patch @@ -0,0 +1,200 @@ +From f38882beb1c9b4f3e3c63ac7d65603ad5917cd9d Mon Sep 17 00:00:00 2001 +From: Brad Jorsch <anomie@users.sourceforge.net> +Date: Tue, 09 Mar 2010 15:41:33 +0000 +Subject: OTHER: Add support for METADATA_BLOCK_PICTURE in Vorbis plugin + +Bug-Debian: http://bugs.debian.org/565479 +--- +diff --git a/src/plugins/vorbis_common/common.c b/src/plugins/vorbis_common/common.c +index c1f4ef9..fc4ff1b 100644 +--- a/src/plugins/vorbis_common/common.c ++++ b/src/plugins/vorbis_common/common.c +@@ -243,6 +243,74 @@ get_replaygain (xmms_xform_t *xform, vorbis_comment *vc) + } + } + ++static void ++handle_image_comment (xmms_xform_t *xform, const gchar *value, gsize len) ++{ ++ guint32 typ, mime_len, desc_len, img_len; ++ guchar *pos, *end, *mime_data, *img_data; ++ gchar hash[33]; ++ ++ pos = value; ++ end = value + len; ++ ++ if (pos + 4 > end) { ++ XMMS_DBG ("Malformed picture comment"); ++ return; ++ } ++ typ = GUINT32_FROM_BE (*(guint32 *)pos); ++ if (typ != 0 && typ != 3) { ++ XMMS_DBG ("Picture type %d not handled", typ); ++ return; ++ } ++ pos += 4; ++ ++ if (pos + 4 > end) { ++ XMMS_DBG ("Malformed picture comment"); ++ return; ++ } ++ mime_len = GUINT32_FROM_BE (*(guint32 *)pos); ++ pos += 4; ++ mime_data = pos; ++ pos += mime_len; ++ ++ if (pos + 4 > end) { ++ XMMS_DBG ("Malformed picture comment"); ++ return; ++ } ++ desc_len = GUINT32_FROM_BE (*(guint32 *)pos); ++ pos += 4; ++ pos += desc_len; ++ ++ pos += 4; /* width */ ++ pos += 4; /* height */ ++ pos += 4; /* depth */ ++ pos += 4; /* indexed palette length */ ++ ++ if (pos + 4 > end) { ++ XMMS_DBG ("Malformed picture comment"); ++ return; ++ } ++ img_len = GUINT32_FROM_BE (*(guint32 *)pos); ++ pos += 4; ++ img_data = pos; ++ ++ if (img_data + img_len > end) { ++ XMMS_DBG ("Malformed picture comment"); ++ return; ++ } ++ ++ if (xmms_bindata_plugin_add ((const guchar *)img_data, img_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; ++ mime_data[mime_len] = '\0'; ++ xmms_xform_metadata_set_str (xform, metakey, mime_data); ++ } ++} ++ + /* note that "key" is NOT NUL-terminated here, + * but "value" is. + */ +@@ -253,6 +321,14 @@ handle_comment (xmms_xform_t *xform, + { + gint i; + ++ if (!g_ascii_strncasecmp (key, "METADATA_BLOCK_PICTURE", key_len)) { ++ gsize dlen; ++ gchar *dvalue = g_base64_decode (value, &dlen); ++ handle_image_comment (xform, dvalue, dlen); ++ g_free (dvalue); ++ return; ++ } ++ + for (i = 0; i < G_N_ELEMENTS (properties); i++) { + if (key_len != strlen (properties[i].vname)) + continue; +-- +cgit v0.8.3.4 + + +From d8273630bd92ecea581240ae93c6795cc538d076 Mon Sep 17 00:00:00 2001 +From: Erik Massop <e.massop@hccnet.nl> +Date: Tue, 09 Mar 2010 15:45:03 +0000 +Subject: OTHER: Add Brad Jorsch to AUTHORS, disable Vorbis albumart for glib < 2.12 + +(Name found using e-mail address at http://sourceforge.net/users/anomie ) +--- +diff --git a/AUTHORS b/AUTHORS +index f2ef9af..7331d4b 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -146,6 +146,10 @@ N: Johannes Jordan + E: ypnos@lanrules.de + D: Visualization + ++N: Brad Jorsch ++E: anomie@users.sourceforge.net ++D: Support for front picture from Vorbis. ++ + N: Daniel KamiĆski + E: maniel.rulez@gmail.com + D: mlib remove command in cli, Ruby fixes. +diff --git a/src/plugins/vorbis_common/common.c b/src/plugins/vorbis_common/common.c +index fc4ff1b..ab1dc75 100644 +--- a/src/plugins/vorbis_common/common.c ++++ b/src/plugins/vorbis_common/common.c +@@ -27,6 +27,7 @@ + #include "xmms/xmms_sample.h" + #include "xmms/xmms_log.h" + #include "xmms/xmms_medialib.h" ++#include "xmms/xmms_bindata.h" + + #include <glib.h> + +@@ -244,12 +245,22 @@ get_replaygain (xmms_xform_t *xform, vorbis_comment *vc) + } + + static void +-handle_image_comment (xmms_xform_t *xform, const gchar *value, gsize len) ++handle_image_comment (xmms_xform_t *xform, const gchar *encoded_value) + { ++ gsize len; ++ guchar *value; ++ + guint32 typ, mime_len, desc_len, img_len; + guchar *pos, *end, *mime_data, *img_data; + gchar hash[33]; + ++#if GLIB_CHECK_VERSION(2,12,0) ++ value = g_base64_decode (encoded_value, &len); ++#else ++ /* TODO: Implement/backport base64 decoding */ ++ return; ++#endif ++ + pos = value; + end = value + len; + +@@ -299,7 +310,7 @@ handle_image_comment (xmms_xform_t *xform, const gchar *value, gsize len) + return; + } + +- if (xmms_bindata_plugin_add ((const guchar *)img_data, img_len, hash)) { ++ if (xmms_bindata_plugin_add (img_data, img_len, hash)) { + const gchar *metakey; + + metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_PICTURE_FRONT; +@@ -307,8 +318,10 @@ handle_image_comment (xmms_xform_t *xform, const gchar *value, gsize len) + + metakey = XMMS_MEDIALIB_ENTRY_PROPERTY_PICTURE_FRONT_MIME; + mime_data[mime_len] = '\0'; +- xmms_xform_metadata_set_str (xform, metakey, mime_data); ++ xmms_xform_metadata_set_str (xform, metakey, (gchar *)mime_data); + } ++ ++ g_free (value); + } + + /* note that "key" is NOT NUL-terminated here, +@@ -322,10 +335,7 @@ handle_comment (xmms_xform_t *xform, + gint i; + + if (!g_ascii_strncasecmp (key, "METADATA_BLOCK_PICTURE", key_len)) { +- gsize dlen; +- gchar *dvalue = g_base64_decode (value, &dlen); +- handle_image_comment (xform, dvalue, dlen); +- g_free (dvalue); ++ handle_image_comment (xform, value); + return; + } + +-- +cgit v0.8.3.4 + + |