[gtk/wip/smcv/png-endian] png: Correct endianness for big-endian machines




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]