Author: post
Date: 2009-09-01 21:32:15 +0200 (Tue, 01 Sep 2009)
New Revision: 134

Modified:
   RawSpeed/Rw2Decoder.cpp
   RawSpeed/rawstudio-plugin.c
Log:
Fixed and enabled RW2 support

Modified: RawSpeed/Rw2Decoder.cpp
===================================================================
--- RawSpeed/Rw2Decoder.cpp     2009-09-01 18:51:43 UTC (rev 133)
+++ RawSpeed/Rw2Decoder.cpp     2009-09-01 19:32:15 UTC (rev 134)
@@ -1,7 +1,7 @@
 #include "StdAfx.h"
 #include "Rw2Decoder.h"
 
-/* 
+/*
     RawSpeed - RAW file decoder.
 
     Copyright (C) 2009 Klaus Post
@@ -71,58 +71,57 @@
   return mRaw;
 }
 
-void Rw2Decoder::DecodeRw2()
-{
-  int x, y, i, j, sh=0, pred[2], nonz[2];
-  int w = mRaw->dim.x;
-  int h = mRaw->dim.y;
-
-  pana_bits(0);
-  for (y=0; y < h; y++) {
-    gushort* dest = (gushort*)mRaw->getData(0,y);
-    for (x=0; x < w; x++) {
-      if ((i = x % 14) == 0)
-        pred[0] = pred[1] = nonz[0] = nonz[1] = 0;
-      if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2));
-      if (nonz[i & 1]) {
-        if ((j = pana_bits(8))) {
-          if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4)
-            pred[i & 1] &= ~(-1 << sh);
-          pred[i & 1] += 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];
-      _ASSERTE(dest < 4098);
-    }
-  }
-} 
+void Rw2Decoder::DecodeRw2()
+{
+  int x, y, i, j, sh=0, pred[2], nonz[2];
+  int w = mRaw->dim.x;
+  int h = mRaw->dim.y;
 
-unsigned Rw2Decoder::pana_bits (int nbits)
-{
-  int byte;
-
-  if (!vbits) {
-    if (input->getRemainSize() < 0x4000-load_flags) {
-      memcpy (buf+load_flags, input->getData(), input->getRemainSize());
-      input->skipBytes(input->getRemainSize());
-    } else {
-      memcpy (buf+load_flags, input->getData(), 0x4000-load_flags);
-      input->skipBytes(0x4000-load_flags);
-      if (input->getRemainSize()<load_flags) {
-        memcpy (buf, input->getData(), input->getRemainSize());
-        input->skipBytes(input->getRemainSize());
-      } else {
-        memcpy (buf, input->getData(), load_flags);
-        input->skipBytes(load_flags);
-      }
-    }
-  }
-  vbits = (vbits - nbits) & 0x1ffff;
-  byte = vbits >> 3 ^ 0x3ff0;
-  return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits);
-}
+  for (y=0; y < h; y++) {
+    gushort* dest = (gushort*)mRaw->getData(0,y);
+    for (x=0; x < w; x++) {
+      if ((i = x % 14) == 0)
+        pred[0] = pred[1] = nonz[0] = nonz[1] = 0;
+      if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2));
+      if (nonz[i & 1]) {
+        if ((j = pana_bits(8))) {
+          if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4)
+            pred[i & 1] &= ~(-1 << sh);
+          pred[i & 1] += 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];
+      _ASSERTE(dest[x] < 4098);
+    }
+  }
+}
 
+unsigned Rw2Decoder::pana_bits (int nbits)
+{
+  int byte;
+
+  if (!vbits) {
+    if (input->getRemainSize() < 0x4000-load_flags) {
+      memcpy (buf+load_flags, input->getData(), input->getRemainSize());
+      input->skipBytes(input->getRemainSize());
+    } else {
+      memcpy (buf+load_flags, input->getData(), 0x4000-load_flags);
+      input->skipBytes(0x4000-load_flags);
+      if (input->getRemainSize()<load_flags) {
+        memcpy (buf, input->getData(), input->getRemainSize());
+        input->skipBytes(input->getRemainSize());
+      } else {
+        memcpy (buf, input->getData(), load_flags);
+        input->skipBytes(load_flags);
+      }
+    }
+  }
+  vbits = (vbits - nbits) & 0x1ffff;
+  byte = vbits >> 3 ^ 0x3ff0;
+  return (buf[byte] | buf[byte+1] << 8) >> (vbits & 7) & ~(-1 << nbits);
+}
+
 void Rw2Decoder::checkSupport(CameraMetaData *meta) {
   vector<TiffIFD*> data = mRootIFD->getIFDsWithTag(MODEL);
   if (data.empty())
@@ -135,5 +134,5 @@
 
 void Rw2Decoder::decodeMetaData( CameraMetaData *meta )
 {
-  mRaw->cfa.setCFA(CFA_GREEN, CFA_RED, CFA_BLUE, CFA_GREEN2);
+  mRaw->cfa.setCFA(CFA_BLUE, CFA_GREEN, CFA_GREEN2, CFA_RED);
 }
\ No newline at end of file

Modified: RawSpeed/rawstudio-plugin.c
===================================================================
--- RawSpeed/rawstudio-plugin.c 2009-09-01 18:51:43 UTC (rev 133)
+++ RawSpeed/rawstudio-plugin.c 2009-09-01 19:32:15 UTC (rev 134)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2009 Anders Brander <[email protected]> and 
+ * Copyright (C) 2006-2009 Anders Brander <[email protected]> and
  * Anders Kvist <[email protected]>
  *
  * This program is free software; you can redistribute it and/or
@@ -29,4 +29,5 @@
        rs_filetype_register_loader(".nef", "Nikon NEF", load_rawspeed, 5);
        rs_filetype_register_loader(".orf", "Olympus", load_rawspeed, 5);
        rs_filetype_register_loader(".pef", "Pentax raw", load_rawspeed, 5);
+       rs_filetype_register_loader(".rw2", "Panasonic raw", load_rawspeed, 5);
 }


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

Reply via email to