author | Jingning Ji <jingning.ji@oracle.com> |
Tue, 14 Feb 2017 16:51:42 -0800 | |
changeset 7697 | 8a41b565423d |
permissions | -rw-r--r-- |
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 |