diff options
author | Simon McVittie <smcv@debian.org> | 2022-01-08 16:39:36 +0000 |
---|---|---|
committer | Simon McVittie <smcv@debian.org> | 2022-01-08 17:09:29 +0000 |
commit | 979c124e57278c6f62301c7aa495f103cafa18ce (patch) | |
tree | f559619253b77fefd9590eb575294790812df48f | |
parent | bed67edd2ebd5daefd0a1f68ea64ef603cbdeb8b (diff) | |
download | gtk+-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.c | 16 |
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; |