]> granicus.if.org Git - libjpeg-turbo/commitdiff
Java: Fix TJUnitTest on big endian platforms
authorDRC <information@libjpeg-turbo.org>
Sat, 2 Sep 2017 03:40:46 +0000 (03:40 +0000)
committerDRC <information@libjpeg-turbo.org>
Sat, 2 Sep 2017 03:47:56 +0000 (03:47 +0000)
It is necessary for the C code to be aware of the machine's endianness,
which is why the TurboJPEG Java wrapper sets a different pixel format
for integer BufferedImages depending on ByteOrder.nativeOrder().
However, it isn't necessary to handle endianness in pure Java code such
as TJUnitTest (d'oh!)  This was a product of porting the C version of
TJUnitTest too literally, and of insufficient testing (historically,
the big endian systems I had available for testing didn't have Java.)

ChangeLog.md
java/TJUnitTest.java

index 3d5987f2b997c65519c7146fd1eaf7034fcbd3e9..1f9473f292b3647c33c5dc6802807238cf29ef58 100644 (file)
@@ -7,6 +7,9 @@
 when using the YUVImage constructor that creates an instance backed by separate
 image planes and allocates memory for the image planes.
 
+2. Fixed an issue whereby the Java version of TJUnitTest would fail when
+testing BufferedImage encoding/decoding on big endian systems.
+
 
 1.5.2
 =====
index 444e798530ac1634d8981cdebde989c7c3da1057..cf2c9711a143532bf4c41d3e56b46598522c2b53 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C)2011-2016 D. R. Commander.  All Rights Reserved.
+ * Copyright (C)2011-2017 D. R. Commander.  All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -109,21 +109,12 @@ public class TJUnitTest {
       case BufferedImage.TYPE_BYTE_GRAY:
         return TJ.PF_GRAY;
       case BufferedImage.TYPE_INT_BGR:
-        if (byteOrder == ByteOrder.BIG_ENDIAN)
-          return TJ.PF_XBGR;
-        else
-          return TJ.PF_RGBX;
+        return TJ.PF_RGBX;
       case BufferedImage.TYPE_INT_RGB:
-        if (byteOrder == ByteOrder.BIG_ENDIAN)
-          return TJ.PF_XRGB;
-        else
-          return TJ.PF_BGRX;
+        return TJ.PF_BGRX;
       case BufferedImage.TYPE_INT_ARGB:
       case BufferedImage.TYPE_INT_ARGB_PRE:
-        if (byteOrder == ByteOrder.BIG_ENDIAN)
-          return TJ.PF_ARGB;
-        else
-          return TJ.PF_BGRA;
+        return TJ.PF_BGRA;
     }
     return 0;
   }