Update of /cvsroot/ufraw/ufraw
In directory vz-cvs-2.sog:/tmp/cvs-serv25866

Modified Files:
      Tag: dcraw-original-branch
        dcraw.cc 
Log Message:
dcraw original 9.08 (1.443).

Index: dcraw.cc
===================================================================
RCS file: /cvsroot/ufraw/ufraw/dcraw.cc,v
retrieving revision 1.1.2.113
retrieving revision 1.1.2.114
diff -u -d -r1.1.2.113 -r1.1.2.114
--- dcraw.cc    2 Apr 2011 04:05:47 -0000       1.1.2.113
+++ dcraw.cc    25 May 2011 15:10:51 -0000      1.1.2.114
@@ -23,7 +23,7 @@
    $Date$
  */
 
-#define VERSION "9.07"
+#define VERSION "9.08"
 
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
@@ -897,6 +897,8 @@
 
   for (jrow=0; jrow < jh.high; jrow++) {
     rp = ljpeg_row (jrow, &jh);
+    if (load_flags & 1)
+      row = jrow & 1 ? height-1-jrow/2 : jrow/2;
     for (jcol=0; jcol < jwide; jcol++) {
       val = *rp++;
       if (jh.bits <= 12)
@@ -4406,10 +4408,12 @@
     base = ftell(ifp)-10;
     fseek (ifp, -2, SEEK_CUR);
     order = get2();  get2();
-  } else if (!strncmp (buf,"FUJIFILM",8) ||
-            !strncmp (buf,"SONY",4) ||
+  } else if (!strncmp (buf,"SONY",4) ||
             !strcmp  (buf,"Panasonic")) {
-    order = 0x4949;
+    goto nf;
+  } else if (!strncmp (buf,"FUJIFILM",8)) {
+    base = ftell(ifp)-10;
+nf: order = 0x4949;
     fseek (ifp,  2, SEEK_CUR);
   } else if (!strcmp (buf,"OLYMP") ||
             !strcmp (buf,"LEICA") ||
@@ -4429,7 +4433,7 @@
   while (entries--) {
     tiff_get (base, &tag, &type, &len, &save);
     tag |= uptag << 16;
-    if (tag == 2 && strstr(make,"NIKON"))
+    if (tag == 2 && strstr(make,"NIKON") && !iso_speed)
       iso_speed = (get2(),get2());
     if (tag == 4 && len > 26 && len < 35) {
       if ((i=(get4(),get2())) != 0x7fff && !iso_speed)
@@ -4739,7 +4743,8 @@
   static const char *mod[] =
   { "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22",
     "Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65",
-    "Aptus 54S","Aptus 65S","Aptus 75S","AFi 5","AFi 6","AFi 7" };
+    "Aptus 54S","Aptus 65S","Aptus 75S","AFi 5","AFi 6","AFi 7",
+    "","","","","","","","","","","","","","","","","","AFi-II 12" };
   float romm_cam[3][3];
 
   fseek (ifp, offset, SEEK_SET);
@@ -4789,6 +4794,8 @@
       FORC4 fscanf (ifp, "%d", neut+c);
       FORC3 cam_mul[c] = (float) neut[0] / neut[c+1];
     }
+    if (!strcmp(data,"Rows_data"))
+      load_flags = get4();
     parse_mos (from);
     fseek (ifp, skip+from, SEEK_SET);
   }
@@ -4910,6 +4917,11 @@
        tiff_ifd[ifd].samples = len & 7;
        tiff_ifd[ifd].bps = getint(type);
        break;
+      case 61446:
+       raw_height = 0;
+       load_raw = &CLASS packed_load_raw;
+       load_flags = 16 | (get4() && (filters=0x16161616)) << 3;
+       break;
       case 259:                                /* Compression */
        tiff_ifd[ifd].comp = get2();
        break;
@@ -5814,22 +5826,14 @@
     } else if (tag == 0x2ff0) {
       FORC4 cam_mul[c ^ 1] = get2();
     } else if (tag == 0xc000) {
-      raw_height = order;
+      c = order;
       order = 0x4949;
       width  = get4();
       height = get4();
-      order = raw_height;
-      raw_height = 1;
-      load_raw = &CLASS packed_load_raw;
-      load_flags = 16;
+      order = c;
     }
     fseek (ifp, save+len, SEEK_SET);
   }
-  if (!raw_height) {
-    filters = 0x16161616;
-    load_raw = &CLASS packed_load_raw;
-    load_flags = 24;
-  }
   height <<= fuji_layout;
   width  >>= fuji_layout;
 }
@@ -6117,12 +6121,12 @@
        { 4763,712,-646,-6821,14399,2640,-1921,3276,6561 } },
     { "Canon EOS 550D", 0, 0x3dd7,
        { 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } },
-    { "Canon EOS 600D", 0, 0x3510,     /* DJC */
-       { 5589,-1476,-292,-3401,9372,4030,-706,2038,6350 } },
+    { "Canon EOS 600D", 0, 0x3510,
+       { 6461,-907,-882,-4300,12184,2378,-819,1944,5931 } },
     { "Canon EOS 1000D", 0, 0xe43,
        { 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } },
-    { "Canon EOS 1100D", 0, 0x3510,    /* DJC */
-       { 5193,-1423,-226,-3414,9273,4142,-679,2103,6808 } },
+    { "Canon EOS 1100D", 0, 0x3510,
+       { 6444,-904,-893,-4563,12308,2535,-903,2016,6728 } },
     { "Canon EOS-1Ds Mark III", 0, 0x3bb0,
        { 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } },
     { "Canon EOS-1Ds Mark II", 0, 0xe80,
@@ -6234,7 +6238,7 @@
     { "FUJIFILM FinePix S100FS", 514, 0,
        { 11521,-4355,-1065,-6524,13767,3058,-1466,1984,6045 } },
     { "FUJIFILM FinePix S200EXR", 512, 0x3fff,
-       { 0 } },
+       { 11401,-4498,-1312,-5088,12751,2613,-838,1568,5941 } },
     { "FUJIFILM FinePix S20Pro", 0, 0,
        { 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } },
     { "FUJIFILM FinePix S2Pro", 128, 0,
@@ -6271,6 +6275,12 @@
        { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } },
     { "FUJIFILM FinePix HS10 HS11", 0, 0xf68,
        { 12440,-3954,-1183,-1123,9674,1708,-83,1614,4086 } },
+    { "FUJIFILM FinePix HS20EXR", 0, 0,
+       { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
+    { "FUJIFILM FinePix F550EXR", 0, 0,
+       { 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
+    { "FUJIFILM FinePix X100", 0, 0,
+       { 12161,-4457,-1069,-5034,12874,2400,-795,1724,6904 } },
     { "Imacon Ixpress", 0, 0,          /* DJC */
        { 7025,-1415,-704,-5188,13765,1424,-1248,2742,6038 } },
     { "KODAK NC2000", 0, 0,
@@ -6321,6 +6331,8 @@
        { 11313,-3559,-1101,-3893,11891,2257,-1214,2398,4908 } },
     { "KODAK EasyShare Z981", 0, 0,
        { 12729,-4717,-1188,-1367,9187,2582,274,860,4411 } },
+    { "KODAK EasyShare Z990", 0, 0xfed,
+       { 11749,-4048,-1309,-1867,10572,1489,-138,1449,4522 } },
     { "KODAK EASYSHARE Z1015", 0, 0xef1,
        { 11265,-4286,-992,-4694,12343,2647,-1090,1523,5447 } },
     { "Leaf CMost", 0, 0,
@@ -6391,6 +6403,8 @@
        { 6992,-1668,-806,-8138,15748,2543,-874,850,7897 } },
     { "NIKON D5000", 0, 0xf00,
        { 7309,-1403,-519,-8474,16008,2622,-2433,2826,8064 } },
+    { "NIKON D5100", 0, 0x3de6,
+       { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } },
     { "NIKON D50", 0, 0,
        { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } },
     { "NIKON D60", 0, 0,
@@ -6483,8 +6497,12 @@
        { 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } },
     { "OLYMPUS E-P2", 0, 0xffd,
        { 8343,-2050,-1021,-7715,15705,2103,-1831,2380,8235 } },
+    { "OLYMPUS E-PL1s", 0, 0,
+       { 11409,-3872,-1393,-4572,12757,2003,-709,1810,7415 } },
     { "OLYMPUS E-PL1", 0, 0,
        { 11408,-4289,-1215,-4286,12385,2118,-387,1467,7787 } },
+    { "OLYMPUS E-PL2", 0, 0,
+       { 15030,-5552,-1806,-3987,12387,1767,-592,1670,7023 } },
     { "OLYMPUS SP350", 0, 0,
        { 12078,-4836,-1069,-6671,14306,2578,-786,939,7418 } },
     { "OLYMPUS SP3", 0, 0,
@@ -6499,6 +6517,8 @@
        { 10915,-3677,-982,-5587,12986,2911,-1168,1968,6223 } },
     { "OLYMPUS SP570UZ", 0, 0,
        { 11522,-4044,-1146,-4736,12172,2904,-988,1829,6039 } },
+    { "OLYMPUS XZ-1", 0, 0,
+       { 10901,-4095,-1074,-1141,9208,2293,-62,1417,5158 } },
     { "PENTAX *ist DL2", 0, 0,
        { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } },
     { "PENTAX *ist DL", 0, 0,
@@ -6601,7 +6621,7 @@
        { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } },
     { "SAMSUNG EX1", 0, 0x3e00,
        { 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } },
-    { "SAMSUNG NX10", 0, 0,
+    { "SAMSUNG NX1", 0, 0,
        { 10332,-3234,-1168,-6111,14639,1520,-1352,2647,8331 } },
     { "SAMSUNG WB2000", 0, 0xfff,
        { 12093,-3557,-1155,-1000,9534,1733,-22,1787,4576 } },
@@ -6619,6 +6639,8 @@
        { 7511,-2571,-692,-7894,15088,3060,-948,1111,8128 } },
     { "SONY DSLR-A100", 0, 0xfeb,
        { 9437,-2811,-774,-8405,16215,2290,-710,596,7181 } },
+    { "SONY DSLR-A290", 0, 0,
+       { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
     { "SONY DSLR-A2", 0, 0,
        { 9847,-3091,-928,-8485,16345,2225,-715,595,7103 } },
     { "SONY DSLR-A300", 0, 0,
@@ -6924,9 +6946,11 @@
   } else if (!strcmp (head, "qktk")) {
     strcpy (make, "Apple");
     strcpy (model,"QuickTake 100");
+    load_raw = &CLASS quicktake_100_load_raw;
   } else if (!strcmp (head, "qktn")) {
     strcpy (make, "Apple");
     strcpy (model,"QuickTake 150");
+    load_raw = &CLASS kodak_radc_load_raw;
   } else if (!memcmp (head,"FUJIFILM",8)) {
     fseek (ifp, 84, SEEK_SET);
     thumb_offset = get4();
@@ -6939,7 +6963,7 @@
       if (is_raw == 2 && shot_select)
        parse_fuji (i);
     }
-    fseek (ifp, 100, SEEK_SET);
+    fseek (ifp, 100+28*(shot_select > 0), SEEK_SET);
     parse_tiff (data_offset = get4());
     parse_tiff (thumb_offset+12);
     apply_tiff();
@@ -7401,7 +7425,8 @@
     left_margin = 2;
   } else if (!strcmp(model,"D5000")) {
     width -= 42;
-  } else if (!strcmp(model,"D7000")) {
+  } else if (!strcmp(model,"D5100") ||
+            !strcmp(model,"D7000")) {
     width -= 44;
   } else if (!strcmp(model,"D3100")) {
     width -= 28;
@@ -7433,6 +7458,8 @@
   } else if (!strncmp(model,"COOLPIX P",9)) {
     load_flags = 24;
     filters = 0x94949494;
+    if (model[9] == '7' && iso_speed >= 400)
+      black = 255;
   } else if (fsize == 1581060) {
     height = 963;
     width = 1287;
@@ -7538,14 +7565,14 @@
       width  = 2880;
       flip = 6;
     } else if (load_raw != &CLASS packed_load_raw)
-      maximum = 0x3e00;
-    if (is_raw == 2 && shot_select)
-      maximum = 0x2f00;
+      maximum = (is_raw == 2 && shot_select) ? 0x2f00 : 0x3e00;
     top_margin = (raw_height - height) >> 2 << 1;
     left_margin = (raw_width - width ) >> 2 << 1;
-    if (is_raw == 2)
-      data_offset += (shot_select > 0) * ( fuji_layout ?
-               (raw_width *= 2) : raw_height*raw_width*2 );
+    if (width == 3328) {
+      width = 3262;
+      left_margin = 34;
+    }
+    if (fuji_layout) raw_width *= is_raw;
     if (load_raw == &CLASS fuji_load_raw) {
       fuji_width = width >> !fuji_layout;
       width = (height >> fuji_layout) + fuji_width;
@@ -7642,8 +7669,8 @@
     raw_width = fsize/height/2;
     order = 0x4d4d;
     load_raw = &CLASS unpacked_load_raw;
-  } else if (!strcmp(model,"NX10")) {
-    height -= top_margin = 4;
+  } else if (!strncmp(model,"NX1",3)) {
+    height -= top_margin = 8;
     width -= 2 * (left_margin = 8);
     load_flags = 32;
   } else if (!strcmp(model,"EX1")) {
@@ -7952,7 +7979,7 @@
     } else gamma_curve (0, 3.875, 1, 255);
     load_raw = &CLASS eight_bit_load_raw;
   } else if (!strncasecmp(model,"EasyShare",9)) {
-    data_offset = 0x15000;
+    data_offset = data_offset < 0x15000 ? 0x15000 : 0x17000;
     load_raw = &CLASS packed_load_raw;
   } else if (!strcasecmp(make,"KODAK")) {
     if (filters == UINT_MAX) filters = 0x61616161;
@@ -8046,7 +8073,8 @@
     load_raw = &CLASS kodak_radc_load_raw;
     filters = 0x61616161;
     simple_coeff(2);
-  } else if (!strcmp(model,"QuickTake 100")) {
+  } else if (!strncmp(model,"QuickTake",9)) {
+    if (head[5]) strcpy (model+10, "200");
     fseek (ifp, 544, SEEK_SET);
     height = get2();
     width  = get2();
@@ -8056,14 +8084,6 @@
       fseek (ifp, data_offset-6, SEEK_SET);
       flip = ~get2() & 3 ? 5:6;
     }
-    load_raw = &CLASS quicktake_100_load_raw;
-    filters = 0x61616161;
-  } else if (!strcmp(model,"QuickTake 150")) {
-    data_offset = 738 - head[5];
-    if (head[5]) strcpy (model+10, "200");
-    load_raw = &CLASS kodak_radc_load_raw;
-    height = 480;
-    width  = 640;
     filters = 0x61616161;
   } else if (!strcmp(make,"Rollei") && !load_raw) {
     switch (raw_width) {


------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery, 
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now. 
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
ufraw-cvs mailing list
ufraw-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs

Reply via email to