From 32b0f0480bd6de6f6426adbb192d9c3688b62731 Mon Sep 17 00:00:00 2001 From: ffsup2 Date: Thu, 3 Feb 2011 01:04:09 +0100 Subject: [PATCH] dcraw update to 9.06 --- rtengine/dcraw.c | 134 ++++--- rtengine/dcraw.cc | 142 ++++--- rtengine/dcraw.patch | 933 ++++++++++++++++++++++--------------------- 3 files changed, 648 insertions(+), 561 deletions(-) diff --git a/rtengine/dcraw.c b/rtengine/dcraw.c index db8830c80..4e4b1464f 100644 --- a/rtengine/dcraw.c +++ b/rtengine/dcraw.c @@ -19,11 +19,11 @@ *If you have not modified dcraw.c in any way, a link to my homepage qualifies as "full source code". - $Revision: 1.439 $ - $Date: 2010/11/10 19:00:00 $ + $Revision: 1.440 $ + $Date: 2011/01/29 07:43:38 $ */ -#define VERSION "9.05" +#define VERSION "9.06" #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -57,7 +57,7 @@ #else #define _(String) (String) #endif -#ifdef DJGPP +#if defined(DJGPP) || defined(__MINGW32__) #define fseeko fseek #define ftello ftell #else @@ -1548,12 +1548,13 @@ void CLASS phase_one_load_raw() merror (pixel, "phase_one_load_raw()"); for (row=0; row < height; row++) { read_shorts (pixel, raw_width); - for (col=0; col < raw_width; col+=2) { - a = pixel[col+0] ^ akey; - b = pixel[col+1] ^ bkey; - pixel[col+0] = (a & mask) | (b & ~mask); - pixel[col+1] = (b & mask) | (a & ~mask); - } + if (ph1.format) + for (col=0; col < raw_width; col+=2) { + a = pixel[col+0] ^ akey; + b = pixel[col+1] ^ bkey; + pixel[col+0] = (a & mask) | (b & ~mask); + pixel[col+1] = (b & mask) | (a & ~mask); + } for (col=0; col < width; col++) BAYER(row,col) = pixel[col+left_margin]; } @@ -1739,6 +1740,7 @@ void CLASS imacon_full_load_raw() void CLASS packed_load_raw() { int vbits=0, bwide, pwide, rbits, bite, half, irow, row, col, val, i; + int zero=0; UINT64 bitbuf=0; if (raw_width * 8 >= width * tiff_bps) /* Is raw_width in bytes? */ @@ -1771,8 +1773,10 @@ void CLASS packed_load_raw() i = (col ^ (bite == 24)) - left_margin; if ((unsigned) i < width) BAYER(row,i) = val; - else if (load_flags & 32) + else if (load_flags & 32) { black += val; + zero += !val; + } if (load_flags & 1 && (col % 10) == 9 && fgetc(ifp) && col < width+left_margin) derror(); } @@ -1780,6 +1784,8 @@ void CLASS packed_load_raw() } if (load_flags & 32 && pwide > width) black /= (pwide - width) * height; + if (zero*4 > (pwide - width) * height) + black = 0; } void CLASS unpacked_load_raw() @@ -4413,8 +4419,11 @@ void CLASS parse_makernote (int base, int uptag) else if (!strcmp (buf,"AOC") || !strcmp (buf,"QVC")) fseek (ifp, -4, SEEK_CUR); - else fseek (ifp, -10, SEEK_CUR); - + else { + fseek (ifp, -10, SEEK_CUR); + if (!strncmp(make,"SAMSUNG",7)) + base = ftell(ifp); + } entries = get2(); if (entries > 1000) return; while (entries--) { @@ -4462,9 +4471,18 @@ void CLASS parse_makernote (int base, int uptag) fseek (ifp, get4()+base, SEEK_SET); parse_tiff_ifd (base); } - if (tag == 0x14 && len == 2560 && type == 7) { - fseek (ifp, 1248, SEEK_CUR); - goto get2_256; + if (tag == 0x14 && type == 7) { + if (len == 2560) { + fseek (ifp, 1248, SEEK_CUR); + goto get2_256; + } + fread (buf, 1, 10, ifp); + if (!strncmp(buf,"NRW ",4)) { + fseek (ifp, strcmp(buf+4,"0100") ? 46:1546, SEEK_CUR); + cam_mul[0] = get4() << 2; + cam_mul[1] = get4() + get4(); + cam_mul[2] = get4() << 2; + } } if (tag == 0x15 && type == 2 && is_raw) fread (model, 64, 1, ifp); @@ -4611,6 +4629,10 @@ get2_rggb: fseek (ifp, 22, SEEK_CUR); FORC4 sraw_mul[c ^ (c >> 1)] = get2(); } + if (tag == 0xa021) + FORC4 cam_mul[c ^ (c >> 1)] = get4(); + if (tag == 0xa028) + FORC4 cam_mul[c ^ (c >> 1)] -= get4(); next: fseek (ifp, save, SEEK_SET); } @@ -4639,6 +4661,7 @@ void CLASS get_timestamp (int reversed) return; t.tm_year -= 1900; t.tm_mon -= 1; + t.tm_isdst = -1; if (mktime(&t) > 0) timestamp = mktime(&t); } @@ -4853,9 +4876,6 @@ int CLASS parse_tiff_ifd (int base) case 6: height = get2(); break; case 7: width += get2(); break; case 9: filters = get2(); break; - case 14: case 15: case 16: - maximum = get2(); - break; case 17: case 18: if (type == 3 && len == 1) cam_mul[(tag-17)*2] = get2() / 256.0; @@ -6119,7 +6139,7 @@ void CLASS adobe_coeff (const char *make, const char *model) { "Canon PowerShot G11", 0, 0, { 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } }, { "Canon PowerShot G12", 0, 0, - { 0 } }, + { 13244,-5501,-1248,-1508,9858,1935,-270,1083,4366 } }, { "Canon PowerShot G1", 0, 0, { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } }, { "Canon PowerShot G2", 0, 0, @@ -6152,6 +6172,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 9976,-3810,-832,-7115,14463,2906,-901,989,7889 } }, { "Canon PowerShot S90", 0, 0, { 12374,-5016,-1049,-1677,9902,2078,-83,852,4683 } }, + { "Canon PowerShot S95", 0, 0, + { 13440,-5896,-1279,-1236,9598,1931,-180,1001,4651 } }, { "Canon PowerShot A470", 0, 0, /* DJC */ { 12513,-4407,-1242,-2680,10276,2405,-878,2215,4734 } }, { "Canon PowerShot A610", 0, 0, /* DJC */ @@ -6176,6 +6198,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11634,-3924,-1128,-4968,12954,2015,-1588,2648,7206 } }, { "CASIO EX-Z750", 0, 0, /* DJC */ { 10819,-3873,-1099,-4903,13730,1175,-1755,3751,4632 } }, + { "CASIO EX-Z10", 128, 0xfff, /* DJC */ + { 9790,-3338,-603,-2321,10222,2099,-344,1273,4799 } }, { "CINE 650", 0, 0, { 3390,480,-500,-800,3610,340,-550,2336,1192 } }, { "CINE 660", 0, 0, @@ -6338,6 +6362,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 10231,-2769,-1255,-8301,15900,2552,-797,680,7148 } }, { "NIKON D3000", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, + { "NIKON D3100", 0, 0, + { 7911,-2167,-813,-5327,13150,2408,-1288,2483,7968 } }, { "NIKON D300", 0, 0, { 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } }, { "NIKON D3X", 0, 0, @@ -6356,8 +6382,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, { "NIKON D60", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, - { "NIKON D7000", 0, 0, /* DJC */ - { 6629,-2254,-2,-3468,9387,4081,-760,2102,7574 } }, + { "NIKON D7000", 0, 0, + { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } }, { "NIKON D700", 0, 0, { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } }, { "NIKON D70", 0, 0, @@ -6394,6 +6420,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7971,-2314,-913,-8451,15762,2894,-1442,1520,7610 } }, { "NIKON COOLPIX P6000", 0, 0, { 9698,-3367,-914,-4706,12584,2368,-837,968,5801 } }, + { "NIKON COOLPIX P7000", 0, 0, + { 11432,-3679,-1111,-3169,11239,2202,-791,1380,4455 } }, { "OLYMPUS C5050", 0, 0, { 10508,-3124,-1273,-6079,14294,1901,-1653,2306,6237 } }, { "OLYMPUS C5060", 0, 0, @@ -6432,8 +6460,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } }, { "OLYMPUS E-520", 0, 0xfd2, { 8344,-2322,-1020,-7596,15635,2048,-1748,2269,7287 } }, - { "OLYMPUS E-5", 0, 0, /* DJC */ - { 10033,-4067,-600,-3784,10494,3291,-923,2594,7744 } }, + { "OLYMPUS E-5", 0, 0, + { 11200,-3783,-1325,-4576,12593,2206,-695,1742,7504 } }, { "OLYMPUS E-600", 0, 0xfaf, { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } }, { "OLYMPUS E-620", 0, 0xfaf, @@ -6482,21 +6510,21 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, { "PENTAX K-x", 0, 0, { 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } }, - { "PENTAX K-r", 0, 0, /* Pentax DNG */ - { 21746,-6684,-1521,-10014,26601,6573,-1920,3062,19415 } }, - { "PENTAX K-5", 0, 0, /* Pentax DNG */ - { 19331,-5842,-2589,-9103,28027,4285,-2216,3884,14767 } }, + { "PENTAX K-r", 0, 0, + { 9895,-3077,-850,-5304,13035,2521,-883,1768,6936 } }, + { "PENTAX K-5", 0, 0, + { 8713,-2833,-743,-4342,11900,2772,-722,1543,6247 } }, { "PENTAX K-7", 0, 0, { 9142,-2947,-678,-8648,16967,1663,-2224,2898,8615 } }, { "PENTAX 645D", 0, 0x3e00, { 10646,-3593,-1158,-3329,11699,1831,-667,2874,6287 } }, - { "Panasonic DMC-FZ8", 0, 0, + { "Panasonic DMC-FZ8", 0, 0xf7f, { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } }, { "Panasonic DMC-FZ18", 0, 0, { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } }, - { "Panasonic DMC-FZ28", 15, 0, + { "Panasonic DMC-FZ28", 15, 0xf96, { 10109,-3488,-993,-5412,12812,2916,-1305,2140,5543 } }, - { "Panasonic DMC-FZ30", 0, 0, + { "Panasonic DMC-FZ30", 0, 0xf94, { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } }, { "Panasonic DMC-FZ3", 143, 0, { 9938,-2780,-890,-4604,12393,2480,-1117,2304,4620 } }, @@ -6506,19 +6534,19 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, { "LEICA V-LUX1", 0, 0, { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, - { "Panasonic DMC-L10", 15, 0, + { "Panasonic DMC-L10", 15, 0xf96, { 8025,-1942,-1050,-7920,15904,2100,-2456,3005,7039 } }, - { "Panasonic DMC-L1", 0, 0, + { "Panasonic DMC-L1", 0, 0xf7f, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, - { "LEICA DIGILUX 3", 0, 0, + { "LEICA DIGILUX 3", 0, 0xf7f, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, { "Panasonic DMC-LC1", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, { "LEICA DIGILUX 2", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, - { "Panasonic DMC-LX1", 0, 0, + { "Panasonic DMC-LX1", 0, 0xf7f, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, - { "LEICA D-LUX2", 0, 0, + { "LEICA D-LUX2", 0, 0xf7f, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, { "Panasonic DMC-LX2", 0, 0, { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, @@ -6530,20 +6558,24 @@ void CLASS adobe_coeff (const char *make, const char *model) { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, { "Panasonic DMC-LX5", 143, 0, { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, - { "Panasonic DMC-FZ100", 143, 0, + { "Panasonic DMC-FZ100", 143, 0xfff, { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, - { "Panasonic DMC-FX150", 15, 0, + { "Panasonic DMC-FX150", 15, 0xfff, { 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } }, { "Panasonic DMC-G10", 0, 0, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-G1", 15, 0, + { "Panasonic DMC-G1", 15, 0xf94, { 8199,-2065,-1056,-8124,16156,2033,-2458,3022,7220 } }, - { "Panasonic DMC-G2", 15, 0, + { "Panasonic DMC-G2", 15, 0xf3c, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-GF1", 15, 0, + { "Panasonic DMC-GF1", 15, 0xf92, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, - { "Panasonic DMC-GH1", 15, 0, + { "Panasonic DMC-GF2", 143, 0xfff, + { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, + { "Panasonic DMC-GH1", 15, 0xf92, { 6299,-1466,-532,-6535,13852,2969,-2331,3112,5984 } }, + { "Panasonic DMC-GH2", 15, 0xf95, + { 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } }, { "Phase One H 20", 0, 0, /* DJC */ { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } }, { "Phase One P 2", 0, 0, @@ -6556,10 +6588,10 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, { "SAMSUNG EX1", 0, 0x3e00, { 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } }, - { "SAMSUNG NX10", 20, 0xea6, + { "SAMSUNG NX10", 0, 0, { 10332,-3234,-1168,-6111,14639,1520,-1352,2647,8331 } }, { "SAMSUNG WB2000", 0, 0xfff, - { 0 } }, + { 12093,-3557,-1155,-1000,9534,1733,-22,1787,4576 } }, { "SAMSUNG GX-1", 0, 0, { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, { "SAMSUNG S85", 0, 0xffff, /* DJC */ @@ -6586,6 +6618,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } }, { "SONY DSLR-A450", 128, 0xfeb, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, + { "SONY DSLR-A580", 128, 0xfeb, + { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } }, { "SONY DSLR-A5", 128, 0xfeb, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, { "SONY DSLR-A700", 126, 0, @@ -7547,9 +7581,6 @@ konica_400z: data_error = -1; } else if (!strcmp(model,"*ist DS")) { height -= 2; - } else if (!strcmp(model,"K-x")) { - width = 4309; - filters = 0x16161616; } else if (!strcmp(model,"Optio S")) { if (fsize == 3178560) { height = 1540; @@ -7591,6 +7622,7 @@ konica_400z: } else if (!strcmp(model,"NX10")) { height -= top_margin = 4; width -= 2 * (left_margin = 8); + load_flags = 32; } else if (!strcmp(model,"EX1")) { order = 0x4949; height = 2760; @@ -8085,11 +8117,10 @@ c603: width = 3279; raw_width = 4928; maximum = 0xfff; - } else if (!strcmp(model,"EX-Z1050")) { + } else if (fsize == 15499264) { /* EX-Z1050 or EX-Z1080 */ height = 2752; width = 3672; raw_width = 5632; - maximum = 0xffc; } else if (!strcmp(model,"EX-P505")) { height = 1928; width = 2568; @@ -8128,7 +8159,7 @@ dng_skip: } #endif if (!cdesc[0]) - strcpy (cdesc, colors == 3 ? "RGB":"GMCY"); + strcpy (cdesc, colors == 3 ? "RGBG":"GMCY"); if (!raw_height) raw_height = height; if (!raw_width ) raw_width = width; if (filters && colors == 3) @@ -8488,7 +8519,7 @@ void CLASS tiff_head (struct tiff_hdr *th, int full) strncpy (th->make, make, 64); strncpy (th->model, model, 64); strcpy (th->soft, "dcraw v"VERSION); - t = gmtime (×tamp); + t = localtime (×tamp); sprintf (th->date, "%04d:%02d:%02d %02d:%02d:%02d", t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); strncpy (th->artist, artist, 64); @@ -8826,7 +8857,6 @@ int CLASS main (int argc, const char **argv) printf (_("Raw colors: %d"), colors); if (filters) { printf (_("\nFilter pattern: ")); - if (!cdesc[3]) cdesc[3] = 'G'; for (i=0; i < 16; i++) putchar (cdesc[fc(i >> 1,i & 1)]); } diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index 97406007f..dc66af38c 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -28,11 +28,11 @@ *If you have not modified dcraw.c in any way, a link to my homepage qualifies as "full source code". - $Revision: 1.439 $ - $Date: 2010/11/10 19:00:00 $ + $Revision: 1.440 $ + $Date: 2011/01/29 07:43:38 $ */ -#define VERSION "9.05" +#define VERSION "9.06" #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -66,7 +66,7 @@ #else #define _(String) (String) #endif -#ifdef DJGPP +#if defined(DJGPP) || defined(__MINGW32__) #define fseeko fseek #define ftello ftell #else @@ -1559,12 +1559,13 @@ void CLASS phase_one_load_raw() merror (pixel, "phase_one_load_raw()"); for (row=0; row < height; row++) { read_shorts (pixel, raw_width); - for (col=0; col < raw_width; col+=2) { - a = pixel[col+0] ^ akey; - b = pixel[col+1] ^ bkey; - pixel[col+0] = (a & mask) | (b & ~mask); - pixel[col+1] = (b & mask) | (a & ~mask); - } + if (ph1.format) + for (col=0; col < raw_width; col+=2) { + a = pixel[col+0] ^ akey; + b = pixel[col+1] ^ bkey; + pixel[col+0] = (a & mask) | (b & ~mask); + pixel[col+1] = (b & mask) | (a & ~mask); + } for (col=0; col < width; col++) BAYER(row,col) = pixel[col+left_margin]; } @@ -1750,6 +1751,7 @@ void CLASS imacon_full_load_raw() void CLASS packed_load_raw() { int vbits=0, bwide, pwide, rbits, bite, half, irow, row, col, val, i; + int zero=0; UINT64 bitbuf=0; if (raw_width * 8 >= width * tiff_bps) /* Is raw_width in bytes? */ @@ -1782,8 +1784,10 @@ void CLASS packed_load_raw() i = (col ^ (bite == 24)) - left_margin; if ((unsigned) i < width) BAYER(row,i) = val; - else if (load_flags & 32) + else if (load_flags & 32) { black += val; + zero += !val; + } if (load_flags & 1 && (col % 10) == 9 && fgetc(ifp) && col < width+left_margin) derror(); } @@ -1791,6 +1795,8 @@ void CLASS packed_load_raw() } if (load_flags & 32 && pwide > width) black /= (pwide - width) * height; + if (zero*4 > (pwide - width) * height) + black = 0; } void CLASS unpacked_load_raw() @@ -4424,8 +4430,11 @@ void CLASS parse_makernote (int base, int uptag) else if (!strcmp (buf,"AOC") || !strcmp (buf,"QVC")) fseek (ifp, -4, SEEK_CUR); - else fseek (ifp, -10, SEEK_CUR); - + else { + fseek (ifp, -10, SEEK_CUR); + if (!strncmp(make,"SAMSUNG",7)) + base = ftell(ifp); + } entries = get2(); if (entries > 1000) return; while (entries--) { @@ -4473,9 +4482,18 @@ void CLASS parse_makernote (int base, int uptag) fseek (ifp, get4()+base, SEEK_SET); parse_tiff_ifd (base); } - if (tag == 0x14 && len == 2560 && type == 7) { - fseek (ifp, 1248, SEEK_CUR); - goto get2_256; + if (tag == 0x14 && type == 7) { + if (len == 2560) { + fseek (ifp, 1248, SEEK_CUR); + goto get2_256; + } + fread (buf, 1, 10, ifp); + if (!strncmp(buf,"NRW ",4)) { + fseek (ifp, strcmp(buf+4,"0100") ? 46:1546, SEEK_CUR); + cam_mul[0] = get4() << 2; + cam_mul[1] = get4() + get4(); + cam_mul[2] = get4() << 2; + } } if (tag == 0x15 && type == 2 && is_raw) fread (model, 64, 1, ifp); @@ -4622,6 +4640,10 @@ get2_rggb: fseek (ifp, 22, SEEK_CUR); FORC4 sraw_mul[c ^ (c >> 1)] = get2(); } + if (tag == 0xa021) + FORC4 cam_mul[c ^ (c >> 1)] = get4(); + if (tag == 0xa028) + FORC4 cam_mul[c ^ (c >> 1)] -= get4(); next: fseek (ifp, save, SEEK_SET); } @@ -4650,6 +4672,7 @@ void CLASS get_timestamp (int reversed) return; t.tm_year -= 1900; t.tm_mon -= 1; + t.tm_isdst = -1; if (mktime(&t) > 0) timestamp = mktime(&t); } @@ -6138,7 +6161,7 @@ void CLASS adobe_coeff (const char *make, const char *model) { "Canon PowerShot G11", 0, 0, { 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } }, { "Canon PowerShot G12", 0, 0, - { 0 } }, + { 13244,-5501,-1248,-1508,9858,1935,-270,1083,4366 } }, { "Canon PowerShot G1", 0, 0, { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } }, { "Canon PowerShot G2", 0, 0, @@ -6171,6 +6194,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 9976,-3810,-832,-7115,14463,2906,-901,989,7889 } }, { "Canon PowerShot S90", 0, 0, { 12374,-5016,-1049,-1677,9902,2078,-83,852,4683 } }, + { "Canon PowerShot S95", 0, 0, + { 13440,-5896,-1279,-1236,9598,1931,-180,1001,4651 } }, { "Canon PowerShot A470", 0, 0, /* DJC */ { 12513,-4407,-1242,-2680,10276,2405,-878,2215,4734 } }, { "Canon PowerShot A610", 0, 0, /* DJC */ @@ -6195,6 +6220,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11634,-3924,-1128,-4968,12954,2015,-1588,2648,7206 } }, { "CASIO EX-Z750", 0, 0, /* DJC */ { 10819,-3873,-1099,-4903,13730,1175,-1755,3751,4632 } }, + { "CASIO EX-Z10", 128, 0xfff, /* DJC */ + { 9790,-3338,-603,-2321,10222,2099,-344,1273,4799 } }, { "CINE 650", 0, 0, { 3390,480,-500,-800,3610,340,-550,2336,1192 } }, { "CINE 660", 0, 0, @@ -6357,6 +6384,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 10231,-2769,-1255,-8301,15900,2552,-797,680,7148 } }, { "NIKON D3000", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, + { "NIKON D3100", 0, 0, + { 7911,-2167,-813,-5327,13150,2408,-1288,2483,7968 } }, { "NIKON D300", 0, 0, { 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } }, { "NIKON D3X", 0, 0, @@ -6375,8 +6404,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, { "NIKON D60", 0, 0, { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } }, - { "NIKON D7000", 0, 0, /* DJC */ - { 6629,-2254,-2,-3468,9387,4081,-760,2102,7574 } }, + { "NIKON D7000", 0, 0, + { 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } }, { "NIKON D700", 0, 0, { 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } }, { "NIKON D70", 0, 0, @@ -6413,6 +6442,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7971,-2314,-913,-8451,15762,2894,-1442,1520,7610 } }, { "NIKON COOLPIX P6000", 0, 0, { 9698,-3367,-914,-4706,12584,2368,-837,968,5801 } }, + { "NIKON COOLPIX P7000", 0, 0, + { 11432,-3679,-1111,-3169,11239,2202,-791,1380,4455 } }, { "OLYMPUS C5050", 0, 0, { 10508,-3124,-1273,-6079,14294,1901,-1653,2306,6237 } }, { "OLYMPUS C5060", 0, 0, @@ -6451,8 +6482,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 8785,-2529,-1033,-7639,15624,2112,-1783,2300,7817 } }, { "OLYMPUS E-520", 0, 0xfd2, { 8344,-2322,-1020,-7596,15635,2048,-1748,2269,7287 } }, - { "OLYMPUS E-5", 0, 0, /* DJC */ - { 10033,-4067,-600,-3784,10494,3291,-923,2594,7744 } }, + { "OLYMPUS E-5", 0, 0, + { 11200,-3783,-1325,-4576,12593,2206,-695,1742,7504 } }, { "OLYMPUS E-600", 0, 0xfaf, { 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } }, { "OLYMPUS E-620", 0, 0xfaf, @@ -6501,21 +6532,21 @@ void CLASS adobe_coeff (const char *make, const char *model) { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, { "PENTAX K-x", 0, 0, { 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } }, - { "PENTAX K-r", 0, 0, /* Pentax DNG */ - { 21746,-6684,-1521,-10014,26601,6573,-1920,3062,19415 } }, - { "PENTAX K-5", 0, 0, /* Pentax DNG */ - { 19331,-5842,-2589,-9103,28027,4285,-2216,3884,14767 } }, + { "PENTAX K-r", 0, 0, + { 9895,-3077,-850,-5304,13035,2521,-883,1768,6936 } }, + { "PENTAX K-5", 0, 0, + { 8713,-2833,-743,-4342,11900,2772,-722,1543,6247 } }, { "PENTAX K-7", 0, 0, { 9142,-2947,-678,-8648,16967,1663,-2224,2898,8615 } }, { "PENTAX 645D", 0, 0x3e00, { 10646,-3593,-1158,-3329,11699,1831,-667,2874,6287 } }, - { "Panasonic DMC-FZ8", 0, 0, + { "Panasonic DMC-FZ8", 0, 0xf7f, { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } }, { "Panasonic DMC-FZ18", 0, 0, { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } }, - { "Panasonic DMC-FZ28", 15, 0, + { "Panasonic DMC-FZ28", 15, 0xf96, { 10109,-3488,-993,-5412,12812,2916,-1305,2140,5543 } }, - { "Panasonic DMC-FZ30", 0, 0, + { "Panasonic DMC-FZ30", 0, 0xf94, { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } }, { "Panasonic DMC-FZ3", 143, 0, { 9938,-2780,-890,-4604,12393,2480,-1117,2304,4620 } }, @@ -6525,19 +6556,19 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, { "LEICA V-LUX1", 0, 0, { 7906,-2709,-594,-6231,13351,3220,-1922,2631,6537 } }, - { "Panasonic DMC-L10", 15, 0, + { "Panasonic DMC-L10", 15, 0xf96, { 8025,-1942,-1050,-7920,15904,2100,-2456,3005,7039 } }, - { "Panasonic DMC-L1", 0, 0, + { "Panasonic DMC-L1", 0, 0xf7f, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, - { "LEICA DIGILUX 3", 0, 0, + { "LEICA DIGILUX 3", 0, 0xf7f, { 8054,-1885,-1025,-8349,16367,2040,-2805,3542,7629 } }, { "Panasonic DMC-LC1", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, { "LEICA DIGILUX 2", 0, 0, { 11340,-4069,-1275,-7555,15266,2448,-2960,3426,7685 } }, - { "Panasonic DMC-LX1", 0, 0, + { "Panasonic DMC-LX1", 0, 0xf7f, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, - { "LEICA D-LUX2", 0, 0, + { "LEICA D-LUX2", 0, 0xf7f, { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, { "Panasonic DMC-LX2", 0, 0, { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, @@ -6549,20 +6580,24 @@ void CLASS adobe_coeff (const char *make, const char *model) { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, { "Panasonic DMC-LX5", 143, 0, { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, - { "Panasonic DMC-FZ100", 143, 0, + { "Panasonic DMC-FZ100", 143, 0xfff, { 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } }, - { "Panasonic DMC-FX150", 15, 0, + { "Panasonic DMC-FX150", 15, 0xfff, { 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } }, { "Panasonic DMC-G10", 0, 0, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-G1", 15, 0, + { "Panasonic DMC-G1", 15, 0xf94, { 8199,-2065,-1056,-8124,16156,2033,-2458,3022,7220 } }, - { "Panasonic DMC-G2", 15, 0, + { "Panasonic DMC-G2", 15, 0xf3c, { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } }, - { "Panasonic DMC-GF1", 15, 0, + { "Panasonic DMC-GF1", 15, 0xf92, { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, - { "Panasonic DMC-GH1", 15, 0, + { "Panasonic DMC-GF2", 143, 0xfff, + { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } }, + { "Panasonic DMC-GH1", 15, 0xf92, { 6299,-1466,-532,-6535,13852,2969,-2331,3112,5984 } }, + { "Panasonic DMC-GH2", 15, 0xf95, + { 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } }, { "Phase One H 20", 0, 0, /* DJC */ { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } }, { "Phase One P 2", 0, 0, @@ -6575,10 +6610,10 @@ void CLASS adobe_coeff (const char *make, const char *model) { 7914,1414,-1190,-8777,16582,2280,-2811,4605,5562 } }, { "SAMSUNG EX1", 0, 0x3e00, { 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } }, - { "SAMSUNG NX10", 20, 0xea6, + { "SAMSUNG NX10", 0, 0, { 10332,-3234,-1168,-6111,14639,1520,-1352,2647,8331 } }, { "SAMSUNG WB2000", 0, 0xfff, - { 0 } }, + { 12093,-3557,-1155,-1000,9534,1733,-22,1787,4576 } }, { "SAMSUNG GX-1", 0, 0, { 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } }, { "SAMSUNG S85", 0, 0xffff, /* DJC */ @@ -6605,6 +6640,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } }, { "SONY DSLR-A450", 128, 0xfeb, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, + { "SONY DSLR-A580", 128, 0xfeb, + { 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } }, { "SONY DSLR-A5", 128, 0xfeb, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, { "SONY DSLR-A700", 126, 0, @@ -6614,9 +6651,9 @@ void CLASS adobe_coeff (const char *make, const char *model) { "SONY DSLR-A900", 128, 0, { 5209,-1072,-397,-8845,16120,2919,-1618,1803,8654 } }, // { "SONY NEX-3", 138, 0, /* DJC */ -// { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } }, +// { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } }, // { "SONY NEX-5", 116, 0, /* DJC */ -// { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } }, +// { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } }, { "SONY NEX", 128, 0, /* Adobe's matrix */ { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } }, { "SONY SLT-A33", 128, 0, @@ -7003,7 +7040,7 @@ void CLASS identify() if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */ { height = 3124; width = 4688; filters = 0x16161616; } if (!strcmp(model,"K-r") || !strcmp(model,"K-x")) - { width = 4309; filters = 0x16161616; } +/*RT*/ { width = 4308; filters = 0x16161616; } if (!strcmp(model,"K-5")) { left_margin = 10; width = 4950; filters = 0x16161616; } if (!strcmp(model,"K-7")) @@ -7359,11 +7396,6 @@ canon_cr2: } else if (!strcmp(model,"D1X")) { width -= 4; pixel_aspect = 0.5; - } else if (!strcmp(model,"D7000")) { - width -= 40; - } else if (!strcmp(model,"D3100")) { - width -= 24; - left_margin = 4; } else if (!strcmp(model,"D40X") || !strcmp(model,"D60") || !strcmp(model,"D80") || @@ -7580,9 +7612,6 @@ konica_400z: data_error = -1; } else if (!strcmp(model,"*ist DS")) { height -= 2; - } else if (!strcmp(model,"K-x")) { - width = 4308; - filters = 0x16161616; } else if (!strcmp(model,"Optio S")) { if (fsize == 3178560) { height = 1540; @@ -7624,6 +7653,7 @@ konica_400z: } else if (!strcmp(model,"NX10")) { height -= top_margin = 4; width -= 2 * (left_margin = 8); + load_flags = 32; } else if (!strcmp(model,"EX1")) { order = 0x4949; height = 2760; @@ -8118,11 +8148,10 @@ c603: width = 3279; raw_width = 4928; maximum = 0xfff; - } else if (!strcmp(model,"EX-Z1050")) { + } else if (fsize == 15499264) { /* EX-Z1050 or EX-Z1080 */ height = 2752; width = 3672; raw_width = 5632; - maximum = 0xffc; } else if (!strcmp(model,"EX-P505")) { height = 1928; width = 2568; @@ -8161,7 +8190,7 @@ dng_skip: } #endif if (!cdesc[0]) - strcpy (cdesc, colors == 3 ? "RGB":"GMCY"); + strcpy (cdesc, colors == 3 ? "RGBG":"GMCY"); if (!raw_height) raw_height = height; if (!raw_width ) raw_width = width; if (filters && colors == 3) @@ -8521,7 +8550,7 @@ void CLASS tiff_head (struct tiff_hdr *th, int full) strncpy (th->make, make, 64); strncpy (th->model, model, 64); strcpy (th->soft, "dcraw v"VERSION); - t = gmtime (×tamp); + t = localtime (×tamp); sprintf (th->date, "%04d:%02d:%02d %02d:%02d:%02d", t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec); strncpy (th->artist, artist, 64); @@ -8859,7 +8888,6 @@ void CLASS write_ppm_tiff() printf (_("Raw colors: %d"), colors); if (filters) { printf (_("\nFilter pattern: ")); - if (!cdesc[3]) cdesc[3] = 'G'; for (i=0; i < 16; i++) putchar (cdesc[fc(i >> 1,i & 1)]); } diff --git a/rtengine/dcraw.patch b/rtengine/dcraw.patch index e89ae7e1e..88de4973c 100644 --- a/rtengine/dcraw.patch +++ b/rtengine/dcraw.patch @@ -1,452 +1,481 @@ ---- dcraw.c Thu Nov 11 21:29:28 2010 -+++ dcraw.cc Wed Dec 08 22:47:21 2010 -@@ -1,5 +1,14 @@ -+/*RT*/#include -+/*RT*/#include -+/*RT*/#undef MAX -+/*RT*/#undef MIN -+/*RT*/#define NO_LCMS -+/*RT*/#define NO_JPEG -+/*RT*/#define LOCALTIME -+/*RT*/#define DJGPP -+ - /* - dcraw.c -- Dave Coffin's raw photo decoder - Copyright 1997-2010 by Dave Coffin, dcoffin a cybercom o net - - This is a command-line ANSI C program to convert raw photos from -@@ -94,15 +103,16 @@ - - #define ushort UshORt - typedef unsigned char uchar; - typedef unsigned short ushort; - -+#include "dcraw.h" - /* - All global variables are defined here, and all functions that - access them are prefixed with "CLASS". Note that a thread-safe - C++ class cannot have non-const static local variables. -- */ -+ - FILE *ifp, *ofp; - short order; - const char *ifname; - char *meta_data; - char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; -@@ -126,17 +136,17 @@ - int half_size=0, four_color_rgb=0, document_mode=0, highlight=0; - int verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; - int output_color=1, output_bps=8, output_tiff=0, med_passes=0; - int no_auto_bright=0; - unsigned greybox[4] = { 0, 0, UINT_MAX, UINT_MAX }; --float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; --const double xyz_rgb[3][3] = { /* XYZ from RGB */ -+float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];*/ -+const double xyz_rgb[3][3] = { // XYZ from RGB - { 0.412453, 0.357580, 0.180423 }, - { 0.212671, 0.715160, 0.072169 }, - { 0.019334, 0.119193, 0.950227 } }; - const float d65_white[3] = { 0.950456, 1, 1.088754 }; --int histogram[4][0x2000]; -+/*int histogram[4][0x2000]; - void (*write_thumb)(), (*write_fun)(); - void (*load_raw)(), (*thumb_load_raw)(); - jmp_buf failure; - - struct decode { -@@ -150,12 +160,12 @@ - - struct ph1 { - int format, key_off, black, black_off, split_col, tag_21a; - float tag_210; - } ph1; -- --#define CLASS -+*/ -+#define CLASS DCraw:: - - #define FORC(cnt) for (c=0; c < cnt; c++) - #define FORC3 FORC(3) - #define FORC4 FORC(4) - #define FORCC FORC(colors) -@@ -269,10 +279,11 @@ - fprintf (stderr,_("Unexpected end of file\n")); - else - fprintf (stderr,_("Corrupt data near 0x%llx\n"), (INT64) ftello(ifp)); - } - data_error++; -+ /*RT*/ longjmp (failure, 1); - } - - ushort CLASS sget2 (uchar *s) - { - if (order == 0x4949) /* "II" means little-endian */ -@@ -342,11 +353,11 @@ - - void CLASS read_shorts (ushort *pixel, int count) - { - if (fread (pixel, 2, count, ifp) < count) derror(); - if ((order == 0x4949) == (ntohs(0x1234) == 0x1234)) -- swab (pixel, pixel, count*2); -+ swab ((char*)pixel, (char*)pixel, count*2); - } - - void CLASS canon_600_fixed_wb (int temp) - { - static const short mul[4][5] = { -@@ -534,14 +545,14 @@ - - /* - getbits(-1) initializes the buffer - getbits(n) where 0 <= n <= 25 returns an n-bit integer - */ --unsigned CLASS getbithuff (int nbits, ushort *huff) -+unsigned CLASS getbithuff_t::operator() (int nbits, ushort *huff) - { -- static unsigned bitbuf=0; -- static int vbits=0, reset=0; -+/*RT static unsigned bitbuf=0; */ -+/*RT static int vbits=0, reset=0; */ - unsigned c; - - if (nbits == -1) - return bitbuf = vbits = reset = 0; - if (nbits == 0 || vbits < 0) return 0; -@@ -1284,11 +1295,11 @@ - } - } - free (pixel); - } - --void CLASS jpeg_thumb(); -+/*RT void CLASS jpeg_thumb(); */ - - void CLASS ppm_thumb() - { - char *thumb; - thumb_length = thumb_width*thumb_height*3; -@@ -1559,14 +1570,14 @@ - } - free (pixel); - phase_one_correct(); - } - --unsigned CLASS ph1_bithuff (int nbits, ushort *huff) -+unsigned CLASS ph1_bithuff_t::operator() (int nbits, ushort *huff) - { -- static UINT64 bitbuf=0; -- static int vbits=0; -+/*RT static UINT64 bitbuf=0; */ -+/*RT static int vbits=0; */ - unsigned c; - - if (nbits == -1) - return bitbuf = vbits = 0; - if (nbits == 0) return 0; -@@ -1688,11 +1699,11 @@ - maximum = 0xffff; - raw_color = 1; - } - } - --void CLASS unpacked_load_raw(); -+/*RT void CLASS unpacked_load_raw(); */ - - void CLASS sinar_4shot_load_raw() - { - ushort *pixel; - unsigned shot, row, col, r, c; -@@ -1824,14 +1835,14 @@ - free (data); - if (top_margin) black /= top_margin * width; - maximum = 0x3ff; - } - --unsigned CLASS pana_bits (int nbits) -+unsigned CLASS pana_bits_t::operator() (int nbits) - { -- static uchar buf[0x4000]; -- static int vbits; -+/*RT static uchar buf[0x4000]; */ -+/*RT static int vbits;*/ - int byte; - - if (!nbits) return vbits=0; - if (!vbits) { - fread (buf+load_flags, 1, 0x4000-load_flags, ifp); -@@ -2116,15 +2127,15 @@ - #else - - METHODDEF(boolean) - fill_input_buffer (j_decompress_ptr cinfo) - { -- static uchar jpeg_buffer[4096]; -+/*RT static uchar jpeg_buffer[4096]; */ - size_t nbytes; - - nbytes = fread (jpeg_buffer, 1, 4096, ifp); -- swab (jpeg_buffer, jpeg_buffer, nbytes); -+ swab ((char*)jpeg_buffer, (char*)jpeg_buffer, nbytes); - cinfo->src->next_input_byte = jpeg_buffer; - cinfo->src->bytes_in_buffer = nbytes; - return TRUE; - } - -@@ -2392,13 +2403,13 @@ - for (col=0; col < width; col++) - read_shorts (image[row*width+col], colors); - maximum = (1 << (thumb_misc & 31)) - 1; - } - --void CLASS sony_decrypt (unsigned *data, int len, int start, int key) -+void CLASS sony_decrypt_t::operator()(unsigned *data, int len, int start, int key) - { -- static unsigned pad[128], p; -+/*RT static unsigned pad[128], p;*/ - - if (start) { - for (p=0; p < 4; p++) - pad[p] = key = key * 48828125 + 1; - pad[3] = pad[3] << 1 | (pad[0]^pad[2]) >> 31; -@@ -2641,11 +2652,11 @@ - - /* RESTRICTED code starts here */ - - void CLASS foveon_decoder (unsigned size, unsigned code) - { -- static unsigned huff[1024]; -+/*RT static unsigned huff[1024];*/ - struct decode *cur; - int i, len; - - if (!code) { - for (i=0; i < size; i++) -@@ -4325,11 +4336,11 @@ - if (tag == tlen) thumb_length = get4(); - fseek (ifp, save, SEEK_SET); - } - } - --int CLASS parse_tiff_ifd (int base); -+/*RT int CLASS parse_tiff_ifd (int base);*/ - - void CLASS parse_makernote (int base, int uptag) - { - static const uchar xlat[2][256] = { - { 0xc1,0xbf,0x6d,0x0d,0x59,0xc5,0x13,0x9d,0x83,0x61,0x6b,0x4f,0xc7,0x7f,0x3d,0x3d, -@@ -4450,11 +4461,11 @@ - cam_mul[0] = getreal(type); - cam_mul[2] = getreal(type); - } - if (tag == 0xd && type == 7 && get2() == 0xaaaa) { - fread (buf97, 1, sizeof buf97, ifp); -- i = (uchar *) memmem (buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; -+ i = (uchar *) memmem ((char*) buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; - if (i < 70 && buf97[i] < 3) - flip = "065"[buf97[i]]-'0'; - } - if (tag == 0x10 && type == 4) - unique_id = get4(); -@@ -4819,12 +4830,12 @@ - if (tag == 64020) height = (getint(type)+1) & -2; - fseek (ifp, save, SEEK_SET); - } - } - --void CLASS parse_minolta (int base); --int CLASS parse_tiff (int base); -+/*RT void CLASS parse_minolta (int base); */ -+/*RT int CLASS parse_tiff (int base);*/ - - int CLASS parse_tiff_ifd (int base) - { - unsigned entries, tag, type, len, plen=16, save; - int ifd, use_cm=0, cfa, i, j, c, ima_len=0; -@@ -4834,11 +4845,11 @@ - double cc[4][4], cm[4][3], cam_xyz[4][3], num; - double ab[]={ 1,1,1,1 }, asn[] = { 0,0,0,0 }, xyz[] = { 1,1,1 }; - unsigned sony_curve[] = { 0,0,0,0,0,4095 }; - unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; - struct jhead jh; -- FILE *sfp; -+/*RT*/ IMFILE *sfp; - - if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0]) - return 1; - ifd = tiff_nifds++; - for (j=0; j < 4; j++) -@@ -5252,16 +5263,17 @@ - if (sony_length && (buf = (unsigned *) malloc(sony_length))) { - fseek (ifp, sony_offset, SEEK_SET); - fread (buf, sony_length, 1, ifp); - sony_decrypt (buf, sony_length/4, 1, sony_key); - sfp = ifp; -- if ((ifp = tmpfile())) { -- fwrite (buf, sony_length, 1, ifp); -- fseek (ifp, 0, SEEK_SET); -+/*RT*/ ifp = fopen (buf, sony_length); -+// if ((ifp = tmpfile())) { -+// fwrite (buf, sony_length, 1, ifp); -+// fseek (ifp, 0, SEEK_SET); - parse_tiff_ifd (-sony_offset); -- fclose (ifp); -- } -+// fclose (ifp); -+// } - ifp = sfp; - free (buf); - } - for (i=0; i < colors; i++) - FORCC cc[i][c] *= ab[i]; -@@ -5282,10 +5294,12 @@ - - int CLASS parse_tiff (int base) - { - int doff; - -+ /*RT*/ if (exif_base == -1) exif_base = base; -+ - fseek (ifp, base, SEEK_SET); - order = get2(); - if (order != 0x4949 && order != 0x4d4d) return 0; - get2(); - while ((doff = get4())) { -@@ -5456,11 +5470,11 @@ - */ - void CLASS parse_external_jpeg() - { - const char *file, *ext; - char *jname, *jfile, *jext; -- FILE *save=ifp; -+/*RT*/ IMFILE *save=ifp; - - ext = strrchr (ifname, '.'); - file = strrchr (ifname, '/'); - if (!file) file = strrchr (ifname, '\\'); - if (!file) file = ifname-1; -@@ -5484,11 +5498,12 @@ - break; - } - *jext = '0'; - } - if (strcmp (jname, ifname)) { -- if ((ifp = fopen (jname, "rb"))) { -+/*RT*/ if ((ifp = fopen (jname))) { -+// if ((ifp = fopen (jname, "rb"))) { - if (verbose) - fprintf (stderr,_("Reading metadata from %s ...\n"), jname); - parse_tiff (12); - thumb_offset = 0; - is_raw = 1; -@@ -5822,11 +5837,15 @@ - raw_width = get2(); - } - order = get2(); - hlen = get4(); - if (get4() == 0x48454150) /* "HEAP" */ -- parse_ciff (save+hlen, len-hlen); -+/*RT*/ { -+/*RT*/ ciff_base = save+hlen; -+/*RT*/ ciff_len = len-hlen; -+ parse_ciff (save+hlen, len-hlen); -+/*RT*/ } - if (parse_tiff (save+6)) apply_tiff(); - fseek (ifp, save+len, SEEK_SET); - } - return 1; - } -@@ -6843,17 +6862,25 @@ - hlen = get4(); - fseek (ifp, 0, SEEK_SET); - fread (head, 1, 32, ifp); - fseek (ifp, 0, SEEK_END); - flen = fsize = ftell(ifp); -+ -+ /*RT*/ if (fsize<100000) { -+ is_raw = 0; -+ return; -+ } -+ - if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || - (cp = (char *) memmem (head, 32, "IIII", 4))) { - parse_phase_one (cp-head); - if (cp-head && parse_tiff(0)) apply_tiff(); - } else if (order == 0x4949 || order == 0x4d4d) { - if (!memcmp (head+6,"HEAPCCDR",8)) { - data_offset = hlen; -+/*RT*/ ciff_base = hlen; -+/*RT*/ ciff_len = fsize - hlen; - parse_ciff (hlen, flen - hlen); - } else if (parse_tiff(0)) apply_tiff(); - } else if (!memcmp (head,"\xff\xd8\xff\xe1",4) && - !memcmp (head+6,"Exif",4)) { - fseek (ifp, 4, SEEK_SET); -@@ -7329,10 +7356,15 @@ - cam_mul[0] *= 256/527.0; - cam_mul[2] *= 256/317.0; - } else if (!strcmp(model,"D1X")) { - width -= 4; - pixel_aspect = 0.5; -+ } else if (!strcmp(model,"D7000")) { -+ width -= 40; -+ } else if (!strcmp(model,"D3100")) { -+ width -= 24; -+ left_margin = 4; - } else if (!strcmp(model,"D40X") || - !strcmp(model,"D60") || - !strcmp(model,"D80") || - !strcmp(model,"D3000")) { - height -= 3; -@@ -7546,11 +7578,11 @@ - } else if (!strcmp(model,"*ist D")) { - data_error = -1; - } else if (!strcmp(model,"*ist DS")) { - height -= 2; - } else if (!strcmp(model,"K-x")) { -- width = 4309; -+ width = 4308; - filters = 0x16161616; - } else if (!strcmp(model,"Optio S")) { - if (fsize == 3178560) { - height = 1540; - width = 2064; -@@ -8558,17 +8590,17 @@ - for (col=0; col < width; col++, soff += cstep) - if (output_bps == 8) - FORCC ppm [col*colors+c] = curve[image[soff][c]] >> 8; - else FORCC ppm2[col*colors+c] = curve[image[soff][c]]; - if (output_bps == 16 && !output_tiff && htons(0x55aa) != 0x55aa) -- swab (ppm2, ppm2, width*colors*2); -+ swab ((char*)ppm2, (char*)ppm2, width*colors*2); - fwrite (ppm, colors*output_bps/8, width, ofp); - } - free (ppm); - } - --int CLASS main (int argc, const char **argv) -+/*int CLASS main (int argc, const char **argv) - { - int arg, status=0; - int timestamp_only=0, thumbnail_only=0, identify_only=0; - int user_qual=-1, user_black=-1, user_sat=-1, user_flip=-1; - int use_fuji_rotate=1, write_to_stdout=0, quality, i, c; -@@ -8677,11 +8709,11 @@ - case 'z': timestamp_only = 1; break; - case 'e': thumbnail_only = 1; break; - case 'i': identify_only = 1; break; - case 'c': write_to_stdout = 1; break; - case 'v': verbose = 1; break; -- case 'h': half_size = 1; /* "-h" implies "-f" */ -+ case 'h': half_size = 1; // "-h" implies "-f" - case 'f': four_color_rgb = 1; break; - case 'A': FORC4 greybox[c] = atoi(argv[arg++]); - case 'a': use_auto_wb = 1; break; - case 'w': use_camera_wb = 1; break; - case 'M': use_camera_matrix = (opm == '+'); break; -@@ -8941,5 +8973,6 @@ - else shot_select = 0; - } - } - return status; - } -+*/ +--- dcraw.c Wed Feb 02 23:18:25 2011 ++++ dcraw.cc Thu Feb 03 00:52:38 2011 +@@ -1,5 +1,14 @@ ++/*RT*/#include ++/*RT*/#include ++/*RT*/#undef MAX ++/*RT*/#undef MIN ++/*RT*/#define NO_LCMS ++/*RT*/#define NO_JPEG ++/*RT*/#define LOCALTIME ++/*RT*/#define DJGPP ++ + /* + dcraw.c -- Dave Coffin's raw photo decoder + Copyright 1997-2010 by Dave Coffin, dcoffin a cybercom o net + + This is a command-line ANSI C program to convert raw photos from +@@ -94,15 +103,16 @@ + + #define ushort UshORt + typedef unsigned char uchar; + typedef unsigned short ushort; + ++#include "dcraw.h" + /* + All global variables are defined here, and all functions that + access them are prefixed with "CLASS". Note that a thread-safe + C++ class cannot have non-const static local variables. +- */ ++ + FILE *ifp, *ofp; + short order; + const char *ifname; + char *meta_data; + char cdesc[5], desc[512], make[64], model[64], model2[64], artist[64]; +@@ -126,17 +136,17 @@ + int half_size=0, four_color_rgb=0, document_mode=0, highlight=0; + int verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; + int output_color=1, output_bps=8, output_tiff=0, med_passes=0; + int no_auto_bright=0; + unsigned greybox[4] = { 0, 0, UINT_MAX, UINT_MAX }; +-float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; +-const double xyz_rgb[3][3] = { /* XYZ from RGB */ ++float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];*/ ++const double xyz_rgb[3][3] = { // XYZ from RGB + { 0.412453, 0.357580, 0.180423 }, + { 0.212671, 0.715160, 0.072169 }, + { 0.019334, 0.119193, 0.950227 } }; + const float d65_white[3] = { 0.950456, 1, 1.088754 }; +-int histogram[4][0x2000]; ++/*int histogram[4][0x2000]; + void (*write_thumb)(), (*write_fun)(); + void (*load_raw)(), (*thumb_load_raw)(); + jmp_buf failure; + + struct decode { +@@ -150,12 +160,12 @@ + + struct ph1 { + int format, key_off, black, black_off, split_col, tag_21a; + float tag_210; + } ph1; +- +-#define CLASS ++*/ ++#define CLASS DCraw:: + + #define FORC(cnt) for (c=0; c < cnt; c++) + #define FORC3 FORC(3) + #define FORC4 FORC(4) + #define FORCC FORC(colors) +@@ -269,10 +279,11 @@ + fprintf (stderr,_("Unexpected end of file\n")); + else + fprintf (stderr,_("Corrupt data near 0x%llx\n"), (INT64) ftello(ifp)); + } + data_error++; ++ /*RT*/ longjmp (failure, 1); + } + + ushort CLASS sget2 (uchar *s) + { + if (order == 0x4949) /* "II" means little-endian */ +@@ -342,11 +353,11 @@ + + void CLASS read_shorts (ushort *pixel, int count) + { + if (fread (pixel, 2, count, ifp) < count) derror(); + if ((order == 0x4949) == (ntohs(0x1234) == 0x1234)) +- swab (pixel, pixel, count*2); ++ swab ((char*)pixel, (char*)pixel, count*2); + } + + void CLASS canon_600_fixed_wb (int temp) + { + static const short mul[4][5] = { +@@ -534,14 +545,14 @@ + + /* + getbits(-1) initializes the buffer + getbits(n) where 0 <= n <= 25 returns an n-bit integer + */ +-unsigned CLASS getbithuff (int nbits, ushort *huff) ++unsigned CLASS getbithuff_t::operator() (int nbits, ushort *huff) + { +- static unsigned bitbuf=0; +- static int vbits=0, reset=0; ++/*RT static unsigned bitbuf=0; */ ++/*RT static int vbits=0, reset=0; */ + unsigned c; + + if (nbits == -1) + return bitbuf = vbits = reset = 0; + if (nbits == 0 || vbits < 0) return 0; +@@ -1284,11 +1295,11 @@ + } + } + free (pixel); + } + +-void CLASS jpeg_thumb(); ++/*RT void CLASS jpeg_thumb(); */ + + void CLASS ppm_thumb() + { + char *thumb; + thumb_length = thumb_width*thumb_height*3; +@@ -1560,14 +1571,14 @@ + } + free (pixel); + phase_one_correct(); + } + +-unsigned CLASS ph1_bithuff (int nbits, ushort *huff) ++unsigned CLASS ph1_bithuff_t::operator() (int nbits, ushort *huff) + { +- static UINT64 bitbuf=0; +- static int vbits=0; ++/*RT static UINT64 bitbuf=0; */ ++/*RT static int vbits=0; */ + unsigned c; + + if (nbits == -1) + return bitbuf = vbits = 0; + if (nbits == 0) return 0; +@@ -1689,11 +1700,11 @@ + maximum = 0xffff; + raw_color = 1; + } + } + +-void CLASS unpacked_load_raw(); ++/*RT void CLASS unpacked_load_raw(); */ + + void CLASS sinar_4shot_load_raw() + { + ushort *pixel; + unsigned shot, row, col, r, c; +@@ -1830,14 +1841,14 @@ + free (data); + if (top_margin) black /= top_margin * width; + maximum = 0x3ff; + } + +-unsigned CLASS pana_bits (int nbits) ++unsigned CLASS pana_bits_t::operator() (int nbits) + { +- static uchar buf[0x4000]; +- static int vbits; ++/*RT static uchar buf[0x4000]; */ ++/*RT static int vbits;*/ + int byte; + + if (!nbits) return vbits=0; + if (!vbits) { + fread (buf+load_flags, 1, 0x4000-load_flags, ifp); +@@ -2122,15 +2133,15 @@ + #else + + METHODDEF(boolean) + fill_input_buffer (j_decompress_ptr cinfo) + { +- static uchar jpeg_buffer[4096]; ++/*RT static uchar jpeg_buffer[4096]; */ + size_t nbytes; + + nbytes = fread (jpeg_buffer, 1, 4096, ifp); +- swab (jpeg_buffer, jpeg_buffer, nbytes); ++ swab ((char*)jpeg_buffer, (char*)jpeg_buffer, nbytes); + cinfo->src->next_input_byte = jpeg_buffer; + cinfo->src->bytes_in_buffer = nbytes; + return TRUE; + } + +@@ -2398,13 +2409,13 @@ + for (col=0; col < width; col++) + read_shorts (image[row*width+col], colors); + maximum = (1 << (thumb_misc & 31)) - 1; + } + +-void CLASS sony_decrypt (unsigned *data, int len, int start, int key) ++void CLASS sony_decrypt_t::operator()(unsigned *data, int len, int start, int key) + { +- static unsigned pad[128], p; ++/*RT static unsigned pad[128], p;*/ + + if (start) { + for (p=0; p < 4; p++) + pad[p] = key = key * 48828125 + 1; + pad[3] = pad[3] << 1 | (pad[0]^pad[2]) >> 31; +@@ -2647,11 +2658,11 @@ + + /* RESTRICTED code starts here */ + + void CLASS foveon_decoder (unsigned size, unsigned code) + { +- static unsigned huff[1024]; ++/*RT static unsigned huff[1024];*/ + struct decode *cur; + int i, len; + + if (!code) { + for (i=0; i < size; i++) +@@ -4331,11 +4342,11 @@ + if (tag == tlen) thumb_length = get4(); + fseek (ifp, save, SEEK_SET); + } + } + +-int CLASS parse_tiff_ifd (int base); ++/*RT int CLASS parse_tiff_ifd (int base);*/ + + void CLASS parse_makernote (int base, int uptag) + { + static const uchar xlat[2][256] = { + { 0xc1,0xbf,0x6d,0x0d,0x59,0xc5,0x13,0x9d,0x83,0x61,0x6b,0x4f,0xc7,0x7f,0x3d,0x3d, +@@ -4459,11 +4470,11 @@ + cam_mul[0] = getreal(type); + cam_mul[2] = getreal(type); + } + if (tag == 0xd && type == 7 && get2() == 0xaaaa) { + fread (buf97, 1, sizeof buf97, ifp); +- i = (uchar *) memmem (buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; ++ i = (uchar *) memmem ((char*) buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; + if (i < 70 && buf97[i] < 3) + flip = "065"[buf97[i]]-'0'; + } + if (tag == 0x10 && type == 4) + unique_id = get4(); +@@ -4842,12 +4853,12 @@ + if (tag == 64020) height = (getint(type)+1) & -2; + fseek (ifp, save, SEEK_SET); + } + } + +-void CLASS parse_minolta (int base); +-int CLASS parse_tiff (int base); ++/*RT void CLASS parse_minolta (int base); */ ++/*RT int CLASS parse_tiff (int base);*/ + + int CLASS parse_tiff_ifd (int base) + { + unsigned entries, tag, type, len, plen=16, save; + int ifd, use_cm=0, cfa, i, j, c, ima_len=0; +@@ -4857,11 +4868,11 @@ + double cc[4][4], cm[4][3], cam_xyz[4][3], num; + double ab[]={ 1,1,1,1 }, asn[] = { 0,0,0,0 }, xyz[] = { 1,1,1 }; + unsigned sony_curve[] = { 0,0,0,0,0,4095 }; + unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; + struct jhead jh; +- FILE *sfp; ++/*RT*/ IMFILE *sfp; + + if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0]) + return 1; + ifd = tiff_nifds++; + for (j=0; j < 4; j++) +@@ -4874,10 +4885,13 @@ + switch (tag) { + case 5: width = get2(); break; + case 6: height = get2(); break; + case 7: width += get2(); break; + case 9: filters = get2(); break; ++ case 14: case 15: case 16: ++ maximum = get2(); ++ break; + case 17: case 18: + if (type == 3 && len == 1) + cam_mul[(tag-17)*2] = get2() / 256.0; + break; + case 23: +@@ -5272,16 +5286,17 @@ + if (sony_length && (buf = (unsigned *) malloc(sony_length))) { + fseek (ifp, sony_offset, SEEK_SET); + fread (buf, sony_length, 1, ifp); + sony_decrypt (buf, sony_length/4, 1, sony_key); + sfp = ifp; +- if ((ifp = tmpfile())) { +- fwrite (buf, sony_length, 1, ifp); +- fseek (ifp, 0, SEEK_SET); ++/*RT*/ ifp = fopen (buf, sony_length); ++// if ((ifp = tmpfile())) { ++// fwrite (buf, sony_length, 1, ifp); ++// fseek (ifp, 0, SEEK_SET); + parse_tiff_ifd (-sony_offset); +- fclose (ifp); +- } ++// fclose (ifp); ++// } + ifp = sfp; + free (buf); + } + for (i=0; i < colors; i++) + FORCC cc[i][c] *= ab[i]; +@@ -5302,10 +5317,12 @@ + + int CLASS parse_tiff (int base) + { + int doff; + ++ /*RT*/ if (exif_base == -1) exif_base = base; ++ + fseek (ifp, base, SEEK_SET); + order = get2(); + if (order != 0x4949 && order != 0x4d4d) return 0; + get2(); + while ((doff = get4())) { +@@ -5476,11 +5493,11 @@ + */ + void CLASS parse_external_jpeg() + { + const char *file, *ext; + char *jname, *jfile, *jext; +- FILE *save=ifp; ++/*RT*/ IMFILE *save=ifp; + + ext = strrchr (ifname, '.'); + file = strrchr (ifname, '/'); + if (!file) file = strrchr (ifname, '\\'); + if (!file) file = ifname-1; +@@ -5504,11 +5521,12 @@ + break; + } + *jext = '0'; + } + if (strcmp (jname, ifname)) { +- if ((ifp = fopen (jname, "rb"))) { ++/*RT*/ if ((ifp = fopen (jname))) { ++// if ((ifp = fopen (jname, "rb"))) { + if (verbose) + fprintf (stderr,_("Reading metadata from %s ...\n"), jname); + parse_tiff (12); + thumb_offset = 0; + is_raw = 1; +@@ -5842,11 +5860,15 @@ + raw_width = get2(); + } + order = get2(); + hlen = get4(); + if (get4() == 0x48454150) /* "HEAP" */ +- parse_ciff (save+hlen, len-hlen); ++/*RT*/ { ++/*RT*/ ciff_base = save+hlen; ++/*RT*/ ciff_len = len-hlen; ++ parse_ciff (save+hlen, len-hlen); ++/*RT*/ } + if (parse_tiff (save+6)) apply_tiff(); + fseek (ifp, save+len, SEEK_SET); + } + return 1; + } +@@ -6626,14 +6648,14 @@ + { 5775,-805,-359,-8574,16295,2391,-1943,2341,7249 } }, + { "SONY DSLR-A850", 128, 0, + { 5413,-1162,-365,-5665,13098,2866,-608,1179,8440 } }, + { "SONY DSLR-A900", 128, 0, + { 5209,-1072,-397,-8845,16120,2919,-1618,1803,8654 } }, +- { "SONY NEX-3", 138, 0, /* DJC */ +- { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } }, +- { "SONY NEX-5", 116, 0, /* DJC */ +- { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } }, ++// { "SONY NEX-3", 138, 0, /* DJC */ ++// { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } }, ++// { "SONY NEX-5", 116, 0, /* DJC */ ++// { 6807,-1350,-342,-4216,11649,2567,-1089,2001,6420 } }, + { "SONY NEX", 128, 0, /* Adobe's matrix */ + { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } }, + { "SONY SLT-A33", 128, 0, + { 6069,-1221,-366,-5221,12779,2734,-1024,2066,6834 } }, + { "SONY SLT-A55", 128, 0, +@@ -6877,17 +6899,25 @@ + hlen = get4(); + fseek (ifp, 0, SEEK_SET); + fread (head, 1, 32, ifp); + fseek (ifp, 0, SEEK_END); + flen = fsize = ftell(ifp); ++ ++ /*RT*/ if (fsize<100000) { ++ is_raw = 0; ++ return; ++ } ++ + if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || + (cp = (char *) memmem (head, 32, "IIII", 4))) { + parse_phase_one (cp-head); + if (cp-head && parse_tiff(0)) apply_tiff(); + } else if (order == 0x4949 || order == 0x4d4d) { + if (!memcmp (head+6,"HEAPCCDR",8)) { + data_offset = hlen; ++/*RT*/ ciff_base = hlen; ++/*RT*/ ciff_len = fsize - hlen; + parse_ciff (hlen, flen - hlen); + } else if (parse_tiff(0)) apply_tiff(); + } else if (!memcmp (head,"\xff\xd8\xff\xe1",4) && + !memcmp (head+6,"Exif",4)) { + fseek (ifp, 4, SEEK_SET); +@@ -6925,10 +6955,11 @@ + parse_fuji (i); + } + fseek (ifp, 100, SEEK_SET); + parse_tiff (data_offset = get4()); + parse_tiff (thumb_offset+12); ++/*RT*/ exif_base = thumb_offset+12; + apply_tiff(); + } else if (!memcmp (head,"RIFF",4)) { + fseek (ifp, 0, SEEK_SET); + parse_riff(); + } else if (!memcmp (head,"\0\001\0\001\0@",6)) { +@@ -7007,11 +7038,11 @@ + if (height == 2624 && width == 3936) /* Pentax K10D and Samsung GX10 */ + { height = 2616; width = 3896; } + if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */ + { height = 3124; width = 4688; filters = 0x16161616; } + if (!strcmp(model,"K-r") || !strcmp(model,"K-x")) +- { width = 4309; filters = 0x16161616; } ++/*RT*/ { width = 4308; filters = 0x16161616; } + if (!strcmp(model,"K-5")) + { left_margin = 10; width = 4950; filters = 0x16161616; } + if (!strcmp(model,"K-7")) + { height = 3122; width = 4684; filters = 0x16161616; top_margin = 2; } + if (!strcmp(model,"645D")) +@@ -8589,17 +8620,17 @@ + for (col=0; col < width; col++, soff += cstep) + if (output_bps == 8) + FORCC ppm [col*colors+c] = curve[image[soff][c]] >> 8; + else FORCC ppm2[col*colors+c] = curve[image[soff][c]]; + if (output_bps == 16 && !output_tiff && htons(0x55aa) != 0x55aa) +- swab (ppm2, ppm2, width*colors*2); ++ swab ((char*)ppm2, (char*)ppm2, width*colors*2); + fwrite (ppm, colors*output_bps/8, width, ofp); + } + free (ppm); + } + +-int CLASS main (int argc, const char **argv) ++/*int CLASS main (int argc, const char **argv) + { + int arg, status=0; + int timestamp_only=0, thumbnail_only=0, identify_only=0; + int user_qual=-1, user_black=-1, user_sat=-1, user_flip=-1; + int use_fuji_rotate=1, write_to_stdout=0, quality, i, c; +@@ -8708,11 +8739,11 @@ + case 'z': timestamp_only = 1; break; + case 'e': thumbnail_only = 1; break; + case 'i': identify_only = 1; break; + case 'c': write_to_stdout = 1; break; + case 'v': verbose = 1; break; +- case 'h': half_size = 1; /* "-h" implies "-f" */ ++ case 'h': half_size = 1; // "-h" implies "-f" + case 'f': four_color_rgb = 1; break; + case 'A': FORC4 greybox[c] = atoi(argv[arg++]); + case 'a': use_auto_wb = 1; break; + case 'w': use_camera_wb = 1; break; + case 'M': use_camera_matrix = (opm == '+'); break; +@@ -8971,5 +9002,6 @@ + else shot_select = 0; + } + } + return status; + } ++*/