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