components/openexr/patches/013-DwaCompressor-endian.patch
author Jingning Ji <jingning.ji@oracle.com>
Tue, 14 Feb 2017 16:51:42 -0800
changeset 7697 8a41b565423d
permissions -rw-r--r--
23119772 Upgrade openexr to 2.2.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7697
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     1
Addresses DwaCompressor endianess issue, which caused a sparc-only test failure.
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     2
Posted upstream here https://github.com/openexr/openexr/issues/222. No response yet.
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     3
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     4
--- IlmImf/ImfDwaCompressor.cpp	2016-12-22 15:20:40.220763763 +0000
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     5
+++ IlmImf/ImfDwaCompressor.cpp	2017-01-10 09:47:16.415207575 +0000
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     6
@@ -824,15 +824,15 @@
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     7
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     8
                 if (!_isNativeXdr)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
     9
                 {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    10
-                    for (int i = 0; i < 64; ++i)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    11
-                    {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    12
-                        tmpShortXdr      = halfZigBlock[comp]._buffer[i];
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    13
+                    //for (int i = 0; i < 64; ++i)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    14
+                    //{
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    15
+                        tmpShortXdr      = halfZigBlock[comp]._buffer[0];
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    16
                         tmpConstCharPtr  = (const char *)&tmpShortXdr;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    17
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    18
                         Xdr::read<CharPtrIO> (tmpConstCharPtr, tmpShortNative);
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    19
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    20
-                        halfZigBlock[comp]._buffer[i] = tmpShortNative;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    21
-                    }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    22
+                        halfZigBlock[comp]._buffer[0] = tmpShortNative;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    23
+                    //}
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    24
                 }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    25
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    26
                 if (lastNonZero == 0)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    27
@@ -1131,6 +1131,20 @@
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    28
         } // comp
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    29
     } // blocky
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    30
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    31
+    if (!_isNativeXdr) {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    32
+        for (unsigned int chan = 0; chan < numComp; ++chan)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    33
+        {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    34
+            for (int y=0; y<_height; ++y)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    35
+            {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    36
+                for (int x=0; x<_width; ++x)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    37
+                {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    38
+                    char c = _rowPtrs[chan][y][2*x];
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    39
+                    _rowPtrs[chan][y][2*x] =_rowPtrs[chan][y][2*x+1];
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    40
+                    _rowPtrs[chan][y][2*x+1] = c;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    41
+                }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    42
+            }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    43
+        }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    44
+    }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    45
     //
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    46
     // Walk over all the channels that are of type FLOAT.
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    47
     // Convert from HALF XDR back to FLOAT XDR.
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    48
@@ -1470,9 +1484,12 @@
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    49
                             vy = _height - (vy - (_height - 1));
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    50
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    51
                         if (vy < 0) vy = _height-1;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    52
-                    
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    53
+                        
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    54
                         tmpShortXdr =
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    55
                             ((const unsigned short *)(_rowPtrs[chan])[vy])[vx];
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    56
+			if (!GLOBAL_SYSTEM_LITTLE_ENDIAN) {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    57
+			    tmpShortXdr = ((tmpShortXdr << 8) & 0xff00) | ((tmpShortXdr >> 8) & 0xff);
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    58
+			}
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    59
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    60
                         if (_toNonlinear)
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    61
                         {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    62
@@ -1546,6 +1563,9 @@
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    63
                 {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    64
                     tmpCharPtr = (char *)&tmpShortXdr;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    65
                     Xdr::write<CharPtrIO>(tmpCharPtr, halfZigCoef[i].bits());
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    66
+		    if (!GLOBAL_SYSTEM_LITTLE_ENDIAN) {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    67
+                        tmpShortXdr = ((tmpShortXdr << 8) & 0xff00) | ((tmpShortXdr >> 8) & 0xff);
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    68
+                    }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    69
                     halfZigCoef[i].setBits(tmpShortXdr);
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    70
                 }
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    71
 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    72
@@ -1553,9 +1573,12 @@
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    73
                 // Save the DC component separately, to be compressed on
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    74
                 // its own.
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    75
                 //
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    76
-
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    77
-                *currDcComp[chan]++ = halfZigCoef[0].bits();
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    78
-                _numDcComp++;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    79
+		if (!GLOBAL_SYSTEM_LITTLE_ENDIAN) {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    80
+                    *currDcComp[chan]++ = (halfZigCoef[0].bits() << 8 & 0xff00) | (halfZigCoef[0].bits() >> 8 & 0xff);
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    81
+                } else {
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    82
+		    *currDcComp[chan]++ = halfZigCoef[0].bits();
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    83
+		}
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    84
+		_numDcComp++;
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    85
                 
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    86
                 //
8a41b565423d 23119772 Upgrade openexr to 2.2.0
Jingning Ji <jingning.ji@oracle.com>
parents:
diff changeset
    87
                 // Then RLE the AC components (which will record the count