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