PKGBUILDs/community/xmms2/vorbis-albumart.patch
2013-04-25 18:46:55 +00:00

200 lines
5.2 KiB
Diff

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