Update to DCRAW 9.07 (without patch file, I don't have the tools)

This commit is contained in:
Oliver Duis 2011-04-17 16:56:47 +02:00
parent 2ecf1b6673
commit 1fe3a28423
2 changed files with 101 additions and 29 deletions

View File

@ -19,11 +19,11 @@
*If you have not modified dcraw.c in any way, a link to my *If you have not modified dcraw.c in any way, a link to my
homepage qualifies as "full source code". homepage qualifies as "full source code".
$Revision: 1.440 $ $Revision: 1.442 $
$Date: 2011/01/29 07:43:38 $ $Date: 2011/04/01 23:30:09 $
*/ */
#define VERSION "9.06" #define VERSION "9.07"
#ifndef _GNU_SOURCE #ifndef _GNU_SOURCE
#define _GNU_SOURCE #define _GNU_SOURCE
@ -1646,7 +1646,7 @@ void CLASS hasselblad_load_raw()
order = 0x4949; order = 0x4949;
ph1_bits(-1); ph1_bits(-1);
for (row=-top_margin; row < height; row++) { for (row=-top_margin; row < height; row++) {
pred[0] = pred[1] = 0x8000; pred[0] = pred[1] = 0x8000 + load_flags;
for (col=-left_margin; col < raw_width-left_margin; col+=2) { for (col=-left_margin; col < raw_width-left_margin; col+=2) {
FORC(2) len[c] = ph1_huff(jh.huff[0]); FORC(2) len[c] = ph1_huff(jh.huff[0]);
FORC(2) { FORC(2) {
@ -4933,7 +4933,7 @@ int CLASS parse_tiff_ifd (int base)
case 513: /* JpegIFOffset */ case 513: /* JpegIFOffset */
case 61447: case 61447:
tiff_ifd[ifd].offset = get4()+base; tiff_ifd[ifd].offset = get4()+base;
if (!tiff_ifd[ifd].bps) { if (!tiff_ifd[ifd].bps && tiff_ifd[ifd].offset > 0) {
fseek (ifp, tiff_ifd[ifd].offset, SEEK_SET); fseek (ifp, tiff_ifd[ifd].offset, SEEK_SET);
if (ljpeg_start (&jh, 1)) { if (ljpeg_start (&jh, 1)) {
tiff_ifd[ifd].comp = 6; tiff_ifd[ifd].comp = 6;
@ -5811,9 +5811,18 @@ void CLASS parse_fuji (int offset)
fuji_layout = fgetc(ifp) >> 7; fuji_layout = fgetc(ifp) >> 7;
load_raw = fgetc(ifp) & 8 ? load_raw = fgetc(ifp) & 8 ?
&CLASS unpacked_load_raw : &CLASS fuji_load_raw; &CLASS unpacked_load_raw : &CLASS fuji_load_raw;
} } else if (tag == 0x2ff0) {
if (tag == 0x2ff0)
FORC4 cam_mul[c ^ 1] = get2(); FORC4 cam_mul[c ^ 1] = get2();
} else if (tag == 0xc000) {
raw_height = order;
order = 0x4949;
width = get4();
height = get4();
order = raw_height;
raw_height = 1;
load_raw = &CLASS packed_load_raw;
load_flags = 16;
}
fseek (ifp, save+len, SEEK_SET); fseek (ifp, save+len, SEEK_SET);
} }
if (!raw_height) { if (!raw_height) {
@ -6108,8 +6117,12 @@ void CLASS adobe_coeff (const char *make, const char *model)
{ 4763,712,-646,-6821,14399,2640,-1921,3276,6561 } }, { 4763,712,-646,-6821,14399,2640,-1921,3276,6561 } },
{ "Canon EOS 550D", 0, 0x3dd7, { "Canon EOS 550D", 0, 0x3dd7,
{ 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } }, { 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } },
{ "Canon EOS 600D", 0, 0x3510, /* DJC */
{ 5589,-1476,-292,-3401,9372,4030,-706,2038,6350 } },
{ "Canon EOS 1000D", 0, 0xe43, { "Canon EOS 1000D", 0, 0xe43,
{ 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } }, { 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } },
{ "Canon EOS 1100D", 0, 0x3510, /* DJC */
{ 5193,-1423,-226,-3414,9273,4142,-679,2103,6808 } },
{ "Canon EOS-1Ds Mark III", 0, 0x3bb0, { "Canon EOS-1Ds Mark III", 0, 0x3bb0,
{ 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } }, { 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } },
{ "Canon EOS-1Ds Mark II", 0, 0xe80, { "Canon EOS-1Ds Mark II", 0, 0xe80,
@ -6554,7 +6567,7 @@ void CLASS adobe_coeff (const char *make, const char *model)
{ 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } },
{ "Panasonic DMC-LX3", 15, 0, { "Panasonic DMC-LX3", 15, 0,
{ 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } },
{ "LEICA D-LUX4", 15, 0, { "LEICA D-LUX 4", 15, 0,
{ 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } },
{ "Panasonic DMC-LX5", 143, 0, { "Panasonic DMC-LX5", 143, 0,
{ 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } }, { 10909,-4295,-948,-1333,9306,2399,22,1738,4582 } },
@ -6616,6 +6629,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
{ 6038,-1484,-578,-9146,16746,2513,-875,746,7217 } }, { 6038,-1484,-578,-9146,16746,2513,-875,746,7217 } },
{ "SONY DSLR-A380", 0, 0, { "SONY DSLR-A380", 0, 0,
{ 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } }, { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
{ "SONY DSLR-A390", 0, 0,
{ 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
{ "SONY DSLR-A450", 128, 0xfeb, { "SONY DSLR-A450", 128, 0xfeb,
{ 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } },
{ "SONY DSLR-A580", 128, 0xfeb, { "SONY DSLR-A580", 128, 0xfeb,
@ -7314,6 +7329,12 @@ canon_a5:
if (unique_id == 0x80000176) if (unique_id == 0x80000176)
adobe_coeff ("Canon","EOS 450D"); adobe_coeff ("Canon","EOS 450D");
goto canon_cr2; goto canon_cr2;
} else if (is_canon && raw_width == 4352) {
top_margin = 18;
left_margin = 62;
if (unique_id == 0x80000288)
adobe_coeff ("Canon","EOS 1100D");
goto canon_cr2;
} else if (is_canon && raw_width == 4476) { } else if (is_canon && raw_width == 4476) {
top_margin = 34; top_margin = 34;
left_margin = 90; left_margin = 90;
@ -7339,6 +7360,8 @@ canon_a5:
left_margin = 142; left_margin = 142;
if (unique_id == 0x80000270) if (unique_id == 0x80000270)
adobe_coeff ("Canon","EOS 550D"); adobe_coeff ("Canon","EOS 550D");
if (unique_id == 0x80000286)
adobe_coeff ("Canon","EOS 600D");
goto canon_cr2; goto canon_cr2;
} else if (is_canon && raw_width == 5360) { } else if (is_canon && raw_width == 5360) {
top_margin = 51; top_margin = 51;
@ -7518,8 +7541,8 @@ cp_e2500:
maximum = 0x3e00; maximum = 0x3e00;
if (is_raw == 2 && shot_select) if (is_raw == 2 && shot_select)
maximum = 0x2f00; maximum = 0x2f00;
top_margin = (raw_height - height)/2; top_margin = (raw_height - height) >> 2 << 1;
left_margin = (raw_width - width )/2; left_margin = (raw_width - width ) >> 2 << 1;
if (is_raw == 2) if (is_raw == 2)
data_offset += (shot_select > 0) * ( fuji_layout ? data_offset += (shot_select > 0) * ( fuji_layout ?
(raw_width *= 2) : raw_height*raw_width*2 ); (raw_width *= 2) : raw_height*raw_width*2 );
@ -7625,18 +7648,22 @@ konica_400z:
load_flags = 32; load_flags = 32;
} else if (!strcmp(model,"EX1")) { } else if (!strcmp(model,"EX1")) {
order = 0x4949; order = 0x4949;
height = 2760; height -= 20;
top_margin = 2; top_margin = 2;
if ((width -= 6) > 3682) { if ((width -= 6) > 3682) {
height = 2750; height -= 10;
width = 3668; width -= 46;
top_margin = 8; top_margin = 8;
} }
} else if (!strcmp(model,"WB2000")) { } else if (!strcmp(model,"WB2000")) {
order = 0x4949; order = 0x4949;
height -= 3; height -= 3;
width -= 10;
top_margin = 2; top_margin = 2;
if ((width -= 10) > 3718) {
height -= 28;
width -= 56;
top_margin = 8;
}
} else if (fsize == 20487168) { } else if (fsize == 20487168) {
height = 2808; height = 2808;
width = 3648; width = 3648;
@ -7740,6 +7767,13 @@ wb550:
top_margin = 4; top_margin = 4;
left_margin = 41; left_margin = 41;
filters = 0x61616161; filters = 0x61616161;
} else if (raw_width == 9044) {
height = 6716;
width = 8964;
top_margin = 8;
left_margin = 40;
black += load_flags = 256;
maximum = 0x8101;
} else if (raw_width == 4090) { } else if (raw_width == 4090) {
strcpy (model, "V96C"); strcpy (model, "V96C");
height -= (top_margin = 6); height -= (top_margin = 6);
@ -7762,8 +7796,10 @@ wb550:
if (ljpeg_start (&jh, 1) && jh.bits == 15) if (ljpeg_start (&jh, 1) && jh.bits == 15)
maximum = 0x1fff; maximum = 0x1fff;
if (tiff_samples > 1) filters = 0; if (tiff_samples > 1) filters = 0;
if (tiff_samples > 1 || tile_length < raw_height) if (tiff_samples > 1 || tile_length < raw_height) {
load_raw = &CLASS leaf_hdr_load_raw; load_raw = &CLASS leaf_hdr_load_raw;
raw_width = tile_width;
}
if ((width | height) == 2048) { if ((width | height) == 2048) {
if (tiff_samples == 1) { if (tiff_samples == 1) {
filters = 1; filters = 1;

View File

@ -28,11 +28,11 @@
*If you have not modified dcraw.c in any way, a link to my *If you have not modified dcraw.c in any way, a link to my
homepage qualifies as "full source code". homepage qualifies as "full source code".
$Revision: 1.440 $ $Revision: 1.442 $
$Date: 2011/01/29 07:43:38 $ $Date: 2011/04/01 23:30:09 $
*/ */
#define VERSION "9.06" #define VERSION "9.07"
#ifndef _GNU_SOURCE #ifndef _GNU_SOURCE
#define _GNU_SOURCE #define _GNU_SOURCE
@ -1657,7 +1657,7 @@ void CLASS hasselblad_load_raw()
order = 0x4949; order = 0x4949;
ph1_bits(-1); ph1_bits(-1);
for (row=-top_margin; row < height; row++) { for (row=-top_margin; row < height; row++) {
pred[0] = pred[1] = 0x8000; pred[0] = pred[1] = 0x8000 + load_flags;
for (col=-left_margin; col < raw_width-left_margin; col+=2) { for (col=-left_margin; col < raw_width-left_margin; col+=2) {
FORC(2) len[c] = ph1_huff(jh.huff[0]); FORC(2) len[c] = ph1_huff(jh.huff[0]);
FORC(2) { FORC(2) {
@ -4944,7 +4944,7 @@ int CLASS parse_tiff_ifd (int base)
case 513: /* JpegIFOffset */ case 513: /* JpegIFOffset */
case 61447: case 61447:
tiff_ifd[ifd].offset = get4()+base; tiff_ifd[ifd].offset = get4()+base;
if (!tiff_ifd[ifd].bps) { if (!tiff_ifd[ifd].bps && tiff_ifd[ifd].offset > 0) {
fseek (ifp, tiff_ifd[ifd].offset, SEEK_SET); fseek (ifp, tiff_ifd[ifd].offset, SEEK_SET);
if (ljpeg_start (&jh, 1)) { if (ljpeg_start (&jh, 1)) {
tiff_ifd[ifd].comp = 6; tiff_ifd[ifd].comp = 6;
@ -5826,9 +5826,18 @@ void CLASS parse_fuji (int offset)
fuji_layout = fgetc(ifp) >> 7; fuji_layout = fgetc(ifp) >> 7;
load_raw = fgetc(ifp) & 8 ? load_raw = fgetc(ifp) & 8 ?
&CLASS unpacked_load_raw : &CLASS fuji_load_raw; &CLASS unpacked_load_raw : &CLASS fuji_load_raw;
} } else if (tag == 0x2ff0) {
if (tag == 0x2ff0)
FORC4 cam_mul[c ^ 1] = get2(); FORC4 cam_mul[c ^ 1] = get2();
} else if (tag == 0xc000) {
raw_height = order;
order = 0x4949;
width = get4();
height = get4();
order = raw_height;
raw_height = 1;
load_raw = &CLASS packed_load_raw;
load_flags = 16;
}
fseek (ifp, save+len, SEEK_SET); fseek (ifp, save+len, SEEK_SET);
} }
if (!raw_height) { if (!raw_height) {
@ -6127,8 +6136,12 @@ void CLASS adobe_coeff (const char *make, const char *model)
{ 4763,712,-646,-6821,14399,2640,-1921,3276,6561 } }, { 4763,712,-646,-6821,14399,2640,-1921,3276,6561 } },
{ "Canon EOS 550D", 0, 0x3dd7, { "Canon EOS 550D", 0, 0x3dd7,
{ 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } }, { 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } },
{ "Canon EOS 600D", 0, 0x3510, /* DJC */
{ 5589,-1476,-292,-3401,9372,4030,-706,2038,6350 } },
{ "Canon EOS 1000D", 0, 0xe43, { "Canon EOS 1000D", 0, 0xe43,
{ 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } }, { 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } },
{ "Canon EOS 1100D", 0, 0x3510, /* DJC */
{ 5193,-1423,-226,-3414,9273,4142,-679,2103,6808 } },
{ "Canon EOS-1Ds Mark III", 0, 0x3bb0, { "Canon EOS-1Ds Mark III", 0, 0x3bb0,
{ 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } }, { 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } },
{ "Canon EOS-1Ds Mark II", 0, 0xe80, { "Canon EOS-1Ds Mark II", 0, 0xe80,
@ -6635,6 +6648,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
{ 6038,-1484,-578,-9146,16746,2513,-875,746,7217 } }, { 6038,-1484,-578,-9146,16746,2513,-875,746,7217 } },
{ "SONY DSLR-A380", 0, 0, { "SONY DSLR-A380", 0, 0,
{ 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } }, { 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
{ "SONY DSLR-A390", 0, 0,
{ 6038,-1484,-579,-9145,16746,2512,-875,746,7218 } },
{ "SONY DSLR-A450", 128, 0xfeb, { "SONY DSLR-A450", 128, 0xfeb,
{ 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } }, { 4950,-580,-103,-5228,12542,3029,-709,1435,7371 } },
{ "SONY DSLR-A580", 128, 0xfeb, { "SONY DSLR-A580", 128, 0xfeb,
@ -7342,6 +7357,12 @@ canon_a5:
if (unique_id == 0x80000176) if (unique_id == 0x80000176)
adobe_coeff ("Canon","EOS 450D"); adobe_coeff ("Canon","EOS 450D");
goto canon_cr2; goto canon_cr2;
} else if (is_canon && raw_width == 4352) {
top_margin = 18;
left_margin = 62;
if (unique_id == 0x80000288)
adobe_coeff ("Canon","EOS 1100D");
goto canon_cr2;
} else if (is_canon && raw_width == 4476) { } else if (is_canon && raw_width == 4476) {
top_margin = 34; top_margin = 34;
left_margin = 90; left_margin = 90;
@ -7367,6 +7388,8 @@ canon_a5:
left_margin = 142; left_margin = 142;
if (unique_id == 0x80000270) if (unique_id == 0x80000270)
adobe_coeff ("Canon","EOS 550D"); adobe_coeff ("Canon","EOS 550D");
if (unique_id == 0x80000286)
adobe_coeff ("Canon","EOS 600D");
goto canon_cr2; goto canon_cr2;
} else if (is_canon && raw_width == 5360) { } else if (is_canon && raw_width == 5360) {
top_margin = 51; top_margin = 51;
@ -7549,8 +7572,8 @@ cp_e2500:
maximum = 0x3e00; maximum = 0x3e00;
if (is_raw == 2 && shot_select) if (is_raw == 2 && shot_select)
maximum = 0x2f00; maximum = 0x2f00;
top_margin = (raw_height - height)/2; top_margin = (raw_height - height) >> 2 << 1;
left_margin = (raw_width - width )/2; left_margin = (raw_width - width ) >> 2 << 1;
if (is_raw == 2) if (is_raw == 2)
data_offset += (shot_select > 0) * ( fuji_layout ? data_offset += (shot_select > 0) * ( fuji_layout ?
(raw_width *= 2) : raw_height*raw_width*2 ); (raw_width *= 2) : raw_height*raw_width*2 );
@ -7656,18 +7679,22 @@ konica_400z:
load_flags = 32; load_flags = 32;
} else if (!strcmp(model,"EX1")) { } else if (!strcmp(model,"EX1")) {
order = 0x4949; order = 0x4949;
height = 2760; height -= 20;
top_margin = 2; top_margin = 2;
if ((width -= 6) > 3682) { if ((width -= 6) > 3682) {
height = 2750; height -= 10;
width = 3668; width -= 46;
top_margin = 8; top_margin = 8;
} }
} else if (!strcmp(model,"WB2000")) { } else if (!strcmp(model,"WB2000")) {
order = 0x4949; order = 0x4949;
height -= 3; height -= 3;
width -= 10;
top_margin = 2; top_margin = 2;
if ((width -= 10) > 3718) {
height -= 28;
width -= 56;
top_margin = 8;
}
} else if (fsize == 20487168) { } else if (fsize == 20487168) {
height = 2808; height = 2808;
width = 3648; width = 3648;
@ -7771,6 +7798,13 @@ wb550:
top_margin = 4; top_margin = 4;
left_margin = 41; left_margin = 41;
filters = 0x61616161; filters = 0x61616161;
} else if (raw_width == 9044) {
height = 6716;
width = 8964;
top_margin = 8;
left_margin = 40;
black += load_flags = 256;
maximum = 0x8101;
} else if (raw_width == 4090) { } else if (raw_width == 4090) {
strcpy (model, "V96C"); strcpy (model, "V96C");
height -= (top_margin = 6); height -= (top_margin = 6);
@ -7793,8 +7827,10 @@ wb550:
if (ljpeg_start (&jh, 1) && jh.bits == 15) if (ljpeg_start (&jh, 1) && jh.bits == 15)
maximum = 0x1fff; maximum = 0x1fff;
if (tiff_samples > 1) filters = 0; if (tiff_samples > 1) filters = 0;
if (tiff_samples > 1 || tile_length < raw_height) if (tiff_samples > 1 || tile_length < raw_height) {
load_raw = &CLASS leaf_hdr_load_raw; load_raw = &CLASS leaf_hdr_load_raw;
raw_width = tile_width;
}
if ((width | height) == 2048) { if ((width | height) == 2048) {
if (tiff_samples == 1) { if (tiff_samples == 1) {
filters = 1; filters = 1;