summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@debian.org>2022-01-08 16:39:36 +0000
committerSimon McVittie <smcv@debian.org>2022-01-08 17:09:29 +0000
commit979c124e57278c6f62301c7aa495f103cafa18ce (patch)
treef559619253b77fefd9590eb575294790812df48f
parentbed67edd2ebd5daefd0a1f68ea64ef603cbdeb8b (diff)
downloadgtk+-979c124e57278c6f62301c7aa495f103cafa18ce.tar.gz
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>
-rw-r--r--gdk/loaders/gdkpng.c16
1 files changed, 0 insertions, 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;