Author: post
Date: 2011-10-10 19:05:42 +0200 (Mon, 10 Oct 2011)
New Revision: 383

Modified:
   RawSpeed/RawImage.h
   RawSpeed/Rw2Decoder.cpp
   RawSpeed/Rw2Decoder.h
   data/cameras.xml
Log:
Panasonic cameras: Always use aspect ration for mode selection. This enables 
"default" crops to always be overridden. Explicit guesses removed, and added as 
camera defaults instead.

Modified: RawSpeed/RawImage.h
===================================================================
--- RawSpeed/RawImage.h 2011-10-10 15:54:56 UTC (rev 382)
+++ RawSpeed/RawImage.h 2011-10-10 17:05:42 UTC (rev 383)
@@ -60,6 +60,7 @@
   int whitePoint;
   vector<BlackArea> blackAreas;
   iPoint2D subsampling;
+  string mode;
 protected:
   RawImageType dataType;
   RawImageData(void);

Modified: RawSpeed/Rw2Decoder.cpp
===================================================================
--- RawSpeed/Rw2Decoder.cpp     2011-10-10 15:54:56 UTC (rev 382)
+++ RawSpeed/Rw2Decoder.cpp     2011-10-10 17:05:42 UTC (rev 383)
@@ -168,7 +168,7 @@
 
   string make = data[0]->getEntry(MAKE)->getString();
   string model = data[0]->getEntry(MODEL)->getString();
-  if (!this->checkCameraSupported(meta, make, model, getMode(model)))
+  if (!this->checkCameraSupported(meta, make, model, guessMode()))
     this->checkCameraSupported(meta, make, model, "");
 }
 
@@ -181,41 +181,51 @@
 
   string make = data[0]->getEntry(MAKE)->getString();
   string model = data[0]->getEntry(MODEL)->getString();
-  string mode = getMode(model);
-  if (this->checkCameraSupported(meta, make, model, getMode(model)))
+  string mode = guessMode();
+  if (this->checkCameraSupported(meta, make, model, mode)) {
     setMetaData(meta, make, model, mode);
-  else
+  } else {
+    mRaw->mode = mode;
+    _RPT1(0, "Mode not found in DB: %s", mode.c_str());
     setMetaData(meta, make, model, "");
+  }
 }
 
-bool Rw2Decoder::almostEqualRelative(float A, float B, float maxRelativeError) 
{
-  if (A == B)
-    return true;
 
-  float relativeError = fabs((A - B) / B);
-  if (relativeError <= maxRelativeError)
-    return true;
-  return false;
-}
 
-std::string Rw2Decoder::getMode(const string model) {
+std::string Rw2Decoder::guessMode() {
   float ratio = 3.0f / 2.0f;  // Default
-  if (mRaw->isAllocated()) {
-    ratio = (float)mRaw->dim.x / (float)mRaw->dim.y;
+
+  if (!mRaw->isAllocated())
+    return "";
+
+  ratio = (float)mRaw->dim.x / (float)mRaw->dim.y;
+
+  float min_diff = fabs(ratio - 16.0f / 9.0f);
+  std::string closest_match = "16:9";
+
+  float t = fabs(ratio - 3.0f / 2.0f);
+  if (t < min_diff) {
+    closest_match = "3:2";
+    min_diff  = t;
   }
 
-  if (almostEqualRelative(ratio, 16.0f / 9.0f, 0.02f))
-    return "16:9";
-  if (almostEqualRelative(ratio, 3.0f / 2.0f, 0.02f))
-    return "3:2";
-  if (almostEqualRelative(ratio, 4.0f / 3.0f, 0.02f))
-    return "4:3";
-  if (almostEqualRelative(ratio, 1.0f, 0.02f))
-    return "1:1";
+  t = fabs(ratio - 4.0f / 3.0f);
+  if (t < min_diff) {
+    closest_match =  "4:3";
+    min_diff  = t;
+  }
 
-  return "";
+  t = fabs(ratio - 1.0f);
+  if (t < min_diff) {
+    closest_match = "1:1";
+    min_diff  = t;
+  }
+  _RPT1(0, "Mode guess: '%s'\n", closest_match.c_str());
+  return closest_match;
 }
 
+
 PanaBitpump::PanaBitpump(ByteStream* _input) : input(_input), vbits(0) {
 }
 

Modified: RawSpeed/Rw2Decoder.h
===================================================================
--- RawSpeed/Rw2Decoder.h       2011-10-10 15:54:56 UTC (rev 382)
+++ RawSpeed/Rw2Decoder.h       2011-10-10 17:05:42 UTC (rev 383)
@@ -54,9 +54,8 @@
 protected:
   virtual void decodeThreaded(RawDecoderThread* t);
 private:
-  string getMode(const string model);
   void DecodeRw2();
-  bool almostEqualRelative(float A, float B, float maxRelativeError);
+  std::string guessMode();
   ByteStream* input_start;
   uint32 load_flags;
 };

Modified: data/cameras.xml
===================================================================
--- data/cameras.xml    2011-10-10 15:54:56 UTC (rev 382)
+++ data/cameras.xml    2011-10-10 17:05:42 UTC (rev 383)
@@ -1215,13 +1215,21 @@
     <Crop x="0" y="0" width="0" height="-2"/>
     <Sensor black="55" white="3972"/>
   </Camera>
-  <Camera make="Panasonic" model = "DMC-FX150" mode = "4:3">
+  <Camera make="Panasonic" model = "DMC-FX150">
     <CFA width="2" height="2">
       <Color x="0" y="0">BLUE</Color><Color x="1" y="0">GREEN</Color>
       <Color x="0" y="1">GREEN</Color><Color x="1" y="1">RED</Color>
     </CFA>
     <Crop x="0" y="0" width="4429" height="3324"/>
     <Sensor black="15" white="3986"/>
+  </Camera>  
+       <Camera make="Panasonic" model = "DMC-FX150" mode = "4:3">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">BLUE</Color><Color x="1" y="0">GREEN</Color>
+      <Color x="0" y="1">GREEN</Color><Color x="1" y="1">RED</Color>
+    </CFA>
+    <Crop x="0" y="0" width="4429" height="3324"/>
+    <Sensor black="15" white="3986"/>
   </Camera>
   <Camera make="Panasonic" model = "DMC-FZ28" mode = "4:3">
     <CFA width="2" height="2">
@@ -1231,6 +1239,14 @@
     <Crop x="0" y="0" width="3668" height="2754"/>
     <Sensor black="15" white="3986"/>
   </Camera>
+  <Camera make="Panasonic" model = "DMC-FZ28" mode = "16:9">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">BLUE</Color><Color x="1" y="0">GREEN</Color>
+      <Color x="0" y="1">GREEN</Color><Color x="1" y="1">RED</Color>
+    </CFA>
+    <Crop x="0" y="0" width="3668" height="2754"/>
+    <Sensor black="15" white="3986"/>
+  </Camera>
   <Camera make="Panasonic" model = "DMC-FZ28">
     <CFA width="2" height="2">
         <Color x="0" y="0">BLUE</Color><Color x="1" y="0">GREEN</Color>
@@ -1239,6 +1255,14 @@
     <Crop x="0" y="0" width="-56" height="-4"/>
     <Sensor black="15" white="3986"/>
   </Camera>
+  <Camera make="Panasonic" model = "DMC-G1">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
+      <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="4018" height="3016" />
+    <Sensor black="15" white="3986"/>
+  </Camera>
   <Camera make="Panasonic" model = "DMC-G1" mode="4:3">
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
@@ -1271,8 +1295,8 @@
     <Crop x="0" y="0" width="-44" height="0" />
     <Sensor black="0" white="5300"/>
   </Camera>
-  <Camera make="Panasonic" model = "DMC-G2" mode="3:2">
-       <!-- Guess -->
+  <Camera make="Panasonic" model = "DMC-G2">
+       <!-- Default Guess -->
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
       <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
@@ -1280,30 +1304,19 @@
     <Crop x="0" y="0" width="-44" height="0" />
     <Sensor black="0" white="5300"/>
   </Camera>
-  <Camera make="Panasonic" model = "DMC-G2" mode="16:9">
-       <!-- Guess -->
+  <Camera make="Panasonic" model = "DMC-G10">
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
       <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
     </CFA>
     <Crop x="0" y="0" width="-44" height="0" />
-    <Sensor black="0" white="5300"/>
-  </Camera>
-  <Camera make="Panasonic" model = "DMC-G2" mode="1:1">
-       <!-- Guess -->
+    <Sensor black="0" white="4800"/>
+  </Camera>  <Camera make="Panasonic" model = "DMC-G10" mode="4:3">
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
       <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
     </CFA>
     <Crop x="0" y="0" width="-44" height="0" />
-    <Sensor black="0" white="5300"/>
-  </Camera>
-  <Camera make="Panasonic" model = "DMC-G10" mode="4:3">
-    <CFA width="2" height="2">
-      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
-      <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
-    </CFA>
-    <Crop x="0" y="0" width="-44" height="0" />
     <Sensor black="0" white="4800"/>
   </Camera>
   <Camera make="Panasonic" model = "DMC-GH1" mode="4:3">
@@ -1314,8 +1327,8 @@
     <Crop x="0" y="0" width="-44" height="0"/>
     <Sensor black="0" white="5111"/>
   </Camera>
-  <Camera make="Panasonic" model = "DMC-GH1" mode="3:2">
-       <!-- Guess -->
+  <Camera make="Panasonic" model = "DMC-GH1">
+       <!-- Default Guess -->
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
       <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
@@ -1323,14 +1336,13 @@
     <Crop x="0" y="0" width="-44" height="0"/>
     <Sensor black="0" white="5111"/>
   </Camera>
-  <Camera make="Panasonic" model = "DMC-GH1" mode="1:1">
-       <!-- Guess -->
+  <Camera make="Panasonic" model = "DMC-GF1">
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
       <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
     </CFA>
     <Crop x="0" y="0" width="-44" height="0"/>
-    <Sensor black="0" white="5111"/>
+    <Sensor black="0" white="4096"/>
   </Camera>
   <Camera make="Panasonic" model = "DMC-GF1" mode="4:3">
     <CFA width="2" height="2">
@@ -1364,6 +1376,14 @@
     <Crop x="0" y="0" width="-44" height="0"/>
     <Sensor black="0" white="4096"/>
   </Camera>
+  <Camera make="Panasonic" model = "DMC-GF2">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
+      <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-74" height="0"/>
+    <Sensor black="150" white="4096"/>
+  </Camera>
   <Camera make="Panasonic" model = "DMC-GF2" mode="4:3">
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
@@ -1404,6 +1424,14 @@
     <Crop x="0" y="0" width="-154" height="0"/>
     <Sensor black="150" white="4096"/>
   </Camera>
+  <Camera make="Panasonic" model = "DMC-G3" mode="4:3">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">RED</Color>
+      <Color x="0" y="1">BLUE</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-154" height="0"/>
+    <Sensor black="150" white="4096"/>
+  </Camera>
   <Camera make="Panasonic" model = "DMC-GF3">
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
@@ -1412,6 +1440,14 @@
     <Crop x="0" y="0" width="-72" height="0"/>
     <Sensor black="150" white="4096"/>
   </Camera>
+  <Camera make="Panasonic" model = "DMC-GF3" mode= "4:3">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
+      <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-72" height="0"/>
+    <Sensor black="150" white="4096"/>
+  </Camera>
   <Camera make="Panasonic" model = "DMC-GH2">
     <CFA width="2" height="2">
       <Color x="1" y="0">GREEN</Color><Color x="0" y="0">BLUE</Color>
@@ -1420,6 +1456,22 @@
     <Crop x="0" y="0" width="-216" height="0"/>
     <Sensor black="0" white="4096"/>
   </Camera>
+  <Camera make="Panasonic" model = "DMC-GH2" mode="16:9">
+    <CFA width="2" height="2">
+      <Color x="1" y="0">GREEN</Color><Color x="0" y="0">BLUE</Color>
+      <Color x="1" y="1">RED</Color><Color x="0" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-216" height="0"/>
+    <Sensor black="0" white="4096"/>
+  </Camera>
+  <Camera make="Panasonic" model = "DMC-GH2" mode="4:3">
+    <CFA width="2" height="2">
+      <Color x="1" y="0">GREEN</Color><Color x="0" y="0">BLUE</Color>
+      <Color x="1" y="1">RED</Color><Color x="0" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-140" height="0"/>
+    <Sensor black="0" white="4096"/>
+  </Camera>
   <Camera make="Panasonic" model = "DMC-GH1" mode="16:9">
     <CFA width="2" height="2">
       <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
@@ -1439,8 +1491,8 @@
                <Alias>DMC-FZ38</Alias>
        </Aliases>
   </Camera>
-  <Camera make="Panasonic" model = "DMC-FZ35" mode="3:2">
-       <!-- Guess -->
+  <Camera make="Panasonic" model = "DMC-FZ35">
+       <!-- Default Guess -->
     <CFA width="2" height="2">
         <Color x="0" y="0">BLUE</Color><Color x="1" y="0">GREEN</Color>
         <Color x="0" y="1">GREEN</Color><Color x="1" y="1">RED</Color>
@@ -1451,16 +1503,15 @@
                <Alias>DMC-FZ38</Alias>
        </Aliases>
   </Camera>
-  <Camera make="Panasonic" model = "DMC-FZ35" mode="16:9">
-       <!-- Guess -->
+  <Camera make="Panasonic" model = "DMC-FZ45">
     <CFA width="2" height="2">
-        <Color x="0" y="0">BLUE</Color><Color x="1" y="0">GREEN</Color>
-        <Color x="0" y="1">GREEN</Color><Color x="1" y="1">RED</Color>
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
+      <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
     </CFA>
-    <Crop x="0" y="0" width="-44" height="0"/>
-    <Sensor black="150" white="4800"/>
+    <Crop x="0" y="0" width="-58" height="-10"/>
+    <Sensor black="150" white="4097"/>
     <Aliases>
-               <Alias>DMC-FZ38</Alias>
+               <Alias>DMC-FZ40</Alias>
        </Aliases>
   </Camera>
   <Camera make="Panasonic" model = "DMC-FZ45" mode = "4:3">
@@ -1490,6 +1541,14 @@
     <Crop x="0" y="0" width="-200" height="0"/>
     <Sensor black="120" white="5400"/>
   </Camera>
+  <Camera make="Panasonic" model = "DMC-FZ100" mode="4:3">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">BLUE</Color>
+      <Color x="0" y="1">RED</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-200" height="0"/>
+    <Sensor black="120" white="5400"/>
+  </Camera>
   <Camera make="Panasonic" model = "DMC-LX3">
     <CFA width="2" height="2">
       <Color x="0" y="0">BLUE</Color><Color x="1" y="0">GREEN</Color>
@@ -1530,8 +1589,32 @@
     <Crop x="0" y="0" width="-200" height="-4"/>
     <Sensor black="150" white="4095"/>
   </Camera>  
-  <Camera make="PENTAX Corporation" model="PENTAX K100D">
+  <Camera make="Panasonic" model = "DMC-LX5" mode="4:3">
     <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">RED</Color>
+      <Color x="0" y="1">BLUE</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-200" height="-4"/>
+    <Sensor black="150" white="4095"/>
+  </Camera>  
+  <Camera make="Panasonic" model = "DMC-LX5" mode="3:2">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">RED</Color>
+      <Color x="0" y="1">BLUE</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-74" height="-4"/>
+    <Sensor black="150" white="4095"/>
+  </Camera>
+  <Camera make="Panasonic" model = "DMC-LX5" mode="1:1">
+    <CFA width="2" height="2">
+      <Color x="0" y="0">GREEN</Color><Color x="1" y="0">RED</Color>
+      <Color x="0" y="1">BLUE</Color><Color x="1" y="1">GREEN</Color>
+    </CFA>
+    <Crop x="0" y="0" width="-220" height="-4"/>
+    <Sensor black="150" white="4095"/>
+  </Camera>
+       <Camera make="PENTAX Corporation" model="PENTAX K100D">
+    <CFA width="2" height="2">
       <Color x="0" y="0">RED</Color>
       <Color x="1" y="0">GREEN</Color>
       <Color x="0" y="1">GREEN</Color>


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

Reply via email to