[gtk/wip/smcv/png-endian] png: Correct endianness for big-endian machines
- From: Simon McVittie <smcv src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/smcv/png-endian] png: Correct endianness for big-endian machines
- Date: Sat, 8 Jan 2022 17:12:05 +0000 (UTC)
commit 979c124e57278c6f62301c7aa495f103cafa18ce
Author: Simon McVittie <smcv debian org>
Date: Sat Jan 8 16:39:36 2022 +0000
png: Correct endianness for big-endian machines
libpng wants to receive samples in either RGB or RGBA order, whether
each sample is big-endian or not. This resolves test failures in
testsuite/gdk/memorytexture.c (and a lot of reftests) on s390x, and
probably the PowerPC family too.
Modifying the test to show the color in use and write out the PNG bytes
to a file, and running the memorytexture test on s390x, produces a PNG
that loads with the correct color values in GIMP (on an x86_64 machine),
which seems like evidence that this is the correct change and not just
compensating errors.
Resolves: https://gitlab.gnome.org/GNOME/gtk/-/issues/4616
Signed-off-by: Simon McVittie <smcv debian org>
gdk/loaders/gdkpng.c | 16 ----------------
1 file changed, 16 deletions(-)
---
diff --git a/gdk/loaders/gdkpng.c b/gdk/loaders/gdkpng.c
index b998deb144..20711210d0 100644
--- a/gdk/loaders/gdkpng.c
+++ b/gdk/loaders/gdkpng.c
@@ -222,11 +222,7 @@ gdk_load_png (GBytes *bytes,
case PNG_COLOR_TYPE_RGB_ALPHA:
if (depth == 8)
{
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
format = GDK_MEMORY_R8G8B8A8;
-#elif G_BYTE_ORDER == G_BIG_ENDIAN
- format = GDK_MEMORY_A8B8G8R8;
-#endif
}
else
{
@@ -236,11 +232,7 @@ gdk_load_png (GBytes *bytes,
case PNG_COLOR_TYPE_RGB:
if (depth == 8)
{
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
format = GDK_MEMORY_R8G8B8;
-#elif G_BYTE_ORDER == G_BIG_ENDIAN
- format = GDK_MEMORY_B8G8R8;
-#endif
}
else if (depth == 16)
{
@@ -325,22 +317,14 @@ gdk_save_png (GdkTexture *texture)
case GDK_MEMORY_A8R8G8B8:
case GDK_MEMORY_R8G8B8A8:
case GDK_MEMORY_A8B8G8R8:
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
format = GDK_MEMORY_R8G8B8A8;
-#elif G_BYTE_ORDER == G_BIG_ENDIAN
- format = GDK_MEMORY_A8B8G8R8;
-#endif
png_format = PNG_COLOR_TYPE_RGB_ALPHA;
depth = 8;
break;
case GDK_MEMORY_R8G8B8:
case GDK_MEMORY_B8G8R8:
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
format = GDK_MEMORY_R8G8B8;
-#elif G_BYTE_ORDER == G_BIG_ENDIAN
- format = GDK_MEMORY_B8G8R8;
-#endif
png_format = PNG_COLOR_TYPE_RGB;
depth = 8;
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]