Update to dcraw 9.17 (see issue 1627)
This commit is contained in:
parent
4e32b0e015
commit
6c7490afe6
218
rtengine/dcraw.c
218
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.452 $
|
||||
$Date: 2012/07/23 04:28:00 $
|
||||
$Revision: 1.454 $
|
||||
$Date: 2012/12/23 19:25:36 $
|
||||
*/
|
||||
|
||||
#define DCRAW_VERSION "9.16"
|
||||
#define DCRAW_VERSION "9.17"
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
@ -959,19 +959,21 @@ void CLASS canon_sraw_load_raw()
|
||||
else ip[col][c] = (ip[col-1][c] + ip[col+1][c] + 1) >> 1;
|
||||
}
|
||||
for ( ; rp < ip[0]; rp+=4) {
|
||||
if (unique_id < 0x80000218) {
|
||||
rp[0] -= 512;
|
||||
goto next;
|
||||
} else if (unique_id == 0x80000285) {
|
||||
next: pix[0] = rp[0] + rp[2];
|
||||
pix[2] = rp[0] + rp[1];
|
||||
pix[1] = rp[0] + ((-778*rp[1] - (rp[2] << 11)) >> 12);
|
||||
} else {
|
||||
if (unique_id == 0x80000218 ||
|
||||
unique_id == 0x80000250 ||
|
||||
unique_id == 0x80000261 ||
|
||||
unique_id == 0x80000281 ||
|
||||
unique_id == 0x80000287) {
|
||||
rp[1] = (rp[1] << 2) + hue;
|
||||
rp[2] = (rp[2] << 2) + hue;
|
||||
pix[0] = rp[0] + (( 50*rp[1] + 22929*rp[2]) >> 14);
|
||||
pix[1] = rp[0] + ((-5640*rp[1] - 11751*rp[2]) >> 14);
|
||||
pix[2] = rp[0] + ((29040*rp[1] - 101*rp[2]) >> 14);
|
||||
} else {
|
||||
if (unique_id < 0x80000218) rp[0] -= 512;
|
||||
pix[0] = rp[0] + rp[2];
|
||||
pix[2] = rp[0] + rp[1];
|
||||
pix[1] = rp[0] + ((-778*rp[1] - (rp[2] << 11)) >> 12);
|
||||
}
|
||||
FORC3 rp[c] = CLIP(pix[c] * sraw_mul[c] >> 10);
|
||||
}
|
||||
@ -1139,23 +1141,6 @@ void CLASS nikon_load_raw()
|
||||
free (huff);
|
||||
}
|
||||
|
||||
/*
|
||||
Figure out if a NEF file is compressed. These fancy heuristics
|
||||
are only needed for the D100, thanks to a bug in some cameras
|
||||
that tags all images as "compressed".
|
||||
*/
|
||||
int CLASS nikon_is_compressed()
|
||||
{
|
||||
uchar test[256];
|
||||
int i;
|
||||
|
||||
fseek (ifp, data_offset, SEEK_SET);
|
||||
fread (test, 1, 256, ifp);
|
||||
for (i=15; i < 256; i+=16)
|
||||
if (test[i]) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Returns 1 for a Coolpix 995, 0 for anything else.
|
||||
*/
|
||||
@ -1597,9 +1582,7 @@ void CLASS hasselblad_load_raw()
|
||||
if ((diff & (1 << (len[c]-1))) == 0)
|
||||
diff -= (1 << len[c]) - 1;
|
||||
if (diff == 65535) diff = -32768;
|
||||
pred[c] += diff;
|
||||
if (row >= 0 && (unsigned)(col+c) < width)
|
||||
RAW(row,col+c) = pred[c];
|
||||
RAW(row,col+c) = pred[c] += diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1787,8 +1770,7 @@ void CLASS panasonic_load_raw()
|
||||
}
|
||||
} else if ((nonz[i & 1] = pana_bits(8)) || i > 11)
|
||||
pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4);
|
||||
if (col < width)
|
||||
if ((RAW(row,col) = pred[col & 1]) > 4098) derror();
|
||||
if ((RAW(row,col) = pred[col & 1]) > 4098 && col < width) derror();
|
||||
}
|
||||
}
|
||||
|
||||
@ -2460,7 +2442,7 @@ void CLASS sony_arw2_load_raw()
|
||||
bit += 7;
|
||||
}
|
||||
for (i=0; i < 16; i++, col+=2)
|
||||
if (col < width) RAW(row,col) = curve[pix[i] << 1] >> 2;
|
||||
RAW(row,col) = curve[pix[i] << 1] >> 2;
|
||||
col -= col & 1 ? 1:31;
|
||||
}
|
||||
}
|
||||
@ -3392,11 +3374,8 @@ void CLASS crop_masked_pixels()
|
||||
mask[0][3] = -2;
|
||||
goto sides;
|
||||
}
|
||||
if (load_raw == &CLASS sony_load_raw) {
|
||||
mask[0][3] = 9;
|
||||
goto sides;
|
||||
}
|
||||
if (load_raw == &CLASS canon_600_load_raw ||
|
||||
load_raw == &CLASS sony_load_raw ||
|
||||
(load_raw == &CLASS eight_bit_load_raw && strncmp(model,"DC2",3)) ||
|
||||
load_raw == &CLASS kodak_262_load_raw ||
|
||||
(load_raw == &CLASS packed_load_raw && (load_flags & 32))) {
|
||||
@ -4788,7 +4767,7 @@ get2_256:
|
||||
fseek (ifp, i, SEEK_CUR);
|
||||
get2_rggb:
|
||||
FORC4 cam_mul[c ^ (c >> 1)] = get2();
|
||||
i = len == 1312 ? 112:22;
|
||||
i = len >> 3 == 164 ? 112:22;
|
||||
fseek (ifp, i, SEEK_CUR);
|
||||
FORC4 sraw_mul[c ^ (c >> 1)] = get2();
|
||||
}
|
||||
@ -5570,6 +5549,14 @@ void CLASS apply_tiff()
|
||||
case 262:
|
||||
load_raw = &CLASS kodak_262_load_raw; break;
|
||||
case 34713:
|
||||
if ((raw_width+9)/10*16*raw_height == tiff_ifd[raw].bytes) {
|
||||
load_raw = &CLASS packed_load_raw;
|
||||
load_flags = 1;
|
||||
} else if (raw_width*raw_height*2 == tiff_ifd[raw].bytes) {
|
||||
load_raw = &CLASS unpacked_load_raw;
|
||||
load_flags = 4;
|
||||
order = 0x4d4d;
|
||||
} else
|
||||
load_raw = &CLASS nikon_load_raw; break;
|
||||
case 34892:
|
||||
load_raw = &CLASS lossy_dng_load_raw; break;
|
||||
@ -5586,7 +5573,8 @@ void CLASS apply_tiff()
|
||||
}
|
||||
if (!dng_version)
|
||||
if ( (tiff_samples == 3 && tiff_ifd[raw].bytes &&
|
||||
tiff_bps != 14 && tiff_bps != 2048 && tiff_compress != 32770)
|
||||
tiff_bps != 14 && tiff_bps != 2048 &&
|
||||
tiff_compress != 32769 && tiff_compress != 32770)
|
||||
|| (tiff_bps == 8 && !strstr(make,"KODAK") && !strstr(make,"Kodak") &&
|
||||
!strstr(model2,"DEBUG RAW")))
|
||||
is_raw = 0;
|
||||
@ -6004,7 +5992,7 @@ void CLASS parse_fuji (int offset)
|
||||
} else if (tag == 0xc000) {
|
||||
c = order;
|
||||
order = 0x4949;
|
||||
width = get4();
|
||||
if ((width = get4()) > 10000) width = get4();
|
||||
height = get4();
|
||||
order = c;
|
||||
}
|
||||
@ -6305,6 +6293,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 4716,603,-830,-7798,15474,2480,-1496,1937,6651 } },
|
||||
{ "Canon EOS 5D", 0, 0xe6c,
|
||||
{ 6347,-479,-972,-8297,15954,2480,-1968,2131,7649 } },
|
||||
{ "Canon EOS 6D", 0, 0x3c82,
|
||||
{ 7034,-804,-1014,-4420,12564,2058,-851,1994,5758 } },
|
||||
{ "Canon EOS 7D", 0, 0x3510,
|
||||
{ 6844,-996,-856,-3876,11761,2396,-593,1772,6198 } },
|
||||
{ "Canon EOS 10D", 0, 0xfa0,
|
||||
@ -6341,6 +6331,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } },
|
||||
{ "Canon EOS 1100D", 0, 0x3510,
|
||||
{ 6444,-904,-893,-4563,12308,2535,-903,2016,6728 } },
|
||||
{ "Canon EOS M", 0, 0,
|
||||
{ 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } },
|
||||
{ "Canon EOS-1Ds Mark III", 0, 0x3bb0,
|
||||
{ 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } },
|
||||
{ "Canon EOS-1Ds Mark II", 0, 0xe80,
|
||||
@ -6373,6 +6365,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } },
|
||||
{ "Canon PowerShot G12", 0, 0,
|
||||
{ 13244,-5501,-1248,-1508,9858,1935,-270,1083,4366 } },
|
||||
{ "Canon PowerShot G15", 0, 0,
|
||||
{ 7474,-2301,-567,-4056,11456,2975,-222,716,4181 } },
|
||||
{ "Canon PowerShot G1 X", 0, 0,
|
||||
{ 7378,-1255,-1043,-4088,12251,2048,-876,1946,5805 } },
|
||||
{ "Canon PowerShot G1", 0, 0,
|
||||
@ -6411,6 +6405,12 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 13440,-5896,-1279,-1236,9598,1931,-180,1001,4651 } },
|
||||
{ "Canon PowerShot S100", 0, 0,
|
||||
{ 7968,-2565,-636,-2873,10697,2513,180,667,4211 } },
|
||||
{ "Canon PowerShot S110", 0, 0,
|
||||
{ 8039,-2643,-654,-3783,11230,2930,-206,690,4194 } },
|
||||
{ "Canon PowerShot SX1 IS", 0, 0,
|
||||
{ 6578,-259,-502,-5974,13030,3309,-308,1058,4970 } },
|
||||
{ "Canon PowerShot SX50 HS", 0, 0,
|
||||
{ 12432,-4753,-1247,-2110,10691,1629,-412,1623,4926 } },
|
||||
{ "Canon PowerShot A470", 0, 0, /* DJC */
|
||||
{ 12513,-4407,-1242,-2680,10276,2405,-878,2215,4734 } },
|
||||
{ "Canon PowerShot A610", 0, 0, /* DJC */
|
||||
@ -6427,8 +6427,6 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 14573,-5482,-1546,-1266,9799,1468,-1040,1912,3810 } },
|
||||
{ "Canon PowerShot S3 IS", 0, 0, /* DJC */
|
||||
{ 14062,-5199,-1446,-4712,12470,2243,-1286,2028,4836 } },
|
||||
{ "Canon PowerShot SX1 IS", 0, 0,
|
||||
{ 6578,-259,-502,-5974,13030,3309,-308,1058,4970 } },
|
||||
{ "Canon PowerShot SX110 IS", 0, 0, /* DJC */
|
||||
{ 14134,-5576,-1527,-1991,10719,1273,-1158,1929,3581 } },
|
||||
{ "Canon PowerShot SX220", 0, 0, /* DJC */
|
||||
@ -6457,12 +6455,12 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM F6", 0, 0,
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM F77", 0, 0,
|
||||
{ "FUJIFILM F77", 0, 0xfe9,
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM F7", 0, 0,
|
||||
{ 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } },
|
||||
{ "FUJIFILM F8", 0, 0,
|
||||
{ 11044,-3888,-1120,-7248,15168,2208,-1531,2277,8069 } },
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM S100FS", 514, 0,
|
||||
{ 11521,-4355,-1065,-6524,13767,3058,-1466,1984,6045 } },
|
||||
{ "FUJIFILM S200EXR", 512, 0x3fff,
|
||||
@ -6513,6 +6511,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
|
||||
{ "FUJIFILM X-Pro1", 0, 0,
|
||||
{ 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } },
|
||||
{ "FUJIFILM X-E1", 0, 0,
|
||||
{ 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } },
|
||||
{ "FUJIFILM XF1", 0, 0,
|
||||
{ 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
|
||||
{ "FUJIFILM X-S1", 0, 0,
|
||||
{ 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
|
||||
{ "Imacon Ixpress", 0, 0, /* DJC */
|
||||
@ -6531,15 +6533,15 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 10592,-2206,-967,-1944,11685,230,2206,670,1273 } },
|
||||
{ "KODAK EOSDCS3B", 0, 0,
|
||||
{ 9898,-2700,-940,-2478,12219,206,1985,634,1031 } },
|
||||
{ "Kodak DCS520C", 180, 0,
|
||||
{ "Kodak DCS520C", 178, 0,
|
||||
{ 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } },
|
||||
{ "Kodak DCS560C", 188, 0,
|
||||
{ "Kodak DCS560C", 177, 0,
|
||||
{ 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } },
|
||||
{ "Kodak DCS620C", 180, 0,
|
||||
{ "Kodak DCS620C", 177, 0,
|
||||
{ 23617,-10175,-3149,-2054,11749,-272,2586,-489,3453 } },
|
||||
{ "Kodak DCS620X", 185, 0,
|
||||
{ "Kodak DCS620X", 176, 0,
|
||||
{ 13095,-6231,154,12221,-21,-2137,895,4602,2258 } },
|
||||
{ "Kodak DCS660C", 214, 0,
|
||||
{ "Kodak DCS660C", 173, 0,
|
||||
{ 18244,-6351,-2739,-791,11193,-521,3711,-129,2802 } },
|
||||
{ "Kodak DCS720X", 0, 0,
|
||||
{ 11775,-5884,950,9556,1846,-1286,-1019,6221,2728 } },
|
||||
@ -6623,7 +6625,7 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } },
|
||||
{ "NIKON D3100", 0, 0,
|
||||
{ 7911,-2167,-813,-5327,13150,2408,-1288,2483,7968 } },
|
||||
{ "NIKON D3200", 0, 0,
|
||||
{ "NIKON D3200", 0, 0xfb9,
|
||||
{ 7013,-1408,-635,-5268,12902,2640,-1470,2801,7379 } },
|
||||
{ "NIKON D300", 0, 0,
|
||||
{ 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } },
|
||||
@ -6645,6 +6647,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } },
|
||||
{ "NIKON D50", 0, 0,
|
||||
{ 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } },
|
||||
{ "NIKON D600", 0, 0x3e07,
|
||||
{ 8178,-2245,-609,-4857,12394,2776,-1207,2086,7298 } },
|
||||
{ "NIKON D60", 0, 0,
|
||||
{ 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } },
|
||||
{ "NIKON D7000", 0, 0,
|
||||
@ -6691,6 +6695,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11432,-3679,-1111,-3169,11239,2202,-791,1380,4455 } },
|
||||
{ "NIKON COOLPIX P7100", 0, 0,
|
||||
{ 11053,-4269,-1024,-1976,10182,2088,-526,1263,4469 } },
|
||||
{ "NIKON COOLPIX P7700", 200, 0,
|
||||
{ 10321,-3920,-931,-2750,11146,1824,-442,1545,5539 } },
|
||||
{ "NIKON 1 V2", 0, 0,
|
||||
{ 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } },
|
||||
{ "NIKON 1 ", 0, 0,
|
||||
{ 8994,-2667,-865,-4594,12324,2552,-699,1786,6260 } },
|
||||
{ "OLYMPUS C5050", 0, 0,
|
||||
@ -6731,7 +6739,7 @@ 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,
|
||||
{ "OLYMPUS E-5", 0, 0xeec,
|
||||
{ 11200,-3783,-1325,-4576,12593,2206,-695,1742,7504 } },
|
||||
{ "OLYMPUS E-600", 0, 0xfaf,
|
||||
{ 8453,-2198,-1092,-7609,15681,2008,-1725,2337,7824 } },
|
||||
@ -6751,9 +6759,13 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 15030,-5552,-1806,-3987,12387,1767,-592,1670,7023 } },
|
||||
{ "OLYMPUS E-PL3", 0, 0,
|
||||
{ 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
|
||||
{ "OLYMPUS E-PL5", 0, 0xfcb,
|
||||
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
||||
{ "OLYMPUS E-PM1", 0, 0,
|
||||
{ 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
|
||||
{ "OLYMPUS E-M5", 0, 0,
|
||||
{ "OLYMPUS E-PM2", 0, 0,
|
||||
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
||||
{ "OLYMPUS E-M5", 0, 0xfe1,
|
||||
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
||||
{ "OLYMPUS SP350", 0, 0,
|
||||
{ 12078,-4836,-1069,-6671,14306,2578,-786,939,7418 } },
|
||||
@ -6771,6 +6783,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11522,-4044,-1146,-4736,12172,2904,-988,1829,6039 } },
|
||||
{ "OLYMPUS XZ-1", 0, 0,
|
||||
{ 10901,-4095,-1074,-1141,9208,2293,-62,1417,5158 } },
|
||||
{ "OLYMPUS XZ-2", 0, 0,
|
||||
{ 9777,-3483,-925,-2886,11297,1800,-602,1663,5134 } },
|
||||
{ "PENTAX *ist DL2", 0, 0,
|
||||
{ 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } },
|
||||
{ "PENTAX *ist DL", 0, 0,
|
||||
@ -6797,6 +6811,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } },
|
||||
{ "PENTAX K-r", 0, 0,
|
||||
{ 9895,-3077,-850,-5304,13035,2521,-883,1768,6936 } },
|
||||
{ "PENTAX K-5 II", 0, 0,
|
||||
{ 8170,-2725,-639,-4440,12017,2744,-771,1465,6599 } },
|
||||
{ "PENTAX K-5", 0, 0,
|
||||
{ 8713,-2833,-743,-4342,11900,2772,-722,1543,6247 } },
|
||||
{ "PENTAX K-7", 0, 0,
|
||||
@ -6845,6 +6861,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
|
||||
{ "LEICA D-LUX 5", 143, 0,
|
||||
{ 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
|
||||
{ "Panasonic DMC-LX7", 143, 0,
|
||||
{ 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } },
|
||||
{ "LEICA D-LUX 6", 143, 0,
|
||||
{ 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } },
|
||||
{ "Panasonic DMC-FZ100", 143, 0xfff,
|
||||
{ 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } },
|
||||
{ "LEICA V-LUX 2", 143, 0xfff,
|
||||
@ -6853,6 +6873,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } },
|
||||
{ "LEICA V-LUX 3", 143, 0xfff,
|
||||
{ 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } },
|
||||
{ "Panasonic DMC-FZ200", 143, 0xfff,
|
||||
{ 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } },
|
||||
{ "LEICA V-LUX 4", 143, 0xfff,
|
||||
{ 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } },
|
||||
{ "Panasonic DMC-FX150", 15, 0xfff,
|
||||
{ 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } },
|
||||
{ "Panasonic DMC-G10", 0, 0,
|
||||
@ -6863,6 +6887,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } },
|
||||
{ "Panasonic DMC-G3", 143, 0xfff,
|
||||
{ 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } },
|
||||
{ "Panasonic DMC-G5", 143, 0xfff,
|
||||
{ 7798,-2562,-740,-3879,11584,2613,-1055,2248,5434 } },
|
||||
{ "Panasonic DMC-GF1", 15, 0xf92,
|
||||
{ 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } },
|
||||
{ "Panasonic DMC-GF2", 143, 0xfff,
|
||||
@ -6875,6 +6901,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 6299,-1466,-532,-6535,13852,2969,-2331,3112,5984 } },
|
||||
{ "Panasonic DMC-GH2", 15, 0xf95,
|
||||
{ 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } },
|
||||
{ "Panasonic DMC-GH3", 144, 0,
|
||||
{ 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
|
||||
{ "Panasonic DMC-GX1", 143, 0,
|
||||
{ 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } },
|
||||
{ "Phase One H 20", 0, 0, /* DJC */
|
||||
@ -6895,6 +6923,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 21014,-7891,-2613,-3056,12201,856,-2203,5125,8042 } },
|
||||
{ "SAMSUNG EX1", 0, 0x3e00,
|
||||
{ 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } },
|
||||
{ "SAMSUNG EX2F", 0, 0x7ff,
|
||||
{ 10648,-3897,-1055,-2022,10573,1668,-492,1611,4742 } },
|
||||
{ "SAMSUNG NX2", 0, 0xfff, /* NX20, NX200, NX210 */
|
||||
{ 6933,-2268,-753,-4921,13387,1647,-803,1641,6096 } },
|
||||
{ "SAMSUNG NX1000", 0, 0,
|
||||
@ -6909,14 +6939,16 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11885,-3968,-1473,-4214,12299,1916,-835,1655,5549 } },
|
||||
{ "Sinar", 0, 0, /* DJC */
|
||||
{ 16442,-2956,-2422,-2877,12128,750,-1136,6066,4559 } },
|
||||
{ "SONY DSC-F828", 491, 0,
|
||||
{ "SONY DSC-F828", 0, 0,
|
||||
{ 7924,-1910,-777,-8226,15459,2998,-1517,2199,6818,-7242,11401,3481 } },
|
||||
{ "SONY DSC-R1", 512, 0,
|
||||
{ 8512,-2641,-694,-8042,15670,2526,-1821,2117,7414 } },
|
||||
{ "SONY DSC-V3", 0, 0,
|
||||
{ 7511,-2571,-692,-7894,15088,3060,-948,1111,8128 } },
|
||||
{ "SONY DSC-RX100", 192, 0, /* DJC */
|
||||
{ 7329,-2746,-405,-2691,9338,3354,-136,1259,5051 } },
|
||||
{ "SONY DSC-RX100", 200, 0,
|
||||
{ 8651,-2754,-1057,-3464,12207,1373,-568,1398,4434 } },
|
||||
{ "SONY DSC-RX1", 128, 0,
|
||||
{ 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } },
|
||||
{ "SONY DSLR-A100", 0, 0xfeb,
|
||||
{ 9437,-2811,-774,-8405,16215,2290,-710,596,7181 } },
|
||||
{ "SONY DSLR-A290", 0, 0,
|
||||
@ -6947,6 +6979,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 5209,-1072,-397,-8845,16120,2919,-1618,1803,8654 } },
|
||||
{ "SONY NEX-5N", 128, 0,
|
||||
{ 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
|
||||
{ "SONY NEX-5R", 128, 0,
|
||||
{ 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
|
||||
{ "SONY NEX-3", 138, 0, /* DJC */
|
||||
{ 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } },
|
||||
{ "SONY NEX-5", 116, 0, /* DJC */
|
||||
@ -6955,6 +6989,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } },
|
||||
{ "SONY NEX-5", 128, 0, /* Adobe */
|
||||
{ 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } },
|
||||
{ "SONY NEX-6", 128, 0,
|
||||
{ 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
|
||||
{ "SONY NEX-7", 128, 0,
|
||||
{ 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
|
||||
{ "SONY NEX", 128, 0, /* NEX-C3, NEX-F3 */
|
||||
@ -6973,6 +7009,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
|
||||
{ "SONY SLT-A77", 128, 0,
|
||||
{ 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
|
||||
{ "SONY SLT-A99", 128, 0,
|
||||
{ 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } },
|
||||
};
|
||||
double cam_xyz[4][3];
|
||||
char name[130];
|
||||
@ -7165,6 +7203,7 @@ void CLASS identify()
|
||||
{ 12310144, "CASIO", "EX-Z850" ,1 },
|
||||
{ 12489984, "CASIO", "EX-Z8" ,1 },
|
||||
{ 15499264, "CASIO", "EX-Z1050" ,1 },
|
||||
{ 18702336, "CASIO", "EX-ZR100" ,1 },
|
||||
{ 7426656, "CASIO", "EX-P505" ,1 },
|
||||
{ 9313536, "CASIO", "EX-P600" ,1 },
|
||||
{ 10979200, "CASIO", "EX-P700" ,1 },
|
||||
@ -7369,7 +7408,7 @@ void CLASS identify()
|
||||
{ height = 3124; width = 4688; filters = 0x16161616; }
|
||||
if (width == 4352 && (!strcmp(model,"K-r") || !strcmp(model,"K-x")))
|
||||
{ width = 4309; filters = 0x16161616; }
|
||||
if (width >= 4960 && !strcmp(model,"K-5"))
|
||||
if (width >= 4960 && !strncmp(model,"K-5",3))
|
||||
{ left_margin = 10; width = 4950; filters = 0x16161616; }
|
||||
if (width == 4736 && !strcmp(model,"K-7"))
|
||||
{ height = 3122; width = 4684; filters = 0x16161616; top_margin = 2; }
|
||||
@ -7414,6 +7453,7 @@ void CLASS identify()
|
||||
case 3344: width -= 66;
|
||||
case 3872: width -= 6;
|
||||
}
|
||||
if (height > width) SWAP(height,width);
|
||||
filters = 0;
|
||||
load_raw = &CLASS canon_sraw_load_raw;
|
||||
} else if (!strcmp(model,"PowerShot 600")) {
|
||||
@ -7692,6 +7732,14 @@ canon_a5:
|
||||
width = 4048;
|
||||
top_margin = 11;
|
||||
left_margin = 104;
|
||||
} else if (is_canon && raw_width == 4176) {
|
||||
height = 3045;
|
||||
width = 4072;
|
||||
left_margin = 96;
|
||||
mask[0][0] = top_margin = 17;
|
||||
mask[0][2] = raw_height;
|
||||
mask[0][3] = 80;
|
||||
filters = 0x49494949;
|
||||
} else if (is_canon && raw_width == 4312) {
|
||||
top_margin = 18;
|
||||
left_margin = 22;
|
||||
@ -7758,6 +7806,10 @@ canon_a5:
|
||||
top_margin = 51;
|
||||
left_margin = 158;
|
||||
goto canon_cr2;
|
||||
} else if (is_canon && raw_width == 5568) {
|
||||
top_margin = 38;
|
||||
left_margin = 72;
|
||||
goto canon_cr2;
|
||||
} else if (is_canon && raw_width == 5712) {
|
||||
height = 3752;
|
||||
width = 5640;
|
||||
@ -7801,6 +7853,7 @@ canon_cr2:
|
||||
!strcmp(model,"D7000")) {
|
||||
width -= 44;
|
||||
} else if (!strcmp(model,"D3200") ||
|
||||
!strcmp(model,"D600") ||
|
||||
!strcmp(model,"D800")) {
|
||||
width -= 46;
|
||||
} else if (!strcmp(model,"D4")) {
|
||||
@ -7811,11 +7864,8 @@ canon_cr2:
|
||||
!strncmp(model,"D70",3)) {
|
||||
width--;
|
||||
} else if (!strcmp(model,"D100")) {
|
||||
if (tiff_compress == 34713 && !nikon_is_compressed()) {
|
||||
load_raw = &CLASS packed_load_raw;
|
||||
load_flags |= 1;
|
||||
if (load_flags)
|
||||
raw_width = (width += 3) + 3;
|
||||
}
|
||||
} else if (!strcmp(model,"D200")) {
|
||||
left_margin = 1;
|
||||
width -= 4;
|
||||
@ -7828,6 +7878,8 @@ canon_cr2:
|
||||
else width -= 8;
|
||||
} else if (!strncmp(model,"D300",4)) {
|
||||
width -= 32;
|
||||
} else if (!strcmp(make,"NIKON") && raw_width == 4032) {
|
||||
adobe_coeff ("NIKON","COOLPIX P7700");
|
||||
} else if (!strncmp(model,"COOLPIX P",9)) {
|
||||
load_flags = 24;
|
||||
filters = 0x94949494;
|
||||
@ -7943,13 +7995,12 @@ cp_e2500:
|
||||
maximum = (is_raw == 2 && shot_select) ? 0x2f00 : 0x3e00;
|
||||
top_margin = (raw_height - height) >> 2 << 1;
|
||||
left_margin = (raw_width - width ) >> 2 << 1;
|
||||
if (width == 2848) filters = 0x16161616;
|
||||
if (width == 3328) {
|
||||
width = 3262;
|
||||
left_margin = 34;
|
||||
}
|
||||
if (!strcmp(model,"X10") || !strcmp(model,"X-S1"))
|
||||
filters = 0x16161616;
|
||||
if (!strcmp(model,"X-Pro1")) {
|
||||
if (width == 4952) {
|
||||
left_margin = 0;
|
||||
filters = 2;
|
||||
}
|
||||
@ -8085,6 +8136,13 @@ wb550:
|
||||
load_raw = &CLASS unpacked_load_raw;
|
||||
load_flags = 6;
|
||||
maximum = 0x3df;
|
||||
} else if (!strcmp(model,"EX2F")) {
|
||||
height = 3045;
|
||||
width = 4070;
|
||||
top_margin = 3;
|
||||
order = 0x4949;
|
||||
filters = 0x49494949;
|
||||
load_raw = &CLASS unpacked_load_raw;
|
||||
} else if (!strcmp(model,"STV680 VGA")) {
|
||||
height = 484;
|
||||
width = 644;
|
||||
@ -8292,6 +8350,9 @@ wb550:
|
||||
thumb_length = flen - (thumb_offset = 0xa39800);
|
||||
thumb_height = 480;
|
||||
thumb_width = 640;
|
||||
} else if (!strcmp(model,"XZ-2")) {
|
||||
load_raw = &CLASS packed_load_raw;
|
||||
load_flags = 24;
|
||||
}
|
||||
} else if (!strcmp(model,"N Digital")) {
|
||||
height = 2047;
|
||||
@ -8302,6 +8363,7 @@ wb550:
|
||||
} else if (!strcmp(model,"DSC-F828")) {
|
||||
width = 3288;
|
||||
left_margin = 5;
|
||||
mask[1][3] = -17;
|
||||
data_offset = 862144;
|
||||
load_raw = &CLASS sony_load_raw;
|
||||
filters = 0x9c9c9c9c;
|
||||
@ -8310,6 +8372,7 @@ wb550:
|
||||
} else if (!strcmp(model,"DSC-V3")) {
|
||||
width = 3109;
|
||||
left_margin = 59;
|
||||
mask[0][1] = 9;
|
||||
data_offset = 787392;
|
||||
load_raw = &CLASS sony_load_raw;
|
||||
} else if (!strcmp(make,"SONY") && raw_width == 3984) {
|
||||
@ -8579,6 +8642,11 @@ c603:
|
||||
height = 2752;
|
||||
width = 3672;
|
||||
raw_width = 5632;
|
||||
} else if (!strcmp(model,"EX-ZR100")) {
|
||||
height = 3044;
|
||||
width = 4072;
|
||||
raw_width = 4096;
|
||||
load_flags = 80;
|
||||
} else if (!strcmp(model,"EX-P505")) {
|
||||
height = 1928;
|
||||
width = 2568;
|
||||
@ -9316,6 +9384,10 @@ int CLASS main (int argc, const char **argv)
|
||||
if (!is_raw) goto next;
|
||||
shrink = filters && (half_size || (!identify_only &&
|
||||
(threshold || aber[0] != 1 || aber[2] != 1)));
|
||||
iheight = (height + shrink) >> shrink;
|
||||
iwidth = (width + shrink) >> shrink;
|
||||
if (identify_only) {
|
||||
if (verbose) {
|
||||
if (document_mode == 3) {
|
||||
top_margin = left_margin = fuji_width = 0;
|
||||
height = raw_height;
|
||||
@ -9325,8 +9397,6 @@ int CLASS main (int argc, const char **argv)
|
||||
}
|
||||
iheight = (height + shrink) >> shrink;
|
||||
iwidth = (width + shrink) >> shrink;
|
||||
if (identify_only) {
|
||||
if (verbose) {
|
||||
if (use_fuji_rotate) {
|
||||
if (fuji_width) {
|
||||
fuji_width = (fuji_width - 1 + shrink) >> shrink;
|
||||
@ -9364,8 +9434,6 @@ next:
|
||||
memcpy (rgb_cam, cmatrix, sizeof cmatrix);
|
||||
raw_color = 0;
|
||||
}
|
||||
image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image);
|
||||
merror (image, "main()");
|
||||
if (meta_length) {
|
||||
meta_data = (char *) malloc (meta_length);
|
||||
merror (meta_data, "main()");
|
||||
@ -9373,6 +9441,9 @@ next:
|
||||
if (filters || colors == 1) {
|
||||
raw_image = (ushort *) calloc ((raw_height+7)*raw_width, 2);
|
||||
merror (raw_image, "main()");
|
||||
} else {
|
||||
image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image);
|
||||
merror (image, "main()");
|
||||
}
|
||||
if (verbose)
|
||||
fprintf (stderr,_("Loading %s %s image from %s ...\n"),
|
||||
@ -9384,7 +9455,18 @@ next:
|
||||
if (raw_image && read_from_stdin)
|
||||
fread (raw_image, 2, raw_height*raw_width, stdin);
|
||||
else (*load_raw)();
|
||||
if (document_mode == 3) {
|
||||
top_margin = left_margin = fuji_width = 0;
|
||||
height = raw_height;
|
||||
if (width <= raw_width * 8 / tiff_bps)
|
||||
width = raw_width * 8 / tiff_bps;
|
||||
else width = raw_width;
|
||||
}
|
||||
iheight = (height + shrink) >> shrink;
|
||||
iwidth = (width + shrink) >> shrink;
|
||||
if (raw_image) {
|
||||
image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image);
|
||||
merror (image, "main()");
|
||||
crop_masked_pixels();
|
||||
free (raw_image);
|
||||
}
|
||||
|
@ -31,11 +31,11 @@
|
||||
*If you have not modified dcraw.c in any way, a link to my
|
||||
homepage qualifies as "full source code".
|
||||
|
||||
$Revision: 1.452 $
|
||||
$Date: 2012/07/23 04:28:00 $
|
||||
$Revision: 1.454 $
|
||||
$Date: 2012/12/23 19:25:36 $
|
||||
*/
|
||||
|
||||
#define DCRAW_VERSION "9.16"
|
||||
#define DCRAW_VERSION "9.17"
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
@ -125,6 +125,7 @@ const double xyz_rgb[3][3] = { // XYZ from RGB
|
||||
{ 0.212671, 0.715160, 0.072169 },
|
||||
{ 0.019334, 0.119193, 0.950227 } };
|
||||
const float d65_white[3] = { 0.950456, 1, 1.088754 };
|
||||
|
||||
/* RT: Removed unused structs */
|
||||
#define CLASS DCraw::
|
||||
|
||||
@ -255,7 +256,7 @@ void CLASS derror()
|
||||
fprintf (stderr,_("Corrupt data near 0x%llx\n"), (INT64) ftello(ifp));
|
||||
}
|
||||
data_error++;
|
||||
/*RT*/ longjmp (failure, 1);
|
||||
/*RT*/ longjmp (failure, 1);
|
||||
}
|
||||
|
||||
ushort CLASS sget2 (uchar *s)
|
||||
@ -476,6 +477,7 @@ void CLASS canon_600_correct()
|
||||
int row, col, val;
|
||||
static const short mul[4][2] =
|
||||
{ { 1141,1145 }, { 1128,1109 }, { 1178,1149 }, { 1128,1109 } };
|
||||
|
||||
for (row=0; row < height; row++)
|
||||
for (col=0; col < width; col++) {
|
||||
if ((val = BAYER(row,col) - black) < 0) val = 0;
|
||||
@ -921,19 +923,21 @@ void CLASS canon_sraw_load_raw()
|
||||
else ip[col][c] = (ip[col-1][c] + ip[col+1][c] + 1) >> 1;
|
||||
}
|
||||
for ( ; rp < ip[0]; rp+=4) {
|
||||
if (unique_id < 0x80000218) {
|
||||
rp[0] -= 512;
|
||||
goto next;
|
||||
} else if (unique_id == 0x80000285) {
|
||||
next: pix[0] = rp[0] + rp[2];
|
||||
pix[2] = rp[0] + rp[1];
|
||||
pix[1] = rp[0] + ((-778*rp[1] - (rp[2] << 11)) >> 12);
|
||||
} else {
|
||||
if (unique_id == 0x80000218 ||
|
||||
unique_id == 0x80000250 ||
|
||||
unique_id == 0x80000261 ||
|
||||
unique_id == 0x80000281 ||
|
||||
unique_id == 0x80000287) {
|
||||
rp[1] = (rp[1] << 2) + hue;
|
||||
rp[2] = (rp[2] << 2) + hue;
|
||||
pix[0] = rp[0] + (( 50*rp[1] + 22929*rp[2]) >> 14);
|
||||
pix[1] = rp[0] + ((-5640*rp[1] - 11751*rp[2]) >> 14);
|
||||
pix[2] = rp[0] + ((29040*rp[1] - 101*rp[2]) >> 14);
|
||||
} else {
|
||||
if (unique_id < 0x80000218) rp[0] -= 512;
|
||||
pix[0] = rp[0] + rp[2];
|
||||
pix[2] = rp[0] + rp[1];
|
||||
pix[1] = rp[0] + ((-778*rp[1] - (rp[2] << 11)) >> 12);
|
||||
}
|
||||
FORC3 rp[c] = CLIP(pix[c] * sraw_mul[c] >> 10);
|
||||
}
|
||||
@ -1101,23 +1105,6 @@ void CLASS nikon_load_raw()
|
||||
free (huff);
|
||||
}
|
||||
|
||||
/*
|
||||
Figure out if a NEF file is compressed. These fancy heuristics
|
||||
are only needed for the D100, thanks to a bug in some cameras
|
||||
that tags all images as "compressed".
|
||||
*/
|
||||
int CLASS nikon_is_compressed()
|
||||
{
|
||||
uchar test[256];
|
||||
int i;
|
||||
|
||||
fseek (ifp, data_offset, SEEK_SET);
|
||||
fread (test, 1, 256, ifp);
|
||||
for (i=15; i < 256; i+=16)
|
||||
if (test[i]) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Returns 1 for a Coolpix 995, 0 for anything else.
|
||||
*/
|
||||
@ -1192,7 +1179,6 @@ int CLASS minolta_z2()
|
||||
return nz > 20;
|
||||
}
|
||||
|
||||
|
||||
/*RT void CLASS jpeg_thumb(); */
|
||||
|
||||
void CLASS ppm_thumb()
|
||||
@ -1273,7 +1259,6 @@ void CLASS rollei_load_raw()
|
||||
todo[i] = isix++;
|
||||
todo[i+1] = buffer >> (14-i)*5;
|
||||
}
|
||||
|
||||
for (i=0; i < 16; i+=2)
|
||||
raw_image[todo[i]] = (todo[i+1] & 0x3ff);
|
||||
}
|
||||
@ -1561,9 +1546,7 @@ void CLASS hasselblad_load_raw()
|
||||
if ((diff & (1 << (len[c]-1))) == 0)
|
||||
diff -= (1 << len[c]) - 1;
|
||||
if (diff == 65535) diff = -32768;
|
||||
pred[c] += diff;
|
||||
if (row >= 0 && (unsigned)(col+c) < width)
|
||||
RAW(row,col+c) = pred[c];
|
||||
RAW(row,col+c) = pred[c] += diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1751,8 +1734,7 @@ void CLASS panasonic_load_raw()
|
||||
}
|
||||
} else if ((nonz[i & 1] = pana_bits(8)) || i > 11)
|
||||
pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4);
|
||||
if (col < width)
|
||||
if ((RAW(row,col) = pred[col & 1]) > 4098) derror();
|
||||
if ((RAW(row,col) = pred[col & 1]) > 4098 && col < width) derror();
|
||||
}
|
||||
}
|
||||
|
||||
@ -2336,7 +2318,6 @@ void CLASS kodak_thumb_load_raw()
|
||||
void CLASS sony_decrypt_t::operator()(unsigned *data, int len, int start, int key)
|
||||
{
|
||||
/*RT static unsigned pad[128], p;*/
|
||||
|
||||
if (start) {
|
||||
for (p=0; p < 4; p++)
|
||||
pad[p] = key = key * 48828125 + 1;
|
||||
@ -2424,7 +2405,7 @@ void CLASS sony_arw2_load_raw()
|
||||
bit += 7;
|
||||
}
|
||||
for (i=0; i < 16; i++, col+=2)
|
||||
if (col < width) RAW(row,col) = curve[pix[i] << 1] >> 2;
|
||||
RAW(row,col) = curve[pix[i] << 1] >> 2;
|
||||
col -= col & 1 ? 1:31;
|
||||
}
|
||||
}
|
||||
@ -3356,11 +3337,8 @@ void CLASS crop_masked_pixels()
|
||||
mask[0][3] = -2;
|
||||
goto sides;
|
||||
}
|
||||
if (load_raw == &CLASS sony_load_raw) {
|
||||
mask[0][3] = 9;
|
||||
goto sides;
|
||||
}
|
||||
if (load_raw == &CLASS canon_600_load_raw ||
|
||||
load_raw == &CLASS sony_load_raw ||
|
||||
(load_raw == &CLASS eight_bit_load_raw && strncmp(model,"DC2",3)) ||
|
||||
load_raw == &CLASS kodak_262_load_raw ||
|
||||
(load_raw == &CLASS packed_load_raw && (load_flags & 32))) {
|
||||
@ -4388,7 +4366,7 @@ get2_256:
|
||||
fseek (ifp, i, SEEK_CUR);
|
||||
get2_rggb:
|
||||
FORC4 cam_mul[c ^ (c >> 1)] = get2();
|
||||
i = len == 1312 ? 112:22;
|
||||
i = len >> 3 == 164 ? 112:22;
|
||||
fseek (ifp, i, SEEK_CUR);
|
||||
FORC4 sraw_mul[c ^ (c >> 1)] = get2();
|
||||
}
|
||||
@ -5087,7 +5065,6 @@ guess_cfa_pc:
|
||||
int CLASS parse_tiff (int base)
|
||||
{
|
||||
int doff;
|
||||
|
||||
/*RT*/ if (exif_base == -1) exif_base = base;
|
||||
|
||||
fseek (ifp, base, SEEK_SET);
|
||||
@ -5173,6 +5150,14 @@ void CLASS apply_tiff()
|
||||
case 262:
|
||||
load_raw = &CLASS kodak_262_load_raw; break;
|
||||
case 34713:
|
||||
if ((raw_width+9)/10*16*raw_height == tiff_ifd[raw].bytes) {
|
||||
load_raw = &CLASS packed_load_raw;
|
||||
load_flags = 1;
|
||||
} else if (raw_width*raw_height*2 == tiff_ifd[raw].bytes) {
|
||||
load_raw = &CLASS unpacked_load_raw;
|
||||
load_flags = 4;
|
||||
order = 0x4d4d;
|
||||
} else
|
||||
load_raw = &CLASS nikon_load_raw; break;
|
||||
case 34892:
|
||||
load_raw = &CLASS lossy_dng_load_raw; break;
|
||||
@ -5189,7 +5174,8 @@ void CLASS apply_tiff()
|
||||
}
|
||||
if (!dng_version)
|
||||
if ( (tiff_samples == 3 && tiff_ifd[raw].bytes &&
|
||||
tiff_bps != 14 && tiff_bps != 2048 && tiff_compress != 32770)
|
||||
tiff_bps != 14 && tiff_bps != 2048 &&
|
||||
tiff_compress != 32769 && tiff_compress != 32770)
|
||||
|| (tiff_bps == 8 && !strstr(make,"KODAK") && !strstr(make,"Kodak") &&
|
||||
!strstr(model2,"DEBUG RAW")))
|
||||
is_raw = 0;
|
||||
@ -5608,7 +5594,7 @@ void CLASS parse_fuji (int offset)
|
||||
} else if (tag == 0xc000) {
|
||||
c = order;
|
||||
order = 0x4949;
|
||||
width = get4();
|
||||
if ((width = get4()) > 10000) width = get4();
|
||||
height = get4();
|
||||
order = c;
|
||||
}
|
||||
@ -5914,6 +5900,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 4716,603,-830,-7798,15474,2480,-1496,1937,6651 } },
|
||||
{ "Canon EOS 5D", 0, 0xe6c, /* RT */
|
||||
{ 6319,-793,-614,-5809,13342,2738,-1132,1559,7971 } },
|
||||
{ "Canon EOS 6D", 0, 0x3c82,
|
||||
{ 7034,-804,-1014,-4420,12564,2058,-851,1994,5758 } },
|
||||
{ "Canon EOS 7D", 0, 0x3510, /* RT - Colin Walker */
|
||||
{ 5962,-171,-732,-4189,12307,2099,-911,1981,6304 } },
|
||||
{ "Canon EOS 10D", 0, 0xfa0,
|
||||
@ -5950,6 +5938,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } },
|
||||
{ "Canon EOS 1100D", 0, 0x3510,
|
||||
{ 6444,-904,-893,-4563,12308,2535,-903,2016,6728 } },
|
||||
{ "Canon EOS M", 0, 0,
|
||||
{ 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } },
|
||||
{ "Canon EOS-1Ds Mark III", 0, 0x3bb0,
|
||||
{ 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } },
|
||||
{ "Canon EOS-1Ds Mark II", 0, 0xe80,
|
||||
@ -5982,6 +5972,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 12177,-4817,-1069,-1612,9864,2049,-98,850,4471 } },
|
||||
{ "Canon PowerShot G12", 0, 0, /* RT */
|
||||
{ 12222,-4097,-1380,-2876,11016,2130,-888,1630,4434 } },
|
||||
{ "Canon PowerShot G15", 0, 0,
|
||||
{ 7474,-2301,-567,-4056,11456,2975,-222,716,4181 } },
|
||||
{ "Canon PowerShot G1 X", 0, 0,
|
||||
{ 7378,-1255,-1043,-4088,12251,2048,-876,1946,5805 } },
|
||||
{ "Canon PowerShot G1", 0, 0,
|
||||
@ -6020,6 +6012,12 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 13440,-5896,-1279,-1236,9598,1931,-180,1001,4651 } },
|
||||
{ "Canon PowerShot S100", 0, 0,
|
||||
{ 7968,-2565,-636,-2873,10697,2513,180,667,4211 } },
|
||||
{ "Canon PowerShot S110", 0, 0,
|
||||
{ 8039,-2643,-654,-3783,11230,2930,-206,690,4194 } },
|
||||
{ "Canon PowerShot SX1 IS", 0, 0,
|
||||
{ 6578,-259,-502,-5974,13030,3309,-308,1058,4970 } },
|
||||
{ "Canon PowerShot SX50 HS", 0, 0,
|
||||
{ 12432,-4753,-1247,-2110,10691,1629,-412,1623,4926 } },
|
||||
{ "Canon PowerShot A470", 0, 0, /* DJC */
|
||||
{ 12513,-4407,-1242,-2680,10276,2405,-878,2215,4734 } },
|
||||
{ "Canon PowerShot A610", 0, 0, /* DJC */
|
||||
@ -6036,8 +6034,6 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 14573,-5482,-1546,-1266,9799,1468,-1040,1912,3810 } },
|
||||
{ "Canon PowerShot S3 IS", 0, 0, /* DJC */
|
||||
{ 14062,-5199,-1446,-4712,12470,2243,-1286,2028,4836 } },
|
||||
{ "Canon PowerShot SX1 IS", 0, 0,
|
||||
{ 6578,-259,-502,-5974,13030,3309,-308,1058,4970 } },
|
||||
{ "Canon PowerShot SX110 IS", 0, 0, /* DJC */
|
||||
{ 14134,-5576,-1527,-1991,10719,1273,-1158,1929,3581 } },
|
||||
{ "Canon PowerShot SX220", 0, 0, /* DJC */
|
||||
@ -6066,12 +6062,12 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM F6", 0, 0,
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM F77", 0, 0,
|
||||
{ "FUJIFILM F77", 0, 0xfe9,
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM F7", 0, 0,
|
||||
{ 10004,-3219,-1201,-7036,15047,2107,-1863,2565,7736 } },
|
||||
{ "FUJIFILM F8", 0, 0,
|
||||
{ 11044,-3888,-1120,-7248,15168,2208,-1531,2277,8069 } },
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM S100FS", 514, 0,
|
||||
{ 11521,-4355,-1065,-6524,13767,3058,-1466,1984,6045 } },
|
||||
{ "FUJIFILM S200EXR", 512, 0x3fff,
|
||||
@ -6122,6 +6118,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
|
||||
{ "FUJIFILM X-Pro1", 0, 0,
|
||||
{ 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } },
|
||||
{ "FUJIFILM X-E1", 0, 0,
|
||||
{ 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } },
|
||||
{ "FUJIFILM XF1", 0, 0,
|
||||
{ 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
|
||||
{ "FUJIFILM X-S1", 0, 0,
|
||||
{ 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
|
||||
{ "Imacon Ixpress", 0, 0, /* DJC */
|
||||
@ -6140,15 +6140,15 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 10592,-2206,-967,-1944,11685,230,2206,670,1273 } },
|
||||
{ "KODAK EOSDCS3B", 0, 0,
|
||||
{ 9898,-2700,-940,-2478,12219,206,1985,634,1031 } },
|
||||
{ "Kodak DCS520C", 180, 0,
|
||||
{ "Kodak DCS520C", 178, 0,
|
||||
{ 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 } },
|
||||
{ "Kodak DCS560C", 188, 0,
|
||||
{ "Kodak DCS560C", 177, 0,
|
||||
{ 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } },
|
||||
{ "Kodak DCS620C", 180, 0,
|
||||
{ "Kodak DCS620C", 177, 0,
|
||||
{ 23617,-10175,-3149,-2054,11749,-272,2586,-489,3453 } },
|
||||
{ "Kodak DCS620X", 185, 0,
|
||||
{ "Kodak DCS620X", 176, 0,
|
||||
{ 13095,-6231,154,12221,-21,-2137,895,4602,2258 } },
|
||||
{ "Kodak DCS660C", 214, 0,
|
||||
{ "Kodak DCS660C", 173, 0,
|
||||
{ 18244,-6351,-2739,-791,11193,-521,3711,-129,2802 } },
|
||||
{ "Kodak DCS720X", 0, 0,
|
||||
{ 11775,-5884,950,9556,1846,-1286,-1019,6221,2728 } },
|
||||
@ -6232,6 +6232,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 9211,-2521,-104,-6487,14280,2394,-754,1122,8033 } },
|
||||
{ "NIKON D3100", 0, 0, /* RT */
|
||||
{ 7729,-2212,-481,-5709,13148,2858,-1295,1908,8936 } },
|
||||
{ "NIKON D3200", 0, 0xfb9,
|
||||
{ 7013,-1408,-635,-5268,12902,2640,-1470,2801,7379 } },
|
||||
{ "NIKON D300", 0, 0,
|
||||
{ 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } },
|
||||
{ "NIKON D3X", 0, 0,
|
||||
@ -6252,6 +6254,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } },
|
||||
{ "NIKON D50", 0, 0,
|
||||
{ 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } },
|
||||
{ "NIKON D600", 0, 0x3e07,
|
||||
{ 8178,-2245,-609,-4857,12394,2776,-1207,2086,7298 } },
|
||||
{ "NIKON D60", 0, 0,
|
||||
{ 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } },
|
||||
{ "NIKON D7000", 0, 0, /* RT - Tanveer(tsk1979) */
|
||||
@ -6298,6 +6302,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11432,-3679,-1111,-3169,11239,2202,-791,1380,4455 } },
|
||||
{ "NIKON COOLPIX P7100", 0, 0,
|
||||
{ 11053,-4269,-1024,-1976,10182,2088,-526,1263,4469 } },
|
||||
{ "NIKON COOLPIX P7700", 200, 0,
|
||||
{ 10321,-3920,-931,-2750,11146,1824,-442,1545,5539 } },
|
||||
{ "NIKON 1 V2", 0, 0,
|
||||
{ 6588,-1305,-693,-3277,10987,2634,-355,2016,5106 } },
|
||||
{ "NIKON 1 ", 0, 0,
|
||||
{ 8994,-2667,-865,-4594,12324,2552,-699,1786,6260 } },
|
||||
{ "OLYMPUS C5050", 0, 0,
|
||||
@ -6358,9 +6366,13 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11975,-3351,-1184,-4500,12639,2061,-1230,2353,7009 } },
|
||||
{ "OLYMPUS E-PL3", 0, 0, /* RT - Colin Walker */
|
||||
{ 7041,-1794,-336,-3790,11192,2984,-1364,2625,6217 } },
|
||||
{ "OLYMPUS E-PL5", 0, 0xfcb,
|
||||
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
||||
{ "OLYMPUS E-PM1", 0, 0,
|
||||
{ 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
|
||||
{ "OLYMPUS E-M5", 0, 0,
|
||||
{ "OLYMPUS E-PM2", 0, 0,
|
||||
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
||||
{ "OLYMPUS E-M5", 0, 0xfe1,
|
||||
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
||||
{ "OLYMPUS SP350", 0, 0,
|
||||
{ 12078,-4836,-1069,-6671,14306,2578,-786,939,7418 } },
|
||||
@ -6378,6 +6390,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11522,-4044,-1146,-4736,12172,2904,-988,1829,6039 } },
|
||||
{ "OLYMPUS XZ-1", 0, 0, /* RT - Colin Walker */
|
||||
{ 8665,-2247,-762,-2424,10372,2382,-1011,2286,5189 } },
|
||||
{ "OLYMPUS XZ-2", 0, 0,
|
||||
{ 9777,-3483,-925,-2886,11297,1800,-602,1663,5134 } },
|
||||
{ "PENTAX *ist DL2", 0, 0,
|
||||
{ 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } },
|
||||
{ "PENTAX *ist DL", 0, 0,
|
||||
@ -6404,6 +6418,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 8843,-2837,-625,-5025,12644,2668,-411,1234,7410 } },
|
||||
{ "PENTAX K-r", 0, 0,
|
||||
{ 9895,-3077,-850,-5304,13035,2521,-883,1768,6936 } },
|
||||
{ "PENTAX K-5 II", 0, 0,
|
||||
{ 8170,-2725,-639,-4440,12017,2744,-771,1465,6599 } },
|
||||
{ "PENTAX K-5", 0, 0,
|
||||
{ 8713,-2833,-743,-4342,11900,2772,-722,1543,6247 } },
|
||||
{ "PENTAX K-7", 0, 0,
|
||||
@ -6454,6 +6470,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
|
||||
{ "Leica Camera AG M9 Digital Camera", 0, 0, /* RT */
|
||||
{ 7181,-1706,-55,-3557,11409,2450,-621,2072,7533 } },
|
||||
{ "Panasonic DMC-LX7", 143, 0,
|
||||
{ 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } },
|
||||
{ "LEICA D-LUX 6", 143, 0,
|
||||
{ 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } },
|
||||
{ "Panasonic DMC-FZ100", 143, 0xfff,
|
||||
{ 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } },
|
||||
{ "LEICA V-LUX 2", 143, 0xfff,
|
||||
@ -6462,6 +6482,10 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 10435,-3208,-72,-2293,10506,2067,-486,1725,4682 } },
|
||||
{ "LEICA V-LUX 3", 143, 0xfff,
|
||||
{ 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } },
|
||||
{ "Panasonic DMC-FZ200", 143, 0xfff,
|
||||
{ 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } },
|
||||
{ "LEICA V-LUX 4", 143, 0xfff,
|
||||
{ 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } },
|
||||
{ "Panasonic DMC-FX150", 15, 0xfff,
|
||||
{ 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } },
|
||||
{ "Panasonic DMC-G10", 15, 0xf3c, /* RT - Colin Walker */
|
||||
@ -6484,6 +6508,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 6360,-1557,-375,-4201,11504,3086,-1378,2518,5843 } },
|
||||
{ "Panasonic DMC-GH2", 15, 0xf95, /* RT - Colin Walker */
|
||||
{ 6855,-1765,-456,-4223,11600,2996,-1450,2602,5761 } },
|
||||
{ "Panasonic DMC-GH3", 144, 0,
|
||||
{ 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
|
||||
{ "Panasonic DMC-GX1", 143, 0,
|
||||
{ 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } },
|
||||
{ "Phase One H 20", 0, 0, /* DJC */
|
||||
@ -6504,6 +6530,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 21014,-7891,-2613,-3056,12201,856,-2203,5125,8042 } },
|
||||
{ "SAMSUNG EX1", 0, 0x3e00,
|
||||
{ 8898,-2498,-994,-3144,11328,2066,-760,1381,4576 } },
|
||||
{ "SAMSUNG EX2F", 0, 0x7ff,
|
||||
{ 10648,-3897,-1055,-2022,10573,1668,-492,1611,4742 } },
|
||||
{ "SAMSUNG NX2", 0, 0xfff, /* NX20, NX200, NX210 */
|
||||
{ 6933,-2268,-753,-4921,13387,1647,-803,1641,6096 } },
|
||||
{ "SAMSUNG NX1000", 0, 0,
|
||||
@ -6518,14 +6546,16 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 11885,-3968,-1473,-4214,12299,1916,-835,1655,5549 } },
|
||||
{ "Sinar", 0, 0, /* DJC */
|
||||
{ 16442,-2956,-2422,-2877,12128,750,-1136,6066,4559 } },
|
||||
{ "SONY DSC-F828", 491, 0,
|
||||
{ "SONY DSC-F828", 0, 0,
|
||||
{ 7924,-1910,-777,-8226,15459,2998,-1517,2199,6818,-7242,11401,3481 } },
|
||||
{ "SONY DSC-R1", 512, 0,
|
||||
{ 8512,-2641,-694,-8042,15670,2526,-1821,2117,7414 } },
|
||||
{ "SONY DSC-V3", 0, 0,
|
||||
{ 7511,-2571,-692,-7894,15088,3060,-948,1111,8128 } },
|
||||
{ "SONY DSC-RX100", 192, 0, /* DJC */
|
||||
{ 7329,-2746,-405,-2691,9338,3354,-136,1259,5051 } },
|
||||
{ "SONY DSC-RX100", 200, 0,
|
||||
{ 8651,-2754,-1057,-3464,12207,1373,-568,1398,4434 } },
|
||||
{ "SONY DSC-RX1", 128, 0,
|
||||
{ 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } },
|
||||
{ "SONY DSLR-A100", 0, 0xfeb,
|
||||
{ 9437,-2811,-774,-8405,16215,2290,-710,596,7181 } },
|
||||
{ "SONY DSLR-A290", 0, 0,
|
||||
@ -6556,12 +6586,16 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ 5715,-1433,-410,-5603,12937,2989,-644,1247,8372 } },
|
||||
{ "SONY NEX-5N", 138, 0, /* RT - Colin Walker */
|
||||
{ 5130,-1055,-269,-4473,11797,3050,-701,1310,7121 } },
|
||||
{ "SONY NEX-5R", 128, 0,
|
||||
{ 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
|
||||
{ "SONY NEX-C3", 128, 0, /* RT - Colin Walker */
|
||||
{ 5130,-1055,-269,-4473,11797,3050,-701,1310,7121 } },
|
||||
{ "SONY NEX-3", 128, 0, /* RT - Colin Walker */
|
||||
{ 5145,-741,-123,-4915,12310,2945,-794,1489,6906 } },
|
||||
{ "SONY NEX-5", 128, 0, /* RT - Colin Walker */
|
||||
{ 5154,-716,-115,-5065,12506,2882,-988,1715,6800 } },
|
||||
{ "SONY NEX-6", 128, 0,
|
||||
{ 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
|
||||
{ "SONY NEX-7", 128, 0,
|
||||
{ 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
|
||||
{ "SONY NEX", 128, 0, /* NEX-C3, NEX-F3 */
|
||||
@ -6579,7 +6613,9 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
||||
{ "SONY SLT-A65", 128, 0,
|
||||
{ 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
|
||||
{ "SONY SLT-A77", 128, 0, /* RT - Colin Walker */
|
||||
{ 5126,-830,-261,-4788,12196,2934,-948,1602,7068 } }
|
||||
{ 5126,-830,-261,-4788,12196,2934,-948,1602,7068 } },
|
||||
{ "SONY SLT-A99", 128, 0,
|
||||
{ 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } }
|
||||
};
|
||||
double cam_xyz[4][3];
|
||||
char name[130];
|
||||
@ -6772,6 +6808,7 @@ void CLASS identify()
|
||||
{ 12310144, "CASIO", "EX-Z850" ,1 },
|
||||
{ 12489984, "CASIO", "EX-Z8" ,1 },
|
||||
{ 15499264, "CASIO", "EX-Z1050" ,1 },
|
||||
{ 18702336, "CASIO", "EX-ZR100" ,1 },
|
||||
{ 7426656, "CASIO", "EX-P505" ,1 },
|
||||
{ 9313536, "CASIO", "EX-P600" ,1 },
|
||||
{ 10979200, "CASIO", "EX-P700" ,1 },
|
||||
@ -6827,12 +6864,10 @@ void CLASS identify()
|
||||
fread (head, 1, 32, ifp);
|
||||
fseek (ifp, 0, SEEK_END);
|
||||
flen = fsize = ftell(ifp);
|
||||
|
||||
/*RT*/ if (fsize<100000) {
|
||||
is_raw = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/* RT: changed string constant */
|
||||
if ((cp = (char *) memmem (head, 32, (char*)"MMMM", 4)) ||
|
||||
(cp = (char *) memmem (head, 32, (char*)"IIII", 4))) {
|
||||
@ -6986,7 +7021,7 @@ void CLASS identify()
|
||||
{ height = 3124; width = 4688; filters = 0x16161616; }
|
||||
if (width == 4352 && (!strcmp(model,"K-r") || !strcmp(model,"K-x")))
|
||||
/*RT*/ { width = 4308; filters = 0x16161616; }
|
||||
if (width >= 4960 && !strcmp(model,"K-5"))
|
||||
if (width >= 4960 && !strncmp(model,"K-5",3))
|
||||
{ left_margin = 10; width = 4950; filters = 0x16161616; }
|
||||
if (width == 4736 && !strcmp(model,"K-7"))
|
||||
{ height = 3122; width = 4684; filters = 0x16161616; top_margin = 2; }
|
||||
@ -7031,6 +7066,7 @@ void CLASS identify()
|
||||
case 3344: width -= 66;
|
||||
case 3872: width -= 6;
|
||||
}
|
||||
if (height > width) SWAP(height,width);
|
||||
filters = 0;
|
||||
load_raw = &CLASS canon_sraw_load_raw;
|
||||
} else if (!strcmp(model,"PowerShot 600")) {
|
||||
@ -7309,6 +7345,14 @@ canon_a5:
|
||||
width = 4048;
|
||||
top_margin = 11;
|
||||
left_margin = 104;
|
||||
} else if (is_canon && raw_width == 4176) {
|
||||
height = 3045;
|
||||
width = 4072;
|
||||
left_margin = 96;
|
||||
mask[0][0] = top_margin = 17;
|
||||
mask[0][2] = raw_height;
|
||||
mask[0][3] = 80;
|
||||
filters = 0x49494949;
|
||||
} else if (is_canon && raw_width == 4312) {
|
||||
top_margin = 18;
|
||||
left_margin = 22;
|
||||
@ -7375,6 +7419,10 @@ canon_a5:
|
||||
top_margin = 51;
|
||||
left_margin = 158;
|
||||
goto canon_cr2;
|
||||
} else if (is_canon && raw_width == 5568) {
|
||||
top_margin = 38;
|
||||
left_margin = 72;
|
||||
goto canon_cr2;
|
||||
} else if (is_canon && raw_width == 5712) {
|
||||
height = 3752;
|
||||
width = 5640;
|
||||
@ -7418,6 +7466,7 @@ canon_cr2:
|
||||
!strcmp(model,"D7000")) {
|
||||
width -= 44;
|
||||
} else if (!strcmp(model,"D3200") ||
|
||||
!strcmp(model,"D600") ||
|
||||
!strcmp(model,"D800") || !strcmp(model,"D800E") ) {
|
||||
width -= 46;
|
||||
} else if (!strcmp(model,"D4")) {
|
||||
@ -7428,11 +7477,8 @@ canon_cr2:
|
||||
!strncmp(model,"D70",3)) {
|
||||
width--;
|
||||
} else if (!strcmp(model,"D100")) {
|
||||
if (tiff_compress == 34713 && !nikon_is_compressed()) {
|
||||
load_raw = &CLASS packed_load_raw;
|
||||
load_flags |= 1;
|
||||
if (load_flags)
|
||||
raw_width = (width += 3) + 3;
|
||||
}
|
||||
} else if (!strcmp(model,"D200")) {
|
||||
left_margin = 1;
|
||||
width -= 4;
|
||||
@ -7445,6 +7491,8 @@ canon_cr2:
|
||||
else width -= 8;
|
||||
} else if (!strncmp(model,"D300",4)) {
|
||||
width -= 32;
|
||||
} else if (!strcmp(make,"NIKON") && raw_width == 4032) {
|
||||
adobe_coeff ("NIKON","COOLPIX P7700");
|
||||
} else if (!strncmp(model,"COOLPIX P",9)) {
|
||||
load_flags = 24;
|
||||
filters = 0x94949494;
|
||||
@ -7560,13 +7608,12 @@ cp_e2500:
|
||||
maximum = (is_raw == 2 && shot_select) ? 0x2f00 : 0x3e00;
|
||||
top_margin = (raw_height - height) >> 2 << 1;
|
||||
left_margin = (raw_width - width ) >> 2 << 1;
|
||||
if (width == 2848) filters = 0x16161616;
|
||||
if (width == 3328) {
|
||||
width = 3262;
|
||||
left_margin = 34;
|
||||
}
|
||||
if (!strcmp(model,"X10") || !strcmp(model,"X-S1"))
|
||||
filters = 0x16161616;
|
||||
if (!strcmp(model,"X-Pro1")) {
|
||||
if (width == 4952) {
|
||||
left_margin = 0;
|
||||
filters = 2;
|
||||
}
|
||||
@ -7702,6 +7749,13 @@ wb550:
|
||||
load_raw = &CLASS unpacked_load_raw;
|
||||
load_flags = 6;
|
||||
maximum = 0x3df;
|
||||
} else if (!strcmp(model,"EX2F")) {
|
||||
height = 3045;
|
||||
width = 4070;
|
||||
top_margin = 3;
|
||||
order = 0x4949;
|
||||
filters = 0x49494949;
|
||||
load_raw = &CLASS unpacked_load_raw;
|
||||
} else if (!strcmp(model,"STV680 VGA")) {
|
||||
height = 484;
|
||||
width = 644;
|
||||
@ -7909,6 +7963,9 @@ wb550:
|
||||
thumb_length = flen - (thumb_offset = 0xa39800);
|
||||
thumb_height = 480;
|
||||
thumb_width = 640;
|
||||
} else if (!strcmp(model,"XZ-2")) {
|
||||
load_raw = &CLASS packed_load_raw;
|
||||
load_flags = 24;
|
||||
}
|
||||
} else if (!strcmp(model,"N Digital")) {
|
||||
height = 2047;
|
||||
@ -7919,6 +7976,7 @@ wb550:
|
||||
} else if (!strcmp(model,"DSC-F828")) {
|
||||
width = 3288;
|
||||
left_margin = 5;
|
||||
mask[1][3] = -17;
|
||||
data_offset = 862144;
|
||||
load_raw = &CLASS sony_load_raw;
|
||||
filters = 0x9c9c9c9c;
|
||||
@ -7927,6 +7985,7 @@ wb550:
|
||||
} else if (!strcmp(model,"DSC-V3")) {
|
||||
width = 3109;
|
||||
left_margin = 59;
|
||||
mask[0][1] = 9;
|
||||
data_offset = 787392;
|
||||
load_raw = &CLASS sony_load_raw;
|
||||
} else if (!strcmp(make,"SONY") && raw_width == 3984) {
|
||||
@ -8196,6 +8255,11 @@ c603:
|
||||
height = 2752;
|
||||
width = 3672;
|
||||
raw_width = 5632;
|
||||
} else if (!strcmp(model,"EX-ZR100")) {
|
||||
height = 3044;
|
||||
width = 4072;
|
||||
raw_width = 4096;
|
||||
load_flags = 80;
|
||||
} else if (!strcmp(model,"EX-P505")) {
|
||||
height = 1928;
|
||||
width = 2568;
|
||||
@ -8315,7 +8379,7 @@ quit:
|
||||
}
|
||||
#endif
|
||||
|
||||
/* RT: removed unused function */
|
||||
/* RT: removed unused functions */
|
||||
|
||||
struct tiff_tag {
|
||||
ushort tag, type;
|
||||
@ -8338,7 +8402,6 @@ struct tiff_hdr {
|
||||
unsigned gps[26];
|
||||
char desc[512], make[64], model[64], soft[32], date[20], artist[64];
|
||||
};
|
||||
|
||||
/* RT: Delete from here */
|
||||
/*RT*/#undef SQR
|
||||
/*RT*/#undef MAX
|
||||
@ -8347,3 +8410,4 @@ struct tiff_hdr {
|
||||
/*RT*/#undef LIM
|
||||
/*RT*/#undef ULIM
|
||||
/*RT*/#undef CLIP
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- C:/GCC/RT/RTSrc/rtengine/dcraw.c Mon Aug 13 19:33:25 2012
|
||||
+++ C:/GCC/RT/RTSrc/rtengine/dcraw.cc Mon Aug 13 19:45:38 2012
|
||||
@@ -1,5 +1,17 @@
|
||||
--- dcraw.c 2012-12-26 13:09:14 -0500
|
||||
+++ dcraw.cc 2012-12-26 19:18:16 -0500
|
||||
@@ -1,3 +1,15 @@
|
||||
+/*RT*/#include <glib.h>
|
||||
+/*RT*/#include <glib/gstdio.h>
|
||||
+/*RT*/#undef MAX
|
||||
@ -16,11 +16,7 @@
|
||||
/*
|
||||
dcraw.c -- Dave Coffin's raw photo decoder
|
||||
Copyright 1997-2012 by Dave Coffin, dcoffin a cybercom o net
|
||||
|
||||
This is a command-line ANSI C program to convert raw photos from
|
||||
@@ -27,21 +39,21 @@
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
@@ -29,17 +41,17 @@
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#define _USE_MATH_DEFINES
|
||||
@ -48,11 +44,7 @@
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef NODEPS
|
||||
#define NO_JASPER
|
||||
#define NO_JPEG
|
||||
@@ -96,90 +108,40 @@
|
||||
|
||||
#ifndef LONG_BIT
|
||||
@@ -98,86 +110,37 @@
|
||||
#define LONG_BIT (8 * sizeof (long))
|
||||
#endif
|
||||
|
||||
@ -128,7 +120,7 @@
|
||||
- int format, key_off, black, black_off, split_col, tag_21a;
|
||||
- float tag_210;
|
||||
-} ph1;
|
||||
-
|
||||
|
||||
-#define CLASS
|
||||
+/* RT: Removed unused structs */
|
||||
+#define CLASS DCraw::
|
||||
@ -154,36 +146,15 @@
|
||||
#define SWAP(a,b) { a=a+b; b=a-b; a=a-b; }
|
||||
|
||||
/*
|
||||
In order to inline this calculation, I make the risky
|
||||
assumption that all filter patterns can be described
|
||||
@@ -248,11 +210,11 @@
|
||||
{ 2,3,2,0,0,1,3,0,2,0,1,2,3,0,1,0 },
|
||||
{ 1,3,1,2,3,2,3,2,0,2,0,1,1,0,3,0 },
|
||||
{ 0,2,0,3,1,0,0,1,1,3,3,2,3,2,2,1 },
|
||||
{ 2,1,3,2,3,1,2,1,0,3,0,2,0,2,0,2 },
|
||||
{ 0,3,1,0,0,2,0,3,2,1,3,1,1,3,1,3 } };
|
||||
- static const char filter2[6][6] =
|
||||
+ static const char filter2[6][6] =
|
||||
{ { 1,1,0,1,1,2 },
|
||||
{ 1,1,2,1,1,0 },
|
||||
{ 2,0,1,0,2,1 },
|
||||
{ 1,1,2,1,1,0 },
|
||||
{ 1,1,0,1,1,2 },
|
||||
@@ -291,10 +253,11 @@
|
||||
fprintf (stderr,_("Unexpected end of file\n"));
|
||||
else
|
||||
@@ -293,6 +256,7 @@
|
||||
fprintf (stderr,_("Corrupt data near 0x%llx\n"), (INT64) ftello(ifp));
|
||||
}
|
||||
data_error++;
|
||||
+ /*RT*/ longjmp (failure, 1);
|
||||
+/*RT*/ longjmp (failure, 1);
|
||||
}
|
||||
|
||||
ushort CLASS sget2 (uchar *s)
|
||||
{
|
||||
if (order == 0x4949) /* "II" means little-endian */
|
||||
@@ -364,11 +327,11 @@
|
||||
|
||||
void CLASS read_shorts (ushort *pixel, int count)
|
||||
@@ -366,7 +330,7 @@
|
||||
{
|
||||
if (fread (pixel, 2, count, ifp) < count) derror();
|
||||
if ((order == 0x4949) == (ntohs(0x1234) == 0x1234))
|
||||
@ -192,23 +163,7 @@
|
||||
}
|
||||
|
||||
void CLASS canon_600_fixed_wb (int temp)
|
||||
{
|
||||
static const short mul[4][5] = {
|
||||
@@ -511,11 +474,10 @@
|
||||
void CLASS canon_600_correct()
|
||||
{
|
||||
int row, col, val;
|
||||
static const short mul[4][2] =
|
||||
{ { 1141,1145 }, { 1128,1109 }, { 1178,1149 }, { 1128,1109 } };
|
||||
-
|
||||
for (row=0; row < height; row++)
|
||||
for (col=0; col < width; col++) {
|
||||
if ((val = BAYER(row,col) - black) < 0) val = 0;
|
||||
val = val * mul[row & 3][col & 1] >> 9;
|
||||
BAYER(row,col) = val;
|
||||
@@ -540,14 +502,14 @@
|
||||
|
||||
/*
|
||||
@@ -542,10 +506,10 @@
|
||||
getbits(-1) initializes the buffer
|
||||
getbits(n) where 0 <= n <= 25 returns an n-bit integer
|
||||
*/
|
||||
@ -222,11 +177,7 @@
|
||||
unsigned c;
|
||||
|
||||
if (nbits == -1)
|
||||
return bitbuf = vbits = reset = 0;
|
||||
if (nbits == 0 || vbits < 0) return 0;
|
||||
@@ -1221,18 +1183,19 @@
|
||||
int CLASS minolta_z2()
|
||||
{
|
||||
@@ -1208,14 +1172,14 @@
|
||||
int i, nz;
|
||||
char tail[424];
|
||||
|
||||
@ -239,28 +190,11 @@
|
||||
}
|
||||
|
||||
-void CLASS jpeg_thumb();
|
||||
+
|
||||
+/*RT void CLASS jpeg_thumb(); */
|
||||
|
||||
void CLASS ppm_thumb()
|
||||
{
|
||||
char *thumb;
|
||||
thumb_length = thumb_width*thumb_height*3;
|
||||
@@ -1308,10 +1271,11 @@
|
||||
}
|
||||
for ( ; i < 16; i+=2) {
|
||||
todo[i] = isix++;
|
||||
todo[i+1] = buffer >> (14-i)*5;
|
||||
}
|
||||
+
|
||||
for (i=0; i < 16; i+=2)
|
||||
raw_image[todo[i]] = (todo[i+1] & 0x3ff);
|
||||
}
|
||||
maximum = 0x3ff;
|
||||
}
|
||||
@@ -1506,14 +1470,14 @@
|
||||
raw_image[i+0] = (a & mask) | (b & ~mask);
|
||||
raw_image[i+1] = (b & mask) | (a & ~mask);
|
||||
@@ -1493,10 +1457,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -274,65 +208,7 @@
|
||||
unsigned c;
|
||||
|
||||
if (nbits == -1)
|
||||
return bitbuf = vbits = 0;
|
||||
if (nbits == 0) return 0;
|
||||
@@ -1572,11 +1536,11 @@
|
||||
pixel[col] = curve[pixel[col]];
|
||||
}
|
||||
for (col=0; col < raw_width; col++) {
|
||||
i = (pixel[col] << 2) - ph1.black + black[row][col >= ph1.split_col];
|
||||
if (i > 0) RAW(row,col) = i;
|
||||
- }
|
||||
+ }
|
||||
}
|
||||
free (pixel);
|
||||
maximum = 0xfffc - ph1.black;
|
||||
}
|
||||
|
||||
@@ -1611,12 +1575,12 @@
|
||||
{
|
||||
ushort *pixel=0;
|
||||
unsigned tile=0, r, c, row, col;
|
||||
|
||||
if (!filters) {
|
||||
- pixel = (ushort *) calloc (raw_width, sizeof *pixel);
|
||||
- merror (pixel, "leaf_hdr_load_raw()");
|
||||
+ pixel = (ushort *) calloc (raw_width, sizeof *pixel);
|
||||
+ merror (pixel, "leaf_hdr_load_raw()");
|
||||
}
|
||||
FORC(tiff_samples)
|
||||
for (r=0; r < raw_height; r++) {
|
||||
if (r % tile_length == 0) {
|
||||
fseek (ifp, data_offset + 4*tile++, SEEK_SET);
|
||||
@@ -1624,11 +1588,11 @@
|
||||
}
|
||||
if (filters && c != shot_select) continue;
|
||||
if (filters) pixel = raw_image + r*raw_width;
|
||||
read_shorts (pixel, raw_width);
|
||||
if (!filters && (row = r - top_margin) < height)
|
||||
- for (col=0; col < width; col++)
|
||||
+ for (col=0; col < width; col++)
|
||||
image[row*width+col][c] = pixel[col+left_margin];
|
||||
}
|
||||
if (!filters) {
|
||||
maximum = 0xffff;
|
||||
raw_color = 1;
|
||||
@@ -1676,11 +1640,11 @@
|
||||
for (row=0; row < raw_height; row++) {
|
||||
read_shorts (pixel, raw_width);
|
||||
if ((r = row-top_margin - (shot >> 1 & 1)) >= height) continue;
|
||||
for (col=0; col < raw_width; col++) {
|
||||
if ((c = col-left_margin - (shot & 1)) >= width) continue;
|
||||
- image[r*width+c][FC(row,col)] = pixel[col];
|
||||
+ image[r*width+c][FC(row,col)] = pixel[col];
|
||||
}
|
||||
}
|
||||
}
|
||||
free (pixel);
|
||||
shrink = filters = 0;
|
||||
@@ -1751,14 +1715,14 @@
|
||||
}
|
||||
free (data);
|
||||
@@ -1736,10 +1700,10 @@
|
||||
maximum = 0x3ff;
|
||||
}
|
||||
|
||||
@ -346,11 +222,7 @@
|
||||
int byte;
|
||||
|
||||
if (!nbits) return vbits=0;
|
||||
if (!vbits) {
|
||||
fread (buf+load_flags, 1, 0x4000-load_flags, ifp);
|
||||
@@ -2044,15 +2008,15 @@
|
||||
#else
|
||||
|
||||
@@ -2028,11 +1992,11 @@
|
||||
METHODDEF(boolean)
|
||||
fill_input_buffer (j_decompress_ptr cinfo)
|
||||
{
|
||||
@ -364,11 +236,7 @@
|
||||
cinfo->src->next_input_byte = jpeg_buffer;
|
||||
cinfo->src->bytes_in_buffer = nbytes;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -2367,13 +2331,13 @@
|
||||
for (col=0; col < width; col++)
|
||||
read_shorts (image[row*width+col], colors);
|
||||
@@ -2351,10 +2315,9 @@
|
||||
maximum = (1 << (thumb_misc & 31)) - 1;
|
||||
}
|
||||
|
||||
@ -376,15 +244,12 @@
|
||||
+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;
|
||||
@@ -2656,11 +2620,11 @@
|
||||
|
||||
/* RESTRICTED code starts here */
|
||||
@@ -2640,7 +2603,7 @@
|
||||
|
||||
void CLASS foveon_decoder (unsigned size, unsigned code)
|
||||
{
|
||||
@ -393,24 +258,7 @@
|
||||
struct decode *cur;
|
||||
int i, len;
|
||||
|
||||
if (!code) {
|
||||
for (i=0; i < size; i++)
|
||||
@@ -3743,11 +3707,11 @@
|
||||
fimg[i] = 256 * sqrt(image[i][c] << scale);
|
||||
for (hpass=lev=0; lev < 5; lev++) {
|
||||
lpass = size*((lev & 1)+1);
|
||||
for (row=0; row < iheight; row++) {
|
||||
hat_transform (temp, fimg+hpass+row*iwidth, 1, iwidth, 1 << lev);
|
||||
- for (col=0; col < iwidth; col++)
|
||||
+ for (col=0; col < iwidth; col++)
|
||||
fimg[lpass + row*iwidth + col] = temp[col] * 0.25;
|
||||
}
|
||||
for (col=0; col < iwidth; col++) {
|
||||
hat_transform (temp, fimg+lpass+col, iwidth, iheight, 1 << lev);
|
||||
for (row=0; row < iheight; row++)
|
||||
@@ -3959,375 +3923,11 @@
|
||||
FORCC if (c != f && sum[c+4])
|
||||
image[row*width+col][c] = sum[c] / sum[c+4];
|
||||
@@ -3940,371 +3903,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -783,11 +631,7 @@
|
||||
void CLASS median_filter()
|
||||
{
|
||||
ushort (*pix)[4];
|
||||
int pass, c, i, j, k, med[9];
|
||||
static const uchar opt[] = /* Optimal 9-element median search */
|
||||
@@ -4491,11 +4091,11 @@
|
||||
if (tag == tlen) thumb_length = get4();
|
||||
fseek (ifp, save, SEEK_SET);
|
||||
@@ -4472,7 +4071,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -796,11 +640,7 @@
|
||||
|
||||
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,
|
||||
@@ -5008,12 +4608,12 @@
|
||||
if (tag == 64020) height = (getint(type)+1) & -2;
|
||||
fseek (ifp, save, SEEK_SET);
|
||||
@@ -4989,8 +4588,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
@ -811,11 +651,7 @@
|
||||
|
||||
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;
|
||||
@@ -5023,11 +4623,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 };
|
||||
@@ -5004,7 +4603,7 @@
|
||||
unsigned sony_curve[] = { 0,0,0,0,0,4095 };
|
||||
unsigned *buf, sony_offset=0, sony_length=0, sony_key=0;
|
||||
struct jhead jh;
|
||||
@ -824,47 +660,35 @@
|
||||
|
||||
if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0])
|
||||
return 1;
|
||||
ifd = tiff_nifds++;
|
||||
for (j=0; j < 4; j++)
|
||||
@@ -5455,16 +5055,17 @@
|
||||
if (sony_length && (buf = (unsigned *) malloc(sony_length))) {
|
||||
fseek (ifp, sony_offset, SEEK_SET);
|
||||
@@ -5436,12 +5035,13 @@
|
||||
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);
|
||||
- parse_tiff_ifd (-sony_offset);
|
||||
- fclose (ifp);
|
||||
- }
|
||||
+/*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);
|
||||
- }
|
||||
+ parse_tiff_ifd (-sony_offset);
|
||||
+// fclose (ifp);
|
||||
+// }
|
||||
ifp = sfp;
|
||||
free (buf);
|
||||
}
|
||||
for (i=0; i < colors; i++)
|
||||
FORCC cc[i][c] *= ab[i];
|
||||
@@ -5485,10 +5086,12 @@
|
||||
|
||||
@@ -5465,6 +5065,7 @@
|
||||
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())) {
|
||||
@@ -5558,11 +5161,11 @@
|
||||
} slr:
|
||||
switch (tiff_bps) {
|
||||
@@ -5539,7 +5140,7 @@
|
||||
case 8: load_raw = &CLASS eight_bit_load_raw; break;
|
||||
case 12: if (tiff_ifd[raw].phint == 2)
|
||||
load_flags = 6;
|
||||
@ -873,11 +697,16 @@
|
||||
case 14: load_flags = 0;
|
||||
case 16: load_raw = &CLASS unpacked_load_raw; break;
|
||||
}
|
||||
break;
|
||||
case 6: case 7: case 99:
|
||||
@@ -5665,11 +5268,11 @@
|
||||
*/
|
||||
void CLASS parse_external_jpeg()
|
||||
@@ -5573,7 +5174,7 @@
|
||||
}
|
||||
if (!dng_version)
|
||||
if ( (tiff_samples == 3 && tiff_ifd[raw].bytes &&
|
||||
- tiff_bps != 14 && tiff_bps != 2048 &&
|
||||
+ tiff_bps != 14 && tiff_bps != 2048 &&
|
||||
tiff_compress != 32769 && tiff_compress != 32770)
|
||||
|| (tiff_bps == 8 && !strstr(make,"KODAK") && !strstr(make,"Kodak") &&
|
||||
!strstr(model2,"DEBUG RAW")))
|
||||
@@ -5655,7 +5256,7 @@
|
||||
{
|
||||
const char *file, *ext;
|
||||
char *jname, *jfile, *jext;
|
||||
@ -886,11 +715,7 @@
|
||||
|
||||
ext = strrchr (ifname, '.');
|
||||
file = strrchr (ifname, '/');
|
||||
if (!file) file = strrchr (ifname, '\\');
|
||||
if (!file) file = ifname-1;
|
||||
@@ -5687,17 +5290,18 @@
|
||||
memcpy (jfile+4, file, 4);
|
||||
}
|
||||
@@ -5677,13 +5278,14 @@
|
||||
} else
|
||||
while (isdigit(*--jext)) {
|
||||
if (*jext != '9') {
|
||||
@ -907,11 +732,7 @@
|
||||
if (verbose)
|
||||
fprintf (stderr,_("Reading metadata from %s ...\n"), jname);
|
||||
parse_tiff (12);
|
||||
thumb_offset = 0;
|
||||
is_raw = 1;
|
||||
@@ -6031,11 +5635,15 @@
|
||||
raw_width = get2();
|
||||
}
|
||||
@@ -6021,7 +5623,11 @@
|
||||
order = get2();
|
||||
hlen = get4();
|
||||
if (get4() == 0x48454150) /* "HEAP" */
|
||||
@ -924,11 +745,7 @@
|
||||
if (parse_tiff (save+6)) apply_tiff();
|
||||
fseek (ifp, save+len, SEEK_SET);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@@ -6283,11 +5891,12 @@
|
||||
*/
|
||||
void CLASS adobe_coeff (const char *make, const char *model)
|
||||
@@ -6273,7 +5879,8 @@
|
||||
{
|
||||
static const struct {
|
||||
const char *prefix;
|
||||
@ -938,11 +755,7 @@
|
||||
} table[] = {
|
||||
{ "AGFAPHOTO DC-833m", 0, 0, /* DJC */
|
||||
{ 11438,-3762,-1115,-2409,9914,2497,-1227,2295,5300 } },
|
||||
{ "Apple QuickTake", 0, 0, /* DJC */
|
||||
{ 21392,-5653,-3353,2406,8010,-415,7166,1427,2078 } },
|
||||
@@ -6297,44 +5906,44 @@
|
||||
{ 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 } },
|
||||
{ "Canon EOS D30", 0, 0,
|
||||
@@ -6287,42 +5894,42 @@
|
||||
{ 9805,-2689,-1312,-5803,13064,3068,-2438,3075,8775 } },
|
||||
{ "Canon EOS D60", 0, 0xfa0,
|
||||
{ 6188,-1341,-890,-7168,14489,2937,-2640,3228,8483 } },
|
||||
@ -953,10 +766,13 @@
|
||||
{ 4716,603,-830,-7798,15474,2480,-1496,1937,6651 } },
|
||||
- { "Canon EOS 5D", 0, 0xe6c,
|
||||
- { 6347,-479,-972,-8297,15954,2480,-1968,2131,7649 } },
|
||||
- { "Canon EOS 7D", 0, 0x3510,
|
||||
- { 6844,-996,-856,-3876,11761,2396,-593,1772,6198 } },
|
||||
- { "Canon EOS 6D", 0, 0x3c82,
|
||||
+ { "Canon EOS 5D", 0, 0xe6c, /* RT */
|
||||
+ { 6319,-793,-614,-5809,13342,2738,-1132,1559,7971 } },
|
||||
+ { "Canon EOS 6D", 0, 0x3c82,
|
||||
{ 7034,-804,-1014,-4420,12564,2058,-851,1994,5758 } },
|
||||
- { "Canon EOS 7D", 0, 0x3510,
|
||||
- { 6844,-996,-856,-3876,11761,2396,-593,1772,6198 } },
|
||||
+ { "Canon EOS 7D", 0, 0x3510, /* RT - Colin Walker */
|
||||
+ { 5962,-171,-732,-4189,12307,2099,-911,1981,6304 } },
|
||||
{ "Canon EOS 10D", 0, 0xfa0,
|
||||
@ -998,11 +814,7 @@
|
||||
{ "Canon EOS 600D", 0, 0x3510,
|
||||
{ 6461,-907,-882,-4300,12184,2378,-819,1944,5931 } },
|
||||
{ "Canon EOS 650D", 0, 0x354d,
|
||||
{ 6602,-841,-939,-4472,12458,2247,-975,2039,6148 } },
|
||||
{ "Canon EOS 1000D", 0, 0xe43,
|
||||
@@ -6345,12 +5954,12 @@
|
||||
{ 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } },
|
||||
{ "Canon EOS-1Ds Mark II", 0, 0xe80,
|
||||
@@ -6339,8 +5946,8 @@
|
||||
{ 6517,-602,-867,-8180,15926,2378,-1618,1771,7633 } },
|
||||
{ "Canon EOS-1D Mark IV", 0, 0x3bb0,
|
||||
{ 6014,-220,-795,-4109,12014,2361,-561,1824,5787 } },
|
||||
@ -1013,11 +825,7 @@
|
||||
{ "Canon EOS-1D Mark II N", 0, 0xe80,
|
||||
{ 6240,-466,-822,-8180,15825,2500,-1801,1938,8042 } },
|
||||
{ "Canon EOS-1D Mark II", 0, 0xe80,
|
||||
{ 6264,-582,-724,-8312,15948,2504,-1744,1919,8664 } },
|
||||
{ "Canon EOS-1DS", 0, 0xe20,
|
||||
@@ -6365,16 +5974,16 @@
|
||||
{ 0 } }, /* don't want the A5 matrix */
|
||||
{ "Canon PowerShot A50", 0, 0,
|
||||
@@ -6359,12 +5966,12 @@
|
||||
{ -5300,9846,1776,3436,684,3939,-5540,9879,6200,-1404,11175,217 } },
|
||||
{ "Canon PowerShot A5", 0, 0,
|
||||
{ -4801,9475,1952,2926,1611,4094,-5259,10164,5947,-1554,10883,547 } },
|
||||
@ -1031,27 +839,19 @@
|
||||
- { 13244,-5501,-1248,-1508,9858,1935,-270,1083,4366 } },
|
||||
+ { "Canon PowerShot G12", 0, 0, /* RT */
|
||||
+ { 12222,-4097,-1380,-2876,11016,2130,-888,1630,4434 } },
|
||||
{ "Canon PowerShot G15", 0, 0,
|
||||
{ 7474,-2301,-567,-4056,11456,2975,-222,716,4181 } },
|
||||
{ "Canon PowerShot G1 X", 0, 0,
|
||||
{ 7378,-1255,-1043,-4088,12251,2048,-876,1946,5805 } },
|
||||
{ "Canon PowerShot G1", 0, 0,
|
||||
{ -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } },
|
||||
{ "Canon PowerShot G2", 0, 0,
|
||||
@@ -6428,11 +6037,11 @@
|
||||
@@ -6428,7 +6035,7 @@
|
||||
{ "Canon PowerShot S3 IS", 0, 0, /* DJC */
|
||||
{ 14062,-5199,-1446,-4712,12470,2243,-1286,2028,4836 } },
|
||||
{ "Canon PowerShot SX1 IS", 0, 0,
|
||||
{ 6578,-259,-502,-5974,13030,3309,-308,1058,4970 } },
|
||||
{ "Canon PowerShot SX110 IS", 0, 0, /* DJC */
|
||||
- { 14134,-5576,-1527,-1991,10719,1273,-1158,1929,3581 } },
|
||||
+ { 14134,-5576,-1527,-1991,10719,1273,-1158,1929,3581 } },
|
||||
{ "Canon PowerShot SX220", 0, 0, /* DJC */
|
||||
{ 13898,-5076,-1447,-1405,10109,1297,-244,1860,3687 } },
|
||||
{ "CASIO EX-S20", 0, 0, /* DJC */
|
||||
{ 11634,-3924,-1128,-4968,12954,2015,-1588,2648,7206 } },
|
||||
{ "CASIO EX-Z750", 0, 0, /* DJC */
|
||||
@@ -6505,12 +6114,12 @@
|
||||
{ 12440,-3954,-1183,-1123,9674,1708,-83,1614,4086 } },
|
||||
{ "FUJIFILM HS20EXR", 0, 0,
|
||||
@@ -6505,8 +6112,8 @@
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
{ "FUJIFILM HS3", 0, 0,
|
||||
{ 13690,-5358,-1474,-3369,11600,1998,-132,1554,4395 } },
|
||||
@ -1062,11 +862,7 @@
|
||||
{ "FUJIFILM X10", 0, 0,
|
||||
{ 13509,-6199,-1254,-4430,12733,1865,-331,1441,5022 } },
|
||||
{ "FUJIFILM X-Pro1", 0, 0,
|
||||
{ 10413,-3996,-993,-3721,11640,2361,-733,1540,6011 } },
|
||||
{ "FUJIFILM X-S1", 0, 0,
|
||||
@@ -6611,28 +6220,26 @@
|
||||
{ 7577,-2166,-926,-7454,15592,1934,-2377,2808,8606 } },
|
||||
{ "NIKON D1X", 0, 0,
|
||||
@@ -6615,24 +6222,24 @@
|
||||
{ 7702,-2245,-975,-9114,17242,1875,-2679,3055,8521 } },
|
||||
{ "NIKON D1", 0, 0, /* multiplied by 2.218750, 1.0, 1.148438 */
|
||||
{ 16772,-4726,-2141,-7611,15713,1972,-2846,3494,9521 } },
|
||||
@ -1082,12 +878,12 @@
|
||||
- { 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } },
|
||||
- { "NIKON D3100", 0, 0,
|
||||
- { 7911,-2167,-813,-5327,13150,2408,-1288,2483,7968 } },
|
||||
- { "NIKON D3200", 0, 0,
|
||||
- { 7013,-1408,-635,-5268,12902,2640,-1470,2801,7379 } },
|
||||
+ { "NIKON D3000", 0, 0, /* RT */
|
||||
+ { 9211,-2521,-104,-6487,14280,2394,-754,1122,8033 } },
|
||||
+ { "NIKON D3100", 0, 0, /* RT */
|
||||
+ { 7729,-2212,-481,-5709,13148,2858,-1295,1908,8936 } },
|
||||
{ "NIKON D3200", 0, 0xfb9,
|
||||
{ 7013,-1408,-635,-5268,12902,2640,-1470,2801,7379 } },
|
||||
{ "NIKON D300", 0, 0,
|
||||
{ 9030,-1992,-715,-8465,16302,2255,-2689,3217,8069 } },
|
||||
{ "NIKON D3X", 0, 0,
|
||||
@ -1099,12 +895,8 @@
|
||||
{ "NIKON D3", 0, 0,
|
||||
{ 8139,-2171,-663,-8747,16541,2295,-1925,2008,8093 } },
|
||||
{ "NIKON D40X", 0, 0,
|
||||
{ 8819,-2543,-911,-9025,16928,2151,-1329,1213,8449 } },
|
||||
{ "NIKON D40", 0, 0,
|
||||
@@ -6645,14 +6252,14 @@
|
||||
{ 8198,-2239,-724,-4871,12389,2798,-1043,2050,7181 } },
|
||||
{ "NIKON D50", 0, 0,
|
||||
{ 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } },
|
||||
@@ -6651,10 +6258,10 @@
|
||||
{ 8178,-2245,-609,-4857,12394,2776,-1207,2086,7298 } },
|
||||
{ "NIKON D60", 0, 0,
|
||||
{ 8736,-2458,-935,-9075,16894,2251,-1354,1242,8263 } },
|
||||
- { "NIKON D7000", 0, 0,
|
||||
@ -1118,11 +910,7 @@
|
||||
{ "NIKON D70", 0, 0,
|
||||
{ 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } },
|
||||
{ "NIKON D800", 0, 0,
|
||||
{ 7866,-2108,-555,-4869,12483,2681,-1176,2069,7501 } },
|
||||
{ "NIKON D80", 0, 0,
|
||||
@@ -6711,12 +6318,12 @@
|
||||
{ 13173,-4732,-1499,-5807,14036,1895,-2045,2452,7142 } },
|
||||
{ "OLYMPUS E-300", 0, 0,
|
||||
@@ -6721,8 +6328,8 @@
|
||||
{ 7828,-1761,-348,-5788,14071,1830,-2853,4518,6557 } },
|
||||
{ "OLYMPUS E-330", 0, 0,
|
||||
{ 8961,-2473,-1084,-7979,15990,2067,-2319,3035,8249 } },
|
||||
@ -1133,15 +921,11 @@
|
||||
{ "OLYMPUS E-3", 0, 0xf99,
|
||||
{ 9487,-2875,-1115,-7533,15606,2010,-1618,2100,7389 } },
|
||||
{ "OLYMPUS E-400", 0, 0,
|
||||
{ 6169,-1483,-21,-7107,14761,2536,-2904,3580,8568 } },
|
||||
{ "OLYMPUS E-410", 0, 0xf6a,
|
||||
@@ -6729,30 +6336,30 @@
|
||||
{ 8136,-1968,-299,-5481,13742,1871,-2556,4205,6630 } },
|
||||
{ "OLYMPUS E-510", 0, 0xf6a,
|
||||
@@ -6739,26 +6346,26 @@
|
||||
{ 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,
|
||||
- { "OLYMPUS E-5", 0, 0xeec,
|
||||
- { 11200,-3783,-1325,-4576,12593,2206,-695,1742,7504 } },
|
||||
+ { "OLYMPUS E-5", 0, 0, /* RT - Colin Walker */
|
||||
+ { 9732,-2629,-999,-4899,12931,2173,-1243,2353,7457 } },
|
||||
@ -1177,14 +961,10 @@
|
||||
+ { 11975,-3351,-1184,-4500,12639,2061,-1230,2353,7009 } },
|
||||
+ { "OLYMPUS E-PL3", 0, 0, /* RT - Colin Walker */
|
||||
+ { 7041,-1794,-336,-3790,11192,2984,-1364,2625,6217 } },
|
||||
{ "OLYMPUS E-PM1", 0, 0,
|
||||
{ 7575,-2159,-571,-3722,11341,2725,-1434,2819,6271 } },
|
||||
{ "OLYMPUS E-M5", 0, 0,
|
||||
{ "OLYMPUS E-PL5", 0, 0xfcb,
|
||||
{ 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },
|
||||
{ "OLYMPUS SP350", 0, 0,
|
||||
@@ -6767,12 +6374,12 @@
|
||||
{ 11597,-4006,-1049,-5432,12799,2957,-1029,1750,6516 } },
|
||||
{ "OLYMPUS SP560UZ", 0, 0xff9,
|
||||
{ "OLYMPUS E-PM1", 0, 0,
|
||||
@@ -6781,8 +6388,8 @@
|
||||
{ 10915,-3677,-982,-5587,12986,2911,-1168,1968,6223 } },
|
||||
{ "OLYMPUS SP570UZ", 0, 0,
|
||||
{ 11522,-4044,-1146,-4736,12172,2904,-988,1829,6039 } },
|
||||
@ -1192,14 +972,10 @@
|
||||
- { 10901,-4095,-1074,-1141,9208,2293,-62,1417,5158 } },
|
||||
+ { "OLYMPUS XZ-1", 0, 0, /* RT - Colin Walker */
|
||||
+ { 8665,-2247,-762,-2424,10372,2382,-1011,2286,5189 } },
|
||||
{ "OLYMPUS XZ-2", 0, 0,
|
||||
{ 9777,-3483,-925,-2886,11297,1800,-602,1663,5134 } },
|
||||
{ "PENTAX *ist DL2", 0, 0,
|
||||
{ 10504,-2438,-1189,-8603,16207,2531,-1022,863,12242 } },
|
||||
{ "PENTAX *ist DL", 0, 0,
|
||||
{ 10829,-2838,-1115,-8339,15817,2696,-837,680,11939 } },
|
||||
{ "PENTAX *ist DS2", 0, 0,
|
||||
@@ -6785,12 +6392,12 @@
|
||||
{ 9566,-2863,-803,-7170,15172,2112,-818,803,9705 } },
|
||||
{ "PENTAX K1", 0, 0,
|
||||
@@ -6801,8 +6408,8 @@
|
||||
{ 11095,-3157,-1324,-8377,15834,2720,-1108,947,11688 } },
|
||||
{ "PENTAX K20D", 0, 0,
|
||||
{ 9427,-2714,-868,-7493,16092,1373,-2199,3264,7180 } },
|
||||
@ -1210,17 +986,16 @@
|
||||
{ "PENTAX K2000", 0, 0,
|
||||
{ 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } },
|
||||
{ "PENTAX K-m", 0, 0,
|
||||
{ 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } },
|
||||
{ "PENTAX K-x", 0, 0,
|
||||
@@ -6843,40 +6450,42 @@
|
||||
{ 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } },
|
||||
{ "Panasonic DMC-LX5", 143, 0,
|
||||
@@ -6861,6 +6468,8 @@
|
||||
{ 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
|
||||
{ "LEICA D-LUX 5", 143, 0,
|
||||
{ 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
|
||||
+ { "Leica Camera AG M9 Digital Camera", 0, 0, /* RT */
|
||||
+ { 7181,-1706,-55,-3557,11409,2450,-621,2072,7533 } },
|
||||
{ "Panasonic DMC-FZ100", 143, 0xfff,
|
||||
{ "Panasonic DMC-LX7", 143, 0,
|
||||
{ 10148,-3743,-991,-2837,11366,1659,-701,1893,4899 } },
|
||||
{ "LEICA D-LUX 6", 143, 0,
|
||||
@@ -6869,8 +6478,8 @@
|
||||
{ 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } },
|
||||
{ "LEICA V-LUX 2", 143, 0xfff,
|
||||
{ 16197,-6146,-1761,-2393,10765,1869,366,2238,5248 } },
|
||||
@ -1230,6 +1005,9 @@
|
||||
+ { 10435,-3208,-72,-2293,10506,2067,-486,1725,4682 } },
|
||||
{ "LEICA V-LUX 3", 143, 0xfff,
|
||||
{ 11904,-4541,-1189,-2355,10899,1662,-296,1586,4289 } },
|
||||
{ "Panasonic DMC-FZ200", 143, 0xfff,
|
||||
@@ -6879,28 +6488,26 @@
|
||||
{ 8112,-2563,-740,-3730,11784,2197,-941,2075,4933 } },
|
||||
{ "Panasonic DMC-FX150", 15, 0xfff,
|
||||
{ 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } },
|
||||
- { "Panasonic DMC-G10", 0, 0,
|
||||
@ -1240,6 +1018,8 @@
|
||||
- { 10113,-3400,-1114,-4765,12683,2317,-377,1437,6710 } },
|
||||
- { "Panasonic DMC-G3", 143, 0xfff,
|
||||
- { 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } },
|
||||
- { "Panasonic DMC-G5", 143, 0xfff,
|
||||
- { 7798,-2562,-740,-3879,11584,2613,-1055,2248,5434 } },
|
||||
- { "Panasonic DMC-GF1", 15, 0xf92,
|
||||
- { 7888,-1902,-1011,-8106,16085,2099,-2353,2866,7330 } },
|
||||
- { "Panasonic DMC-GF2", 143, 0xfff,
|
||||
@ -1270,14 +1050,10 @@
|
||||
+ { 6360,-1557,-375,-4201,11504,3086,-1378,2518,5843 } },
|
||||
+ { "Panasonic DMC-GH2", 15, 0xf95, /* RT - Colin Walker */
|
||||
+ { 6855,-1765,-456,-4223,11600,2996,-1450,2602,5761 } },
|
||||
{ "Panasonic DMC-GH3", 144, 0,
|
||||
{ 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
|
||||
{ "Panasonic DMC-GX1", 143, 0,
|
||||
{ 6763,-1919,-863,-3868,11515,2684,-1216,2387,5879 } },
|
||||
{ "Phase One H 20", 0, 0, /* DJC */
|
||||
{ 1313,1855,-109,-6715,15908,808,-327,1840,6020 } },
|
||||
{ "Phase One H 25", 0, 0,
|
||||
@@ -6937,26 +6546,24 @@
|
||||
{ 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } },
|
||||
{ "SONY DSLR-A580", 128, 0xfeb,
|
||||
@@ -6971,24 +6578,22 @@
|
||||
{ 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } },
|
||||
{ "SONY DSLR-A5", 128, 0xfeb,
|
||||
{ 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } },
|
||||
@ -1291,6 +1067,12 @@
|
||||
- { 5209,-1072,-397,-8845,16120,2919,-1618,1803,8654 } },
|
||||
- { "SONY NEX-5N", 128, 0,
|
||||
- { 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
|
||||
+ { "SONY DSLR-A900", 128, 0, /* RT */
|
||||
+ { 5715,-1433,-410,-5603,12937,2989,-644,1247,8372 } },
|
||||
+ { "SONY NEX-5N", 138, 0, /* RT - Colin Walker */
|
||||
+ { 5130,-1055,-269,-4473,11797,3050,-701,1310,7121 } },
|
||||
{ "SONY NEX-5R", 128, 0,
|
||||
{ 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
|
||||
- { "SONY NEX-3", 138, 0, /* DJC */
|
||||
- { 6907,-1256,-645,-4940,12621,2320,-1710,2581,6230 } },
|
||||
- { "SONY NEX-5", 116, 0, /* DJC */
|
||||
@ -1299,24 +1081,16 @@
|
||||
- { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } },
|
||||
- { "SONY NEX-5", 128, 0, /* Adobe */
|
||||
- { 6549,-1550,-436,-4880,12435,2753,-854,1868,6976 } },
|
||||
+ { "SONY DSLR-A900", 128, 0, /* RT */
|
||||
+ { 5715,-1433,-410,-5603,12937,2989,-644,1247,8372 } },
|
||||
+ { "SONY NEX-5N", 138, 0, /* RT - Colin Walker */
|
||||
+ { 5130,-1055,-269,-4473,11797,3050,-701,1310,7121 } },
|
||||
+ { "SONY NEX-C3", 128, 0, /* RT - Colin Walker */
|
||||
+ { 5130,-1055,-269,-4473,11797,3050,-701,1310,7121 } },
|
||||
+ { "SONY NEX-3", 128, 0, /* RT - Colin Walker */
|
||||
+ { 5145,-741,-123,-4915,12310,2945,-794,1489,6906 } },
|
||||
+ { "SONY NEX-5", 128, 0, /* RT - Colin Walker */
|
||||
+ { 5154,-716,-115,-5065,12506,2882,-988,1715,6800 } },
|
||||
{ "SONY NEX-6", 128, 0,
|
||||
{ 6129,-1545,-418,-4930,12490,2743,-977,1693,6615 } },
|
||||
{ "SONY NEX-7", 128, 0,
|
||||
{ 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
|
||||
{ "SONY NEX", 128, 0, /* NEX-C3, NEX-F3 */
|
||||
{ 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
|
||||
{ "SONY SLT-A33", 128, 0,
|
||||
@@ -6966,15 +6573,15 @@
|
||||
{ "SONY SLT-A37", 128, 0,
|
||||
{ 5991,-1456,-455,-4764,12135,2980,-707,1425,6701 } },
|
||||
@@ -7004,13 +6609,13 @@
|
||||
{ "SONY SLT-A55", 128, 0,
|
||||
{ 5932,-1492,-411,-4813,12285,2856,-741,1524,6739 } },
|
||||
{ "SONY SLT-A57", 128, 0,
|
||||
@ -1327,26 +1101,23 @@
|
||||
- { "SONY SLT-A77", 128, 0,
|
||||
- { 5491,-1192,-363,-4951,12342,2948,-911,1722,7192 } },
|
||||
+ { "SONY SLT-A77", 128, 0, /* RT - Colin Walker */
|
||||
+ { 5126,-830,-261,-4788,12196,2934,-948,1602,7068 } }
|
||||
+ { 5126,-830,-261,-4788,12196,2934,-948,1602,7068 } },
|
||||
{ "SONY SLT-A99", 128, 0,
|
||||
- { 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } },
|
||||
+ { 6344,-1612,-462,-4863,12477,2681,-865,1786,6899 } }
|
||||
};
|
||||
double cam_xyz[4][3];
|
||||
char name[130];
|
||||
int i, j;
|
||||
|
||||
@@ -7218,17 +6825,26 @@
|
||||
hlen = get4();
|
||||
fseek (ifp, 0, SEEK_SET);
|
||||
@@ -7259,13 +6864,20 @@
|
||||
fread (head, 1, 32, ifp);
|
||||
fseek (ifp, 0, SEEK_END);
|
||||
flen = fsize = ftell(ifp);
|
||||
- if ((cp = (char *) memmem (head, 32, "MMMM", 4)) ||
|
||||
- (cp = (char *) memmem (head, 32, "IIII", 4))) {
|
||||
+
|
||||
+ /*RT*/ if (fsize<100000) {
|
||||
+ is_raw = 0;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* RT: changed string constant */
|
||||
+ if ((cp = (char *) memmem (head, 32, (char*)"MMMM", 4)) ||
|
||||
+ (cp = (char *) memmem (head, 32, (char*)"IIII", 4))) {
|
||||
@ -1360,11 +1131,7 @@
|
||||
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);
|
||||
@@ -7269,10 +6885,11 @@
|
||||
}
|
||||
load_raw = &CLASS unpacked_load_raw;
|
||||
@@ -7310,6 +6922,7 @@
|
||||
fseek (ifp, 100+28*(shot_select > 0), SEEK_SET);
|
||||
parse_tiff (data_offset = get4());
|
||||
parse_tiff (thumb_offset+12);
|
||||
@ -1372,50 +1139,25 @@
|
||||
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)) {
|
||||
@@ -7366,11 +6983,11 @@
|
||||
if (height == 2624 && width == 3936) /* Pentax K10D and Samsung GX10 */
|
||||
{ height = 2616; width = 3896; }
|
||||
@@ -7407,7 +7020,7 @@
|
||||
if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */
|
||||
{ height = 3124; width = 4688; filters = 0x16161616; }
|
||||
if (width == 4352 && (!strcmp(model,"K-r") || !strcmp(model,"K-x")))
|
||||
- { width = 4309; filters = 0x16161616; }
|
||||
+/*RT*/ { width = 4308; filters = 0x16161616; }
|
||||
if (width >= 4960 && !strcmp(model,"K-5"))
|
||||
if (width >= 4960 && !strncmp(model,"K-5",3))
|
||||
{ left_margin = 10; width = 4950; filters = 0x16161616; }
|
||||
if (width == 4736 && !strcmp(model,"K-7"))
|
||||
{ height = 3122; width = 4684; filters = 0x16161616; top_margin = 2; }
|
||||
if (width == 7424 && !strcmp(model,"645D"))
|
||||
@@ -7770,11 +7387,11 @@
|
||||
height -= top_margin;
|
||||
width -= left_margin;
|
||||
} else if (is_canon && raw_width == 5920) {
|
||||
height = 3870;
|
||||
width = 5796;
|
||||
- top_margin = 80;
|
||||
+ top_margin = 80;
|
||||
left_margin = 122;
|
||||
} else if (!strcmp(model,"D1")) {
|
||||
cam_mul[0] *= 256/527.0;
|
||||
cam_mul[2] *= 256/317.0;
|
||||
} else if (!strcmp(model,"D1X")) {
|
||||
@@ -7799,11 +7416,11 @@
|
||||
width -= 42;
|
||||
} else if (!strcmp(model,"D5100") ||
|
||||
!strcmp(model,"D7000")) {
|
||||
@@ -7854,7 +7467,7 @@
|
||||
width -= 44;
|
||||
} else if (!strcmp(model,"D3200") ||
|
||||
!strcmp(model,"D600") ||
|
||||
- !strcmp(model,"D800")) {
|
||||
+ !strcmp(model,"D800") || !strcmp(model,"D800E") ) {
|
||||
width -= 46;
|
||||
} else if (!strcmp(model,"D4")) {
|
||||
width -= 52;
|
||||
left_margin = 2;
|
||||
} else if (!strncmp(model,"D40",3) ||
|
||||
@@ -8696,198 +8313,11 @@
|
||||
quit:
|
||||
cmsCloseProfile (hInProfile);
|
||||
@@ -8766,194 +8379,7 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1607,17 +1349,22 @@
|
||||
- if (flip & 1) col = iwidth - 1 - col;
|
||||
- return row * iwidth + col;
|
||||
-}
|
||||
+/* RT: removed unused function */
|
||||
+/* RT: removed unused functions */
|
||||
|
||||
struct tiff_tag {
|
||||
ushort tag, type;
|
||||
int count;
|
||||
union { char c[4]; short s[2]; int i; } val;
|
||||
@@ -8907,572 +8337,13 @@
|
||||
int rat[10];
|
||||
@@ -8976,585 +8402,12 @@
|
||||
unsigned gps[26];
|
||||
char desc[512], make[64], model[64], soft[32], date[20], artist[64];
|
||||
};
|
||||
+/* RT: Delete from here */
|
||||
+/*RT*/#undef SQR
|
||||
+/*RT*/#undef MAX
|
||||
+/*RT*/#undef MIN
|
||||
+/*RT*/#undef ABS
|
||||
+/*RT*/#undef LIM
|
||||
+/*RT*/#undef ULIM
|
||||
+/*RT*/#undef CLIP
|
||||
|
||||
-void CLASS tiff_set (ushort *ntag,
|
||||
- ushort tag, ushort type, int count, int val)
|
||||
@ -2026,6 +1773,10 @@
|
||||
- if (!is_raw) goto next;
|
||||
- shrink = filters && (half_size || (!identify_only &&
|
||||
- (threshold || aber[0] != 1 || aber[2] != 1)));
|
||||
- iheight = (height + shrink) >> shrink;
|
||||
- iwidth = (width + shrink) >> shrink;
|
||||
- if (identify_only) {
|
||||
- if (verbose) {
|
||||
- if (document_mode == 3) {
|
||||
- top_margin = left_margin = fuji_width = 0;
|
||||
- height = raw_height;
|
||||
@ -2035,8 +1786,6 @@
|
||||
- }
|
||||
- iheight = (height + shrink) >> shrink;
|
||||
- iwidth = (width + shrink) >> shrink;
|
||||
- if (identify_only) {
|
||||
- if (verbose) {
|
||||
- if (use_fuji_rotate) {
|
||||
- if (fuji_width) {
|
||||
- fuji_width = (fuji_width - 1 + shrink) >> shrink;
|
||||
@ -2074,8 +1823,6 @@
|
||||
- memcpy (rgb_cam, cmatrix, sizeof cmatrix);
|
||||
- raw_color = 0;
|
||||
- }
|
||||
- image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image);
|
||||
- merror (image, "main()");
|
||||
- if (meta_length) {
|
||||
- meta_data = (char *) malloc (meta_length);
|
||||
- merror (meta_data, "main()");
|
||||
@ -2083,6 +1830,9 @@
|
||||
- if (filters || colors == 1) {
|
||||
- raw_image = (ushort *) calloc ((raw_height+7)*raw_width, 2);
|
||||
- merror (raw_image, "main()");
|
||||
- } else {
|
||||
- image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image);
|
||||
- merror (image, "main()");
|
||||
- }
|
||||
- if (verbose)
|
||||
- fprintf (stderr,_("Loading %s %s image from %s ...\n"),
|
||||
@ -2094,7 +1844,18 @@
|
||||
- if (raw_image && read_from_stdin)
|
||||
- fread (raw_image, 2, raw_height*raw_width, stdin);
|
||||
- else (*load_raw)();
|
||||
- if (document_mode == 3) {
|
||||
- top_margin = left_margin = fuji_width = 0;
|
||||
- height = raw_height;
|
||||
- if (width <= raw_width * 8 / tiff_bps)
|
||||
- width = raw_width * 8 / tiff_bps;
|
||||
- else width = raw_width;
|
||||
- }
|
||||
- iheight = (height + shrink) >> shrink;
|
||||
- iwidth = (width + shrink) >> shrink;
|
||||
- if (raw_image) {
|
||||
- image = (ushort (*)[4]) calloc (iheight*iwidth, sizeof *image);
|
||||
- merror (image, "main()");
|
||||
- crop_masked_pixels();
|
||||
- free (raw_image);
|
||||
- }
|
||||
@ -2186,11 +1947,3 @@
|
||||
- }
|
||||
- return status;
|
||||
-}
|
||||
+/* RT: Delete from here */
|
||||
+/*RT*/#undef SQR
|
||||
+/*RT*/#undef MAX
|
||||
+/*RT*/#undef MIN
|
||||
+/*RT*/#undef ABS
|
||||
+/*RT*/#undef LIM
|
||||
+/*RT*/#undef ULIM
|
||||
+/*RT*/#undef CLIP
|
||||
|
Loading…
x
Reference in New Issue
Block a user