diff options
Diffstat (limited to 'media-gfx/gthumb/files/gthumb-2.11.5-exif-rotation.patch')
-rw-r--r-- | media-gfx/gthumb/files/gthumb-2.11.5-exif-rotation.patch | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/media-gfx/gthumb/files/gthumb-2.11.5-exif-rotation.patch b/media-gfx/gthumb/files/gthumb-2.11.5-exif-rotation.patch new file mode 100644 index 000000000000..aa49ab47282b --- /dev/null +++ b/media-gfx/gthumb/files/gthumb-2.11.5-exif-rotation.patch @@ -0,0 +1,143 @@ +From c200cbf310109cba991bafa38d521c7a1af31360 Mon Sep 17 00:00:00 2001 +From: Paolo Bacchilega <paobac@src.gnome.org> +Date: Fri, 16 Jul 2010 13:52:54 +0000 +Subject: preserve the exif data after a lossless rotation + +read the exif data from the input buffer to make sure that they are +read correctly, instead of reading them from the output buffer after +the transformation. +--- +diff --git a/extensions/exiv2_tools/main.c b/extensions/exiv2_tools/main.c +index a8dcf74..87dd411 100644 +--- a/extensions/exiv2_tools/main.c ++++ b/extensions/exiv2_tools/main.c +@@ -24,6 +24,7 @@ + #include <config.h> + #include <gtk/gtk.h> + #include <gthumb.h> ++#include <extensions/jpeg_utils/jpegtran.h> + #include "gth-edit-exiv2-page.h" + #include "gth-metadata-provider-exiv2.h" + #include "exiv2-utils.h" +@@ -167,21 +168,19 @@ update_exif_dimensions (GFileInfo *info, + + + static void +-exiv2_jpeg_tran_cb (void **out_buffer, +- gsize *out_buffer_size, +- GthTransform *transform) ++exiv2_jpeg_tran_cb (JpegTranInfo *tran_info) + { + GFileInfo *info; + + info = g_file_info_new (); +- if (exiv2_read_metadata_from_buffer (*out_buffer, *out_buffer_size, info, NULL)) { ++ if (exiv2_read_metadata_from_buffer (tran_info->in_buffer, tran_info->in_buffer_size, info, NULL)) { + GthMetadata *metadata; + +- update_exif_dimensions (info, *transform); ++ update_exif_dimensions (info, tran_info->transformation); + + metadata = g_object_new (GTH_TYPE_METADATA, "raw", "1", NULL); + g_file_info_set_attribute_object (info, "Exif::Image::Orientation", G_OBJECT (metadata)); +- exiv2_write_metadata_to_buffer (out_buffer, out_buffer_size, info, NULL, NULL); ++ exiv2_write_metadata_to_buffer (tran_info->out_buffer, tran_info->out_buffer_size, info, NULL, NULL); + + g_object_unref (metadata); + } +diff --git a/extensions/image_rotation/main.c b/extensions/image_rotation/main.c +index 321ce7e..6a1195c 100644 +--- a/extensions/image_rotation/main.c ++++ b/extensions/image_rotation/main.c +@@ -33,11 +33,10 @@ gthumb_extension_activate (void) + /** + * Called after successfully rotating a jpeg image + * +- * @out_buffer (void **): pointer to file data +- * @out_buffer_size (gsize *): pointer to file data size +- * @tranform (GthTransform *): the transformation applied to the file ++ * @info (JpegTranInfo *): the transformation info as described in ++ * extensions/jpeg_utils/jpegtran.h + **/ +- gth_hook_register ("jpegtran-after", 3); ++ gth_hook_register ("jpegtran-after", 1); + + gth_hook_add_callback ("gth-browser-construct", 10, G_CALLBACK (ir__gth_browser_construct_cb), NULL); + gth_hook_add_callback ("gth-browser-update-sensitivity", 10, G_CALLBACK (ir__gth_browser_update_sensitivity_cb), NULL); +diff --git a/extensions/jpeg_utils/jpegtran.c b/extensions/jpeg_utils/jpegtran.c +index 1aa302d..5484983 100644 +--- a/extensions/jpeg_utils/jpegtran.c ++++ b/extensions/jpeg_utils/jpegtran.c +@@ -222,7 +222,6 @@ jpegtran_internal (struct jpeg_decompress_struct *srcinfo, + /* Initialize destination compression parameters from source values */ + jpeg_copy_critical_parameters (srcinfo, dstinfo); + +- + /* Do not output a JFIF marker for EXIF thumbnails. + * This is not the optimal way to detect the difference + * between a thumbnail and a normal image, but it works +@@ -230,13 +229,6 @@ jpegtran_internal (struct jpeg_decompress_struct *srcinfo, + if (option == JCOPYOPT_NONE) + dstinfo->write_JFIF_header = FALSE; + +-#if JPEG_LIB_VERSION < 80 +- /* Adjust the markers to create a standard EXIF file if an EXIF marker +- * is present in the input. By default, libjpeg creates a JFIF file, +- * which is incompatible with the EXIF standard. */ +- jcopy_markers_exif (srcinfo, dstinfo, option); +-#endif +- + /* Adjust destination parameters if required by transform options; + * also find out which set of coefficient arrays will hold the output. + */ +@@ -336,7 +328,14 @@ jpegtran (void *in_buffer, + jpeg_destroy_decompress (&srcinfo); + + if (success) { +- gth_hook_invoke ("jpegtran-after", out_buffer, out_buffer_size, &transformation); ++ JpegTranInfo info; ++ ++ info.in_buffer = in_buffer; ++ info.in_buffer_size = in_buffer_size; ++ info.out_buffer = out_buffer; ++ info.out_buffer_size = out_buffer_size; ++ info.transformation = transformation; ++ gth_hook_invoke ("jpegtran-after", &info); + } + else { + g_free (*out_buffer); +diff --git a/extensions/jpeg_utils/jpegtran.h b/extensions/jpeg_utils/jpegtran.h +index 6c26139..80bafbe 100644 +--- a/extensions/jpeg_utils/jpegtran.h ++++ b/extensions/jpeg_utils/jpegtran.h +@@ -46,6 +46,15 @@ typedef enum { + } JpegMcuAction; + + ++typedef struct { ++ void *in_buffer; ++ gsize in_buffer_size; ++ void **out_buffer; ++ gsize *out_buffer_size; ++ GthTransform transformation; ++} JpegTranInfo; ++ ++ + gboolean jpegtran (void *in_buffer, + gsize in_buffer_size, + void **out_buffer, +diff --git a/extensions/jpeg_utils/transupp.h b/extensions/jpeg_utils/transupp.h +index 104fa2e..5f0f69b 100644 +--- a/extensions/jpeg_utils/transupp.h ++++ b/extensions/jpeg_utils/transupp.h +@@ -20,6 +20,8 @@ + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + */ + ++#include <config.h> ++ + #ifdef HAVE_LIBJPEG + + #include <jpeglib.h> +-- +cgit v0.8.3.1 |