Author: post
Date: 2009-09-05 16:40:23 +0200 (Sat, 05 Sep 2009)
New Revision: 143

Modified:
   RawSpeed/Rw2Decoder.cpp
Log:
Unrolled RW2 decode loop, speed up from 55MP/s to 65MP/s. Removed debug mode 
print.

Modified: RawSpeed/Rw2Decoder.cpp
===================================================================
--- RawSpeed/Rw2Decoder.cpp     2009-09-05 12:31:57 UTC (rev 142)
+++ RawSpeed/Rw2Decoder.cpp     2009-09-05 14:40:23 UTC (rev 143)
@@ -82,20 +82,36 @@
     gushort* dest = (gushort*)mRaw->getData(0,y);
     i = 0;
     for (x=0; x < w; x++) {
+      // Even pixels
       if (i == 0)
         pred[0] = pred[1] = nonz[0] = nonz[1] = 0;
       else if (i % 3 == 2) 
         sh = 4 >> (3 - pana_bits(2));
-      if (nonz[i & 1]) {
+      if (nonz[0]) {
         if ((j = pana_bits(8))) {
-          if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4)
-            pred[i & 1] &= ~(-1 << sh);
-          pred[i & 1] += j << sh;
+          if ((pred[0] -= 0x80 << sh) < 0 || sh == 4)
+            pred[0] &= ~(-1 << sh);
+          pred[0] += j << sh;
         }
-      } else if ((nonz[i & 1] = pana_bits(8)) || i > 11)
-        pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4);
-      dest[x] = pred[x&1];
+      } else if ((nonz[0] = pana_bits(8)) || i > 11)
+        pred[0] = nonz[0] << 4 | pana_bits(4);
+      dest[x] = pred[0];
+
+      // Odd pixels
       i++;
+      x++;
+      if (i % 3 == 2)
+        sh = 4 >> (3 - pana_bits(2));
+      if (nonz[1]) {
+        if ((j = pana_bits(8))) {
+          if ((pred[1] -= 0x80 << sh) < 0 || sh == 4)
+            pred[1] &= ~(-1 << sh);
+          pred[1] += j << sh;
+        }
+      } else if ((nonz[1] = pana_bits(8)) || i > 11)
+        pred[1] = nonz[1] << 4 | pana_bits(4);
+      dest[x] = pred[1];
+      i++;
       if (i == 14)
         i = 0;
     }
@@ -149,8 +165,6 @@
   string model = data[0]->getEntry(MODEL)->getString();
   string mode = getMode(model);
 
-  printf("Mode: %s\n",mode.c_str());
-
   setMetaData(meta, make, model, mode);
 }
 


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to