[Xfce4-commits] [xfce/tumbler] 01/01: Fix thumbnail orientation (Bug #15011)
noreply at xfce.org
noreply at xfce.org
Mon Oct 28 17:59:44 CET 2019
This is an automated email from the git hooks/post-receive script.
a n d r e p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository xfce/tumbler.
commit 784a76c669128541416eb1959ad8a7454539669d
Author: Andre Miranda <andreldm at xfce.org>
Date: Mon Oct 28 13:55:52 2019 -0300
Fix thumbnail orientation (Bug #15011)
Use separated structs instead of union to avoid garbled values
when a file (apparently) contains both types of metadata.
---
plugins/jpeg-thumbnailer/jpeg-thumbnailer.c | 70 ++++++++++++++---------------
1 file changed, 34 insertions(+), 36 deletions(-)
diff --git a/plugins/jpeg-thumbnailer/jpeg-thumbnailer.c b/plugins/jpeg-thumbnailer/jpeg-thumbnailer.c
index 0854ed7..712ba2a 100644
--- a/plugins/jpeg-thumbnailer/jpeg-thumbnailer.c
+++ b/plugins/jpeg-thumbnailer/jpeg-thumbnailer.c
@@ -378,23 +378,21 @@ typedef struct
guint data_len;
guint thumb_compression;
- union
+
+ struct /* thumbnail JPEG */
{
- struct /* thumbnail JPEG */
- {
- guint length;
- guint offset;
- guint orientation;
- } thumb_jpeg;
- struct /* thumbnail TIFF */
- {
- guint length;
- guint offset;
- guint interp;
- guint height;
- guint width;
- } thumb_tiff;
- } thumb;
+ guint length;
+ guint offset;
+ guint orientation;
+ } thumb_jpeg;
+ struct /* thumbnail TIFF */
+ {
+ guint length;
+ guint offset;
+ guint interp;
+ guint height;
+ guint width;
+ } thumb_tiff;
gboolean big_endian;
} TvtjExif;
@@ -496,15 +494,15 @@ tvtj_exif_parse_ifd (TvtjExif *exif,
/* and remember it appropriately */
if (tag == 0x0100)
- exif->thumb.thumb_tiff.width = value;
+ exif->thumb_tiff.width = value;
else if (tag == 0x0101)
- exif->thumb.thumb_tiff.height = value;
+ exif->thumb_tiff.height = value;
else if (tag == 0x0106)
- exif->thumb.thumb_tiff.interp = value;
+ exif->thumb_tiff.interp = value;
else if (tag == 0x0111)
- exif->thumb.thumb_tiff.offset = value;
+ exif->thumb_tiff.offset = value;
else
- exif->thumb.thumb_tiff.length = value;
+ exif->thumb_tiff.length = value;
}
else if (tag == 0x0201 || tag == 0x0202)
{
@@ -516,9 +514,9 @@ tvtj_exif_parse_ifd (TvtjExif *exif,
/* and remember it appropriately */
if (G_LIKELY (tag == 0x201))
- exif->thumb.thumb_jpeg.offset = value;
+ exif->thumb_jpeg.offset = value;
else
- exif->thumb.thumb_jpeg.length = value;
+ exif->thumb_jpeg.length = value;
}
}
else if (tag == 0x112)
@@ -529,7 +527,7 @@ tvtj_exif_parse_ifd (TvtjExif *exif,
{
/* determine the orientation value */
value = tvtj_exif_get_ushort (exif, ifd_ptr + 8);
- exif->thumb.thumb_jpeg.orientation = MIN (value, 8);
+ exif->thumb_jpeg.orientation = MIN (value, 8);
}
}
}
@@ -655,34 +653,34 @@ tvtj_exif_extract_thumbnail (const guchar *data,
if (G_LIKELY (exif.thumb_compression == 6)) /* JPEG */
{
/* check if we have a valid thumbnail JPEG */
- if (exif.thumb.thumb_jpeg.offset > 0 && exif.thumb.thumb_jpeg.length > 0
- && exif.thumb.thumb_jpeg.offset + exif.thumb.thumb_jpeg.length <= length)
+ if (exif.thumb_jpeg.offset > 0 && exif.thumb_jpeg.length > 0
+ && exif.thumb_jpeg.offset + exif.thumb_jpeg.length <= length)
{
/* try to load the embedded thumbnail JPEG */
- thumb = tvtj_jpeg_load (data + exif.thumb.thumb_jpeg.offset, exif.thumb.thumb_jpeg.length, size);
+ thumb = tvtj_jpeg_load (data + exif.thumb_jpeg.offset, exif.thumb_jpeg.length, size);
}
}
else if (exif.thumb_compression == 1) /* Uncompressed */
{
/* check if we have a valid thumbnail (current only RGB interpretations) */
- if (G_LIKELY (exif.thumb.thumb_tiff.interp == 2)
- && exif.thumb.thumb_tiff.offset > 0 && exif.thumb.thumb_tiff.length > 0
- && exif.thumb.thumb_tiff.offset + exif.thumb.thumb_tiff.length <= length
- && exif.thumb.thumb_tiff.height * exif.thumb.thumb_tiff.width == exif.thumb.thumb_tiff.length)
+ if (G_LIKELY (exif.thumb_tiff.interp == 2)
+ && exif.thumb_tiff.offset > 0 && exif.thumb_tiff.length > 0
+ && exif.thumb_tiff.offset + exif.thumb_tiff.length <= length
+ && exif.thumb_tiff.height * exif.thumb_tiff.width == exif.thumb_tiff.length)
{
/* plain RGB data, just what we need for a GdkPixbuf */
- thumb = gdk_pixbuf_new_from_data (g_memdup (data + exif.thumb.thumb_tiff.offset, exif.thumb.thumb_tiff.length),
- GDK_COLORSPACE_RGB, FALSE, 8, exif.thumb.thumb_tiff.width,
- exif.thumb.thumb_tiff.height, exif.thumb.thumb_tiff.width,
+ thumb = gdk_pixbuf_new_from_data (g_memdup (data + exif.thumb_tiff.offset, exif.thumb_tiff.length),
+ GDK_COLORSPACE_RGB, FALSE, 8, exif.thumb_tiff.width,
+ exif.thumb_tiff.height, exif.thumb_tiff.width,
(GdkPixbufDestroyNotify) g_free, NULL);
}
}
if (thumb != NULL
- && exif.thumb.thumb_jpeg.orientation > 1)
+ && exif.thumb_jpeg.orientation > 1)
{
/* rotate thumbnail */
- rotated = tvtj_rotate_pixbuf (thumb, exif.thumb.thumb_jpeg.orientation);
+ rotated = tvtj_rotate_pixbuf (thumb, exif.thumb_jpeg.orientation);
g_object_unref (thumb);
thumb = rotated;
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list