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

Reply via email to