[tracker] tracker-miner-fs: fix crash receving album art raw data
- From: Martyn James Russell <mr src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker] tracker-miner-fs: fix crash receving album art raw data
- Date: Mon, 27 Jul 2009 18:17:09 +0000 (UTC)
commit fda715b54c209dc7bf6038efe35d7eb49db0ae57
Author: Martyn Russell <martyn imendio com>
Date: Mon Jul 27 18:36:49 2009 +0100
tracker-miner-fs: fix crash receving album art raw data
data/dbus/tracker-extract.xml | 3 +-
src/tracker-extract/tracker-extract.c | 23 +++++++++++-----
src/tracker-extract/tracker-marshal.list | 2 +-
src/tracker-miner-fs/tracker-albumart.c | 43 +++++++++++++++--------------
src/tracker-miner-fs/tracker-marshal.list | 2 +-
5 files changed, 41 insertions(+), 32 deletions(-)
---
diff --git a/data/dbus/tracker-extract.xml b/data/dbus/tracker-extract.xml
index 20dc59b..9100fda 100644
--- a/data/dbus/tracker-extract.xml
+++ b/data/dbus/tracker-extract.xml
@@ -23,8 +23,7 @@
</method>
<signal name="ProcessAlbumArt">
- <arg type="y" name="buffer"/>
- <arg type="i" name="size"/>
+ <arg type="ay" name="buffer"/>
<arg type="s" name="mime"/>
<arg type="s" name="artist"/>
<arg type="s" name="album"/>
diff --git a/src/tracker-extract/tracker-extract.c b/src/tracker-extract/tracker-extract.c
index 826e767..6ca88bc 100644
--- a/src/tracker-extract/tracker-extract.c
+++ b/src/tracker-extract/tracker-extract.c
@@ -40,6 +40,8 @@
#define MAX_EXTRACT_TIME 10
+#define DBUS_TYPE_UCHAR_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR))
+
#define TRACKER_EXTRACT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_EXTRACT, TrackerExtractPrivate))
extern gboolean debug;
@@ -80,11 +82,10 @@ tracker_extract_class_init (TrackerExtractClass *klass)
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- tracker_marshal_VOID__UCHAR_INT_STRING_STRING_STRING_STRING,
+ tracker_marshal_VOID__POINTER_STRING_STRING_STRING_STRING,
G_TYPE_NONE,
- 6,
- G_TYPE_UCHAR,
- G_TYPE_INT,
+ 5,
+ DBUS_TYPE_UCHAR_ARRAY,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
@@ -493,18 +494,26 @@ tracker_extract_process_albumart (TrackerExtract *object,
const gchar *filename)
{
g_return_if_fail (buffer != NULL);
- g_return_if_fail (len > 0);
g_return_if_fail (object != NULL);
g_return_if_fail (mime != NULL);
g_return_if_fail (filename != NULL);
+ GArray *array;
+
+ array = g_array_sized_new (FALSE,
+ FALSE,
+ sizeof (guchar),
+ len);
+ g_array_append_vals (array, buffer, len);
+
g_signal_emit (object,
signals[PROCESS_ALBUM_ART],
0,
- buffer,
- len,
+ array,
mime,
artist,
album,
filename);
+
+ g_array_free (array, TRUE);
}
diff --git a/src/tracker-extract/tracker-marshal.list b/src/tracker-extract/tracker-marshal.list
index 5c71fca..e4d6982 100644
--- a/src/tracker-extract/tracker-marshal.list
+++ b/src/tracker-extract/tracker-marshal.list
@@ -1 +1 @@
-VOID:UCHAR,INT,STRING,STRING,STRING,STRING
+VOID:POINTER,STRING,STRING,STRING,STRING
diff --git a/src/tracker-miner-fs/tracker-albumart.c b/src/tracker-miner-fs/tracker-albumart.c
index 26f2d09..df78b33 100644
--- a/src/tracker-miner-fs/tracker-albumart.c
+++ b/src/tracker-miner-fs/tracker-albumart.c
@@ -51,6 +51,8 @@
#define THUMBNAILER_PATH "/org/freedesktop/thumbnailer/Generic"
#define THUMBNAILER_INTERFACE "org.freedesktop.thumbnailer.Generic"
+#define DBUS_TYPE_UCHAR_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR))
+
typedef struct {
TrackerStorage *hal;
gchar *art_path;
@@ -61,8 +63,7 @@ static void albumart_queue_cb (DBusGProxy *proxy,
DBusGProxyCall *call,
gpointer user_data);
static gboolean albumart_process_cb (DBusGProxy *proxy,
- const unsigned char *buffer,
- size_t len,
+ GArray *buffer,
const gchar *mime,
const gchar *artist,
const gchar *album,
@@ -648,17 +649,20 @@ albumart_set (const unsigned char *buffer,
albumart_get_path (artist, album, "album", NULL, &local_path, NULL);
- g_message ("Saving album art using GdkPixbuf for uri:'%s'",
- local_path);
-
if (g_strcmp0 (mime, "image/jpeg") == 0 ||
g_strcmp0 (mime, "JPG") == 0) {
+ g_debug ("Saving album art using raw data for uri:'%s'",
+ local_path);
+
g_file_set_contents (local_path, buffer, (gssize) len, NULL);
} else {
GdkPixbuf *pixbuf;
GdkPixbufLoader *loader;
GError *error = NULL;
+ g_debug ("Saving album art using GdkPixbufLoader for uri:'%s'",
+ local_path);
+
loader = gdk_pixbuf_loader_new ();
if (!gdk_pixbuf_loader_write (loader, buffer, len, &error)) {
@@ -810,8 +814,8 @@ albumart_copy_to_local (TrackerStorage *hal,
make_directory_with_parents (dirf, NULL, NULL);
g_object_unref (dirf);
- g_message ("Copying album art from:'%s' to:'%s'",
- filename, local_uri);
+ g_debug ("Copying album art from:'%s' to:'%s'",
+ filename, local_uri);
g_file_copy_async (from, local_file, 0, 0,
NULL, NULL, NULL, NULL, NULL);
@@ -824,8 +828,7 @@ albumart_copy_to_local (TrackerStorage *hal,
static gboolean
albumart_process_cb (DBusGProxy *proxy,
- const unsigned char *buffer,
- size_t len,
+ GArray *buffer,
const gchar *mime,
const gchar *artist,
const gchar *album,
@@ -862,9 +865,9 @@ albumart_process_cb (DBusGProxy *proxy,
if (!g_file_test (art_path, G_FILE_TEST_EXISTS)) {
#ifdef HAVE_GDKPIXBUF
/* If we have embedded album art */
- if (buffer && len) {
- processed = albumart_set (buffer,
- len,
+ if (buffer && buffer->len > 0) {
+ processed = albumart_set ((const unsigned char *) buffer->data,
+ (size_t) buffer->len,
mime,
artist,
album,
@@ -921,8 +924,8 @@ albumart_process_cb (DBusGProxy *proxy,
tracker_thumbnailer_queue_add (filename_uri, "image/jpeg");
}
} else {
- g_message ("Albumart already exists for uri:'%s'",
- filename_uri);
+ g_debug ("Albumart already exists for uri:'%s'",
+ filename_uri);
}
if (local_uri && !g_file_test (local_uri, G_FILE_TEST_EXISTS)) {
@@ -974,8 +977,8 @@ albumart_queue_cb (DBusGProxy *proxy,
uri = g_filename_to_uri (info->art_path, NULL, NULL);
- g_message ("Downloaded album art using DBus service for uri:'%s'",
- uri);
+ g_debug ("Downloaded album art using DBus service for uri:'%s'",
+ uri);
tracker_thumbnailer_queue_add (uri, "image/jpeg");
g_free (uri);
@@ -1035,10 +1038,9 @@ tracker_albumart_init (TrackerStorage *storage)
return FALSE;
}
- dbus_g_object_register_marshaller (tracker_marshal_VOID__UCHAR_INT_STRING_STRING_STRING_STRING,
+ dbus_g_object_register_marshaller (tracker_marshal_VOID__POINTER_STRING_STRING_STRING_STRING,
G_TYPE_NONE,
- G_TYPE_UCHAR,
- G_TYPE_INT,
+ DBUS_TYPE_UCHAR_ARRAY,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
@@ -1047,8 +1049,7 @@ tracker_albumart_init (TrackerStorage *storage)
dbus_g_proxy_add_signal (proxy,
"ProcessAlbumArt",
- G_TYPE_UCHAR,
- G_TYPE_INT,
+ DBUS_TYPE_UCHAR_ARRAY,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
diff --git a/src/tracker-miner-fs/tracker-marshal.list b/src/tracker-miner-fs/tracker-marshal.list
index f7994f7..5bba08b 100644
--- a/src/tracker-miner-fs/tracker-marshal.list
+++ b/src/tracker-miner-fs/tracker-marshal.list
@@ -5,4 +5,4 @@ VOID:STRING,OBJECT,OBJECT,BOOLEAN,BOOLEAN
VOID:STRING,BOOL
VOID:STRING,OBJECT
VOID:STRING,UINT,UINT,UINT,UINT
-VOID:UCHAR,INT,STRING,STRING,STRING,STRING
+VOID:POINTER,STRING,STRING,STRING,STRING
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]