gthumb r2266 - in trunk: . libgthumb libgthumb/jpegutils src
- From: mjc svn gnome org
- To: svn-commits-list gnome org
- Subject: gthumb r2266 - in trunk: . libgthumb libgthumb/jpegutils src
- Date: Thu, 7 Feb 2008 16:13:40 +0000 (GMT)
Author: mjc
Date: Thu Feb 7 16:13:39 2008
New Revision: 2266
URL: http://svn.gnome.org/viewvc/gthumb?rev=2266&view=rev
Log:
2008-02-07 Michael J. Chudobiak <mjc svn gnome org>
* NEWS:
* README:
* configure.in:
* libgthumb/Makefile.am:
* libgthumb/gth-exif-utils.c: (simple_add_metadata), (swap_fields):
* libgthumb/gth-exif-utils.h:
* libgthumb/jpegutils/Makefile.am:
* libgthumb/jpegutils/jpegtran.c: (update_exif_dimensions),
(jpegtran_internal), (jpegtran):
* libgthumb/pixbuf-utils.c: (_gdk_pixbuf_savev):
* src/Makefile.am:
Purged libexif from gthumb!
Use exiv2 to write exif data to files after jpeg transformation.
Modified:
trunk/ChangeLog
trunk/NEWS
trunk/README
trunk/configure.in
trunk/libgthumb/Makefile.am
trunk/libgthumb/gth-exif-utils.c
trunk/libgthumb/gth-exif-utils.h
trunk/libgthumb/jpegutils/Makefile.am
trunk/libgthumb/jpegutils/jpegtran.c
trunk/libgthumb/pixbuf-utils.c
trunk/src/Makefile.am
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Thu Feb 7 16:13:39 2008
@@ -59,6 +59,7 @@
Library changes:
* exiv2 0.15 or higher is now required.
* libiptcdata is no longer used.
+ * libexif is no longer used.
version 2.10.9
Modified: trunk/README
==============================================================================
--- trunk/README (original)
+++ trunk/README Thu Feb 7 16:13:39 2008
@@ -93,7 +93,6 @@
* gnome-vfs version >= 2.6.0
* libglade version >= 2.4.0
* intltool version >= 0.35.0
- * libexif version >= 0.6.13
* exiv2 version >= 0.15
* libjpeg
* gtkunique version >= 0.9.1 (optional)
Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in (original)
+++ trunk/configure.in Thu Feb 7 16:13:39 2008
@@ -30,7 +30,6 @@
LIBGNOMECANVAS_REQUIRED=2.6.0
GNOME_VFS_REQUIRED=2.6.0
LIBGLADE_REQUIRED=2.4.0
-LIBEXIF_REQUIRED=0.6.13
LIBGPHOTO_REQUIRED=2.1.3
BONOBO_REQUIRED=2.6.0
LIBOPENRAW_REQUIRED=0.0.2
@@ -45,7 +44,6 @@
AC_SUBST(LIBGNOMECANVAS_REQUIRED)
AC_SUBST(GNOME_VFS_REQUIRED)
AC_SUBST(LIBGLADE_REQUIRED)
-AC_SUBST(LIBEXIF_REQUIRED)
AC_SUBST(LIBGPHOTO_REQUIRED)
AC_SUBST(BONOBO_REQUIRED)
AC_SUBST(LIBOPENRAW_REQUIRED)
@@ -69,7 +67,6 @@
bonobo-activation-2.0 >= $BONOBO_REQUIRED \
gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED \
gnome-vfs-module-2.0 \
- libexif >= $LIBEXIF_REQUIRED \
exiv2 >= $EXIV2_REQUIRED \
libxml-2.0 >= $LIBXML_REQUIRED \
libglade-2.0 >= $LIBGLADE_REQUIRED)
Modified: trunk/libgthumb/Makefile.am
==============================================================================
--- trunk/libgthumb/Makefile.am (original)
+++ trunk/libgthumb/Makefile.am Thu Feb 7 16:13:39 2008
@@ -10,7 +10,6 @@
gladedir = $(datadir)/gthumb/glade
INCLUDES = \
- $(EXIF_CFLAGS) \
$(GTHUMB_CFLAGS) \
-DGTHUMB_MODULEDIR=\""$(libdir)/gthumb/modules"\" \
-DGTHUMB_GLADEDIR=\""$(gladedir)"\" \
@@ -140,7 +139,6 @@
libgthumb_la_LIBADD = \
$(top_builddir)/libgthumb/jpegutils/libgthumb-jpegutils.la \
- $(EXIF_LIBS) \
$(JPEG_LIBS) \
$(TIFF_LIBS) \
$(GTHUMB_LIBS) \
Modified: trunk/libgthumb/gth-exif-utils.c
==============================================================================
--- trunk/libgthumb/gth-exif-utils.c (original)
+++ trunk/libgthumb/gth-exif-utils.c Thu Feb 7 16:13:39 2008
@@ -355,18 +355,28 @@
metadata items into a single structure, to supply to
update_and_save_metadata. */
- GthMetadata *new_entry;
+ GthMetadata *entry;
- if (value != NULL) {
- new_entry = g_new (GthMetadata, 1);
- new_entry->category = GTH_METADATA_CATEGORY_OTHER;
- new_entry->full_name = g_strdup (key);
- new_entry->display_name = g_strdup (key);
- new_entry->formatted_value = g_strdup (value);
- new_entry->raw_value = g_strdup (value);
- new_entry->position = 0;
- new_entry->writeable = TRUE;
- metadata = g_list_prepend (metadata, new_entry);
+ GList *search_result = g_list_find_custom (metadata, key, (GCompareFunc) metadata_search);
+ if (search_result != NULL) {
+ /* Update value of existing tag */
+ entry = search_result->data;
+ g_free (entry->formatted_value);
+ g_free (entry->raw_value);
+ entry->formatted_value = g_strdup (value);
+ entry->raw_value = g_strdup (value);
+ }
+ else {
+ /* Add a new tag entry */
+ entry = g_new (GthMetadata, 1);
+ entry->category = GTH_METADATA_CATEGORY_OTHER;
+ entry->full_name = g_strdup (key);
+ entry->display_name = g_strdup (key);
+ entry->formatted_value = g_strdup (value);
+ entry->raw_value = g_strdup (value);
+ entry->position = 0;
+ entry->writeable = TRUE;
+ metadata = g_list_prepend (metadata, entry);
}
return metadata;
@@ -545,3 +555,32 @@
return;
}
+
+
+void
+swap_fields (GList *metadata, const char *tag1, const char *tag2)
+{
+ char *tmp;
+ GthMetadata *entry1;
+ GthMetadata *entry2;
+
+ GList *search_result1 = g_list_find_custom (metadata, tag1, (GCompareFunc) metadata_search);
+ if (search_result1 == NULL)
+ return;
+ else
+ entry1 = search_result1->data;
+
+ GList *search_result2 = g_list_find_custom (metadata, tag2, (GCompareFunc) metadata_search);
+ if (search_result2 == NULL)
+ return;
+ else
+ entry2 = search_result2->data;
+
+ tmp = entry1->formatted_value;
+ entry1->formatted_value = entry2->formatted_value;
+ entry2->formatted_value = tmp;
+
+ tmp = entry1->raw_value;
+ entry1->raw_value = entry2->raw_value;
+ entry2->raw_value = tmp;
+}
Modified: trunk/libgthumb/gth-exif-utils.h
==============================================================================
--- trunk/libgthumb/gth-exif-utils.h (original)
+++ trunk/libgthumb/gth-exif-utils.h Thu Feb 7 16:13:39 2008
@@ -107,4 +107,7 @@
GList * gth_read_exiv2 (const char *filename,
GList *metadata);
void update_metadata (FileData *fd);
+void swap_fields (GList *metadata,
+ const char *tag1,
+ const char *tag2);
#endif /* EXIF_UTILS_H */
Modified: trunk/libgthumb/jpegutils/Makefile.am
==============================================================================
--- trunk/libgthumb/jpegutils/Makefile.am (original)
+++ trunk/libgthumb/jpegutils/Makefile.am Thu Feb 7 16:13:39 2008
@@ -7,7 +7,6 @@
INCLUDES = \
-I$(top_srcdir)/libgthumb \
$(DISABLE_DEPRECATED) \
- $(EXIF_CFLAGS) \
$(GTHUMB_CFLAGS)
Modified: trunk/libgthumb/jpegutils/jpegtran.c
==============================================================================
--- trunk/libgthumb/jpegutils/jpegtran.c (original)
+++ trunk/libgthumb/jpegutils/jpegtran.c Thu Feb 7 16:13:39 2008
@@ -51,16 +51,7 @@
#include "transupp.h" /* Support routines for jpegtran */
#include "jpeg-memory-mgr.h"
#include "jpegtran.h"
-
-#include <libexif/exif-data.h>
-
-
-static int
-jpegtran_thumbnail (const void *idata,
- size_t isize,
- void **odata,
- size_t *osize,
- JXFORM_CODE transformation);
+#include "gth-exif-utils.h"
/* error handler data */
@@ -133,41 +124,10 @@
static void
-swap_fields (ExifContent *content,
- ExifTag tag1,
- ExifTag tag2)
-{
- ExifEntry *entry1 = NULL;
- ExifEntry *entry2 = NULL;
- unsigned char *data;
- unsigned int size;
-
- entry1 = exif_content_get_entry (content, tag1);
- if (entry1 == NULL)
- return;
-
- entry2 = exif_content_get_entry (content, tag2);
- if (entry2 == NULL)
- return;
-
- data = entry1->data;
- size = entry1->size;
-
- entry1->data = entry2->data;
- entry1->size = entry2->size;
-
- entry2->data = data;
- entry2->size = size;
-}
-
-
-static void
-update_exif_dimensions (ExifData *edata,
+update_exif_dimensions (GList *metadata,
JXFORM_CODE transform)
{
- unsigned int i;
-
- if (edata == NULL)
+ if (metadata == NULL)
return;
switch (transform) {
@@ -180,111 +140,11 @@
return;
}
- for (i = 0; i < EXIF_IFD_COUNT; i++) {
- ExifContent *content = edata->ifd[i];
-
- if ((content == NULL) || (content->count == 0))
- continue;
-
- swap_fields (content,
- EXIF_TAG_RELATED_IMAGE_WIDTH,
- EXIF_TAG_RELATED_IMAGE_LENGTH);
- swap_fields (content,
- EXIF_TAG_IMAGE_WIDTH,
- EXIF_TAG_IMAGE_LENGTH);
- swap_fields (content,
- EXIF_TAG_PIXEL_X_DIMENSION,
- EXIF_TAG_PIXEL_Y_DIMENSION);
- swap_fields (content,
- EXIF_TAG_X_RESOLUTION,
- EXIF_TAG_Y_RESOLUTION);
- swap_fields (content,
- EXIF_TAG_FOCAL_PLANE_X_RESOLUTION,
- EXIF_TAG_FOCAL_PLANE_Y_RESOLUTION);
- }
-}
-
-
-static void
-update_exif_thumbnail (ExifData *edata,
- JXFORM_CODE transform)
-{
- size_t osize;
- unsigned char *out;
-
- if (edata == NULL || edata->data == NULL)
- return;
-
- if (transform == JXFORM_NONE)
- return;
-
- /* Allocate a new thumbnail buffer (twice the size of the original thumbnail).
- * WARNING: If this buffer is too small (very unlikely, but not impossible),
- * jpegtran will return an error and the thumbnail will be discarded.
- * To prevent this, the size of the buffer should be increased somehow.
- */
- osize = edata->size * 2;
- out = g_malloc (osize);
-
- /* Transform thumbnail */
- if (jpegtran_thumbnail (edata->data, edata->size,
- (void**)&out, &osize, transform) != 0) {
- /* Failed: Discard thumbnail */
- g_free (out);
- g_free (edata->data);
- edata->data = NULL;
- edata->size = 0;
- }
- else {
- /* Success: Replace thumbnail */
- g_free (edata->data);
- edata->data = out;
- edata->size = osize;
- }
-}
-
-
-static void
-update_exif_data (struct jpeg_decompress_struct *src,
- JXFORM_CODE transform)
-{
- jpeg_saved_marker_ptr mark = NULL;
- ExifData *edata = NULL;
- unsigned char *data = NULL;
- unsigned int size;
-
- if (src == NULL)
- return;
-
- /* Find exif data. */
- for (mark = src->marker_list; mark != NULL; mark = mark->next) {
- if (mark->marker != JPEG_APP0 +1)
- continue;
- edata = exif_data_new_from_data (mark->data, mark->data_length);
- break;
- }
- if (edata == NULL)
- return;
-
- /* Adjust exif orientation (set to top-left) */
- set_exif_orientation_to_top_left (edata);
-
- /* Adjust exif dimensions (swap values if necessary) */
- update_exif_dimensions (edata, transform);
-
- /* Adjust thumbnail (transform) */
- update_exif_thumbnail (edata, transform);
-
- /* Build new exif data block */
- exif_data_save_data (edata, &data, &size);
- exif_data_unref (edata);
-
- /* Update jpeg APP1 (EXIF) marker */
- mark->data = src->mem->alloc_large((j_common_ptr)src, JPOOL_IMAGE, size);
- mark->original_length = size;
- mark->data_length = size;
- memcpy (mark->data, data, size);
- free (data);
+ swap_fields (metadata, "Exif.Photo.PixelXDimension", "Exif.Photo.PixelYDimension");
+ swap_fields (metadata, "Exif.Image.XResolution", "Exif.Image.YResolution");
+ swap_fields (metadata, "Exif.Photo.FocalPlaneXResolution", "Exif.Photo.FocalPlaneYResolution");
+ swap_fields (metadata, "Exif.Image.ImageWidth", "Exif.Image.ImageLength");
+ swap_fields (metadata, "Exif.Iop.RelatedImageWidth", "Exif.Iop.RelatedImageLength");
}
@@ -365,9 +225,6 @@
return FALSE;
}
- /* Update exif data */
- update_exif_data (srcinfo, transformation);
-
/* Any space needed by a transform option must be requested before
* jpeg_read_coefficients so that memory allocation will be done right.
*/
@@ -421,79 +278,6 @@
}
-static int
-jpegtran_thumbnail (const void *idata,
- size_t isize,
- void **odata,
- size_t *osize,
- JXFORM_CODE transformation)
-{
- struct jpeg_decompress_struct srcinfo;
- struct jpeg_compress_struct dstinfo;
- struct error_handler_data jsrcerr, jdsterr;
-
- /* Initialize the JPEG decompression object with default error
- * handling. */
- srcinfo.err = jpeg_std_error (&(jsrcerr.pub));
- jsrcerr.pub.error_exit = fatal_error_handler;
- jsrcerr.pub.output_message = output_message_handler;
- jsrcerr.filename = NULL;
- jsrcerr.error = NULL;
-
- jpeg_create_decompress (&srcinfo);
-
- /* Initialize the JPEG compression object with default error
- * handling. */
- dstinfo.err = jpeg_std_error (&(jdsterr.pub));
- jdsterr.pub.error_exit = fatal_error_handler;
- jdsterr.pub.output_message = output_message_handler;
- jdsterr.filename = NULL;
- jdsterr.error = NULL;
-
- jpeg_create_compress (&dstinfo);
-
- dstinfo.err->trace_level = 0;
- dstinfo.arith_code = FALSE;
- dstinfo.optimize_coding = FALSE;
-
- jsrcerr.pub.trace_level = jdsterr.pub.trace_level;
- srcinfo.mem->max_memory_to_use = dstinfo.mem->max_memory_to_use;
-
- /* Decompression error handler */
- if (sigsetjmp (jsrcerr.setjmp_buffer, 1)) {
- jpeg_destroy_compress (&dstinfo);
- jpeg_destroy_decompress (&srcinfo);
- return 1;
- }
-
- /* Compression error handler */
- if (sigsetjmp (jdsterr.setjmp_buffer, 1)) {
- jpeg_destroy_compress (&dstinfo);
- jpeg_destroy_decompress (&srcinfo);
- return 1;
- }
-
- /* Specify data source for decompression */
- jpeg_memory_src (&srcinfo, idata, isize);
-
- /* Specify data destination for compression */
- jpeg_memory_dest (&dstinfo, odata, osize);
-
- /* Apply transformation */
- if (! jpegtran_internal (&srcinfo, &dstinfo, transformation, JCOPYOPT_NONE, JPEG_MCU_ACTION_DONT_TRIM, NULL)) {
- jpeg_destroy_compress (&dstinfo);
- jpeg_destroy_decompress (&srcinfo);
- return 1;
- }
-
- /* Release memory */
- jpeg_destroy_compress (&dstinfo);
- jpeg_destroy_decompress (&srcinfo);
-
- return 0;
-}
-
-
gboolean
jpegtran (const char *input_filename,
const char *output_filename,
@@ -587,37 +371,15 @@
fclose (input_file);
fclose (output_file);
- return TRUE;
-}
-
-
-#ifdef TEST
-
+ /* Update Exif data */
+ FileData *file = file_data_new (output_filename, NULL);
+ file_data_update_all (file, FALSE);
+ update_metadata (file);
+ update_exif_dimensions (file->metadata, transformation);
+ file->metadata = simple_add_metadata (file->metadata, "Exif.Image.Orientation", "1");
+ update_and_save_metadata (output_filename, output_filename, file->metadata);
+ file_data_unref (file);
-int
-main (int argc,
- char **argv)
-{
- char *input_filename;
- char *output_filename;
-
- if (argc != 3) {
- fprintf (stderr, "%s input_image output_image", argv[0]);
- return 1;
- }
-
- input_filename = argv[1];
- output_filename = argv[2];
-
- /*
- JXFORM_ROT_90
- JXFORM_ROT_180
- JXFORM_ROT_270
- JXFORM_FLIP_H
- JXFORM_FLIP_V
- */
-
- return jpegtran (input_filename, output_filename, JXFORM_FLIP_H);
+ return TRUE;
}
-#endif /* TEST */
Modified: trunk/libgthumb/pixbuf-utils.c
==============================================================================
--- trunk/libgthumb/pixbuf-utils.c (original)
+++ trunk/libgthumb/pixbuf-utils.c Thu Feb 7 16:13:39 2008
@@ -1234,10 +1234,8 @@
error);
if (result == TRUE) {
+ metadata = simple_add_metadata (metadata, "Exif.Image.Orientation", "1");
update_and_save_metadata (local_file, local_file, metadata);
-
- /* Saving from pixbuf always implies top-left orientation */
- update_and_save_metadatum (local_file, local_file, "Exif.Image.Orientation", "1");
}
Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Thu Feb 7 16:13:39 2008
@@ -13,7 +13,6 @@
-I$(top_srcdir)/libgthumb \
-I../libgthumb \
$(GTHUMB_CFLAGS) \
- $(EXIF_CFLAGS) \
$(DISABLE_DEPRECATED) \
$(GPHOTO_CFLAGS) \
$(GTKUNIQUE_CFLAGS) \
@@ -155,7 +154,6 @@
gthumb_LDADD = \
$(top_builddir)/libgthumb/jpegutils/libgthumb-jpegutils.la \
$(top_builddir)/libgthumb/libgthumb.la \
- $(EXIF_LIBS) \
$(GTHUMB_LIBS) \
$(JPEG_LIBS) \
$(TIFF_LIBS) \
@@ -181,7 +179,7 @@
libjpegtran_la_SOURCES = dlg-jpegtran.c dlg-jpegtran.h
libjpegtran_la_LDFLAGS = $(MODULE_LIBTOOL_FLAGS)
-libjpegtran_la_LIBADD = $(top_builddir)/libgthumb/jpegutils/libgthumb-jpegutils.la $(top_builddir)/libgthumb/libgthumb.la $(EXIF_LIBS) $(JPEG_LIBS) $(GTHUMB_LIBS)
+libjpegtran_la_LIBADD = $(top_builddir)/libgthumb/jpegutils/libgthumb-jpegutils.la $(top_builddir)/libgthumb/libgthumb.la $(JPEG_LIBS) $(GTHUMB_LIBS)
libjpegtran_la_DEPENDENCIES = gthumb$(EXEEXT)
libpngexporter_la_SOURCES = \
@@ -207,12 +205,12 @@
dlg-web-exporter.c \
dlg-web-exporter.h
libwebexporter_la_LDFLAGS = $(MODULE_LIBTOOL_FLAGS)
-libwebexporter_la_LIBADD = $(top_builddir)/libgthumb/libgthumb.la $(GTHUMB_LIBS) $(EXIF_LIBS)
+libwebexporter_la_LIBADD = $(top_builddir)/libgthumb/libgthumb.la $(GTHUMB_LIBS)
libwebexporter_la_DEPENDENCIES = gthumb$(EXEEXT)
libphotoimporter_la_SOURCES = dlg-photo-importer.c dlg-photo-importer.h
libphotoimporter_la_LDFLAGS = $(MODULE_LIBTOOL_FLAGS)
-libphotoimporter_la_LIBADD = $(top_builddir)/libgthumb/jpegutils/libgthumb-jpegutils.la $(top_builddir)/libgthumb/libgthumb.la $(GTHUMB_LIBS) $(EXIF_LIBS) $(JPEG_LIBS) $(GPHOTO_LIBS)
+libphotoimporter_la_LIBADD = $(top_builddir)/libgthumb/jpegutils/libgthumb-jpegutils.la $(top_builddir)/libgthumb/libgthumb.la $(GTHUMB_LIBS) $(JPEG_LIBS) $(GPHOTO_LIBS)
libphotoimporter_la_DEPENDENCIES = gthumb$(EXEEXT)
EXTRA_DIST = \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]