Author: post
Date: 2012-08-25 14:43:59 +0200 (Sat, 25 Aug 2012)
New Revision: 452
Modified:
RawSpeed/TiffEntryBE.cpp
Log:
Swap all elements of rational fields on platforms where endianess isn't the
same as image. Check if data has been swapped when returning a single value.
Modified: RawSpeed/TiffEntryBE.cpp
===================================================================
--- RawSpeed/TiffEntryBE.cpp 2012-08-18 09:58:56 UTC (rev 451)
+++ RawSpeed/TiffEntryBE.cpp 2012-08-25 12:43:59 UTC (rev 452)
@@ -64,12 +64,16 @@
ThrowTPE("TIFF, getInt: Wrong type 0x%x encountered. Expected Int", type);
if (type == TIFF_SHORT)
return getShort();
+ if (mDataSwapped)
+ return *(unsigned int*)&data[0];
return (unsigned int)data[0] << 24 | (unsigned int)data[1] << 16 | (unsigned
int)data[2] << 8 | (unsigned int)data[3];
}
unsigned short TiffEntryBE::getShort() {
if (!(type == TIFF_SHORT || type == TIFF_UNDEFINED))
ThrowTPE("TIFF, getShort: Wrong type 0x%x encountered. Expected Short",
type);
+ if (mDataSwapped)
+ return *(unsigned short*)&data[0];
return (unsigned short)data[0] << 8 | (unsigned short)data[1];
}
@@ -81,7 +85,8 @@
return (unsigned int*)&data[0];
unsigned int* d = (unsigned int*) & data[0];
- for (uint32 i = 0; i < count; i++) {
+ uint32 ncount = count * ((type == TIFF_RATIONAL || type == TIFF_SRATIONAL)
? 2 : 1);
+ for (uint32 i = 0; i < ncount; i++) {
d[i] = (unsigned int)data[i*4+0] << 24 | (unsigned int)data[i*4+1] << 16 |
(unsigned int)data[i*4+2] << 8 | (unsigned int)data[i*4+3];
}
mDataSwapped = true;
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit