tracker r2947 - in trunk: . src/tracker-extract tests/tracker-extract
- From: mottela svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r2947 - in trunk: . src/tracker-extract tests/tracker-extract
- Date: Thu, 19 Feb 2009 16:14:33 +0000 (UTC)
Author: mottela
Date: Thu Feb 19 16:14:32 2009
New Revision: 2947
URL: http://svn.gnome.org/viewvc/tracker?rev=2947&view=rev
Log:
Error handling changed not to abort for jpegs
Modified:
trunk/ChangeLog
trunk/src/tracker-extract/tracker-extract-jpeg.c
trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c
Modified: trunk/src/tracker-extract/tracker-extract-jpeg.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-jpeg.c (original)
+++ trunk/src/tracker-extract/tracker-extract-jpeg.c Thu Feb 19 16:14:32 2009
@@ -32,6 +32,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <setjmp.h>
#include <glib.h>
#include <glib/gstdio.h>
@@ -107,6 +108,19 @@
{ -1, NULL, NULL }
};
+struct tej_error_mgr
+{
+ struct jpeg_error_mgr jpeg;
+ jmp_buf setjmp_buffer;
+};
+
+static void tracker_extract_jpeg_error_exit (j_common_ptr cinfo)
+{
+ struct tej_error_mgr *h = (struct tej_error_mgr *)cinfo->err;
+ (*cinfo->err->output_message)(cinfo);
+ longjmp(h->setjmp_buffer, 1);
+}
+
static gchar *
date_to_iso8601 (const gchar *date)
{
@@ -252,7 +266,7 @@
size_t size;
struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
+ struct tej_error_mgr tejerr;
struct jpeg_marker_struct *marker;
FILE *jpeg;
gint fd_jpeg;
@@ -277,16 +291,21 @@
gchar *str;
gsize len;
- cinfo.err = jpeg_std_error (&jerr);
- jpeg_create_decompress (&cinfo);
+ cinfo.err = jpeg_std_error (&tejerr.jpeg);
+ tejerr.jpeg.error_exit = tracker_extract_jpeg_error_exit;
+ if (setjmp(tejerr.setjmp_buffer)) {
+ goto fail;
+ }
+ jpeg_create_decompress (&cinfo);
+
jpeg_save_markers (&cinfo, JPEG_COM, 0xFFFF);
jpeg_save_markers (&cinfo, JPEG_APP0 + 1, 0xFFFF);
-
+
jpeg_stdio_src (&cinfo, jpeg);
-
+
jpeg_read_header (&cinfo, TRUE);
-
+
/* FIXME? It is possible that there are markers after SOS,
* but there shouldn't be. Should we decompress the whole file?
*
@@ -294,22 +313,22 @@
* jpeg_finish_decompress(&cinfo);
*
* jpeg_calc_output_dimensions(&cinfo);
- */
-
+ */
+
marker = (struct jpeg_marker_struct *) &cinfo.marker_list;
-
+
while (marker) {
switch (marker->marker) {
case JPEG_COM:
len = marker->data_length;
str = g_strndup ((gchar*) marker->data, len);
-
+
g_hash_table_insert (metadata,
g_strdup ("Image:Comments"),
tracker_escape_metadata (str));
g_free (str);
break;
-
+
case JPEG_APP0+1:
#ifdef HAVE_LIBEXIF
if (strncmp ("Exif", (gchar*) (marker->data), 5) == 0) {
@@ -363,7 +382,7 @@
}
jpeg_destroy_decompress (&cinfo);
-
+ fail:
fclose (jpeg);
} else {
close (fd_jpeg);
Modified: trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c (original)
+++ trunk/tests/tracker-extract/tracker-extract-gstreamer-test.c Thu Feb 19 16:14:32 2009
@@ -42,7 +42,9 @@
g_test_message ("Testing extract functionality");
g_test_add_func ("/tracker-extract/tracker-extract-gstreamer/check-extract-data",
test_tracker_extract_check_extract_data);
-#if 0
+#if 1
+ TrackerExtractData *data;
+
data = tracker_test_extract_get_extract ("audio/mpeg");
g_test_add_data_func ("/tracker-extract/tracker-extract-gstreamer/mp3/id3v1_basic",
@@ -63,7 +65,7 @@
if (g_test_perf()) {
g_test_add_data_func ("/tracker-extract/tracker-extract-gstreamer/mp3/performance_cbr",
- data, performance_tracker_extract_mp3);
+ data, test_tracker_extract_mp3_performance);
}
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]