[Digikam-devel] extragear/graphics/digikam/libs/dcraw

Gilles Caulier caulier.gilles at free.fr
Tue Oct 10 11:28:56 BST 2006


SVN commit 594161 by cgilles:

digikam from trunk : backport dcraw.c 8.40 to digiKam core

CCMAIL: digikam-devel at kde.org



 M  +2 -0      Makefile.am  
 M  +24 -18    dcraw.c  


--- trunk/extragear/graphics/digikam/libs/dcraw/Makefile.am #594160:594161
@@ -1,4 +1,6 @@
+# Requires by dcraw.c implementation.
 KDE_OPTIONS = nofinal
+
 METASOURCES = AUTO
 
 INCLUDES = -I$(top_srcdir)/digikam/digikam $(all_includes)
--- trunk/extragear/graphics/digikam/libs/dcraw/dcraw.c #594160:594161
@@ -19,11 +19,11 @@
    copy them from an earlier, non-GPL Revision of dcraw.c, or (c)
    purchase a license from the author.
 
-   $Revision: 1.351 $
-   $Date: 2006/09/22 04:59:09 $
+   $Revision: 1.353 $
+   $Date: 2006/10/10 04:46:02 $
  */
 
-#define VERSION "8.39"
+#define VERSION "8.40"
 
 #define _GNU_SOURCE
 #define _USE_MATH_DEFINES
@@ -1070,12 +1070,7 @@
   return 1;
 }
 
-/*
-   Returns 0 for a Pentax Optio 33WR,
-	   1 for a Nikon E3700,
-	   2 for an Olympus C740UZ.
- */
-int CLASS nikon_3700()
+void CLASS nikon_3700()
 {
   int i, sum[] = { 0, 0 };
   uchar tail[952];
@@ -1084,8 +1079,20 @@
   fread (tail, 1, sizeof tail, ifp);
   for (i=0; i < sizeof tail; i++)
     sum[(i>>2) & 1] += tail[i];
-  if (sum[1] > 4*sum[0]) return 2;
-  return sum[0] > 4*sum[1];
+  if (sum[0] > 4*sum[1]) return;
+  if (sum[1] > 4*sum[0]) {
+    strcpy (make, "OLYMPUS");
+    strcpy (model, "C740UZ");
+    return;
+  }
+  sum[0] = sum[1] = 0;
+  for (i=0; i < sizeof tail; i++)
+    sum[i & 1] += tail[i];
+  if (sum[1] > 4*sum[0] || sum[0]+sum[1] > 216000) {
+    strcpy (make, "PENTAX");
+    strcpy (model,"Optio 33WR");
+  } else
+    strcpy (model, "E3200");
 }
 
 /*
@@ -3310,7 +3317,7 @@
 
    "Interpolation using a Threshold-based variable number of gradients"
 
-   described in http://www-ise.stanford.edu/~tingchen/algodep/vargra.html
+   described in http://scien.stanford.edu/class/psych221/projects/99/tingchen/algodep/vargra.html
 
    I've extended the basic idea to work with non-Bayer filter arrays.
    Gradients are numbered clockwise from NW=0 to W=7.
@@ -5769,6 +5776,7 @@
   } else if (is_canon && raw_width == 4476) {
     top_margin  = 34;
     left_margin = 90;
+    maximum = 0xe6c;
     goto canon_cr2;
   } else if (is_canon && raw_width == 5108) {
     top_margin  = 13;
@@ -5859,12 +5867,10 @@
     load_raw = &CLASS nikon_e2100_load_raw;
     pre_mul[0] = 1.818;
     pre_mul[2] = 1.618;
-    if ((i = nikon_3700()) == 2) {
-      strcpy (make, "OLYMPUS");
-      strcpy (model, "C740UZ");
-    } else if (i == 0) {
-      strcpy (make, "PENTAX");
-      strcpy (model,"Optio 33WR");
+    if (!timestamp) nikon_3700();
+    if (model[0] == 'E' && atoi(model+1) < 3700)
+      filters = 0x49494949;
+    if (!strcmp(model,"Optio 33WR")) {
       flip = 1;
       filters = 0x16161616;
       pre_mul[0] = 1.331;



More information about the Digikam-devel mailing list