Fixed P40/P65+ decoding bug (will come in next update of dcraw)
This commit is contained in:
parent
92c76f1ac0
commit
a288237328
@ -1479,14 +1479,15 @@ void CLASS phase_one_correct()
|
|||||||
}
|
}
|
||||||
for (qr = 0; qr < 2; qr++) {
|
for (qr = 0; qr < 2; qr++) {
|
||||||
for (qc = 0; qc < 2; qc++) {
|
for (qc = 0; qc < 2; qc++) {
|
||||||
int cx[18], cf[18];
|
int cx[19], cf[19];
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
cx[1+i] = lc[qr][qc][i];
|
cx[1+i] = lc[qr][qc][i];
|
||||||
cf[1+i] = ref[i];
|
cf[1+i] = ref[i];
|
||||||
}
|
}
|
||||||
cx[0] = cf[0] = 0;
|
cx[0] = cf[0] = 0;
|
||||||
cx[17] = cf[17] = ((unsigned int)ref[15] * 65535) / lc[qr][qc][15];
|
cx[17] = cf[17] = ((unsigned int)ref[15] * 65535) / lc[qr][qc][15];
|
||||||
cubic_spline(cx, cf, 18);
|
cx[18] = cf[18] = 65535;
|
||||||
|
cubic_spline(cx, cf, 19);
|
||||||
|
|
||||||
for (row = (qr ? ph1.split_row : 0);
|
for (row = (qr ? ph1.split_row : 0);
|
||||||
row < (qr ? raw_height : ph1.split_row); row++)
|
row < (qr ? raw_height : ph1.split_row); row++)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
--- dcraw.c 2014-07-09 20:35:27 +0000
|
--- dcraw.c 2014-07-24 16:15:36.700261700 +0200
|
||||||
+++ dcraw.cc 2014-07-09 10:46:35 +0000
|
+++ dcraw.cc 2014-08-19 16:28:10.968569879 +0200
|
||||||
@@ -1,3 +1,15 @@
|
@@ -1,3 +1,15 @@
|
||||||
+/*RT*/#include <glib.h>
|
+/*RT*/#include <glib.h>
|
||||||
+/*RT*/#include <glib/gstdio.h>
|
+/*RT*/#include <glib/gstdio.h>
|
||||||
@ -213,7 +213,25 @@
|
|||||||
|
|
||||||
void CLASS ppm_thumb()
|
void CLASS ppm_thumb()
|
||||||
{
|
{
|
||||||
@@ -1634,10 +1597,10 @@
|
@@ -1516,14 +1479,15 @@
|
||||||
|
}
|
||||||
|
for (qr = 0; qr < 2; qr++) {
|
||||||
|
for (qc = 0; qc < 2; qc++) {
|
||||||
|
- int cx[18], cf[18];
|
||||||
|
+ int cx[19], cf[19];
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
cx[1+i] = lc[qr][qc][i];
|
||||||
|
cf[1+i] = ref[i];
|
||||||
|
}
|
||||||
|
cx[0] = cf[0] = 0;
|
||||||
|
cx[17] = cf[17] = ((unsigned int)ref[15] * 65535) / lc[qr][qc][15];
|
||||||
|
- cubic_spline(cx, cf, 18);
|
||||||
|
+ cx[18] = cf[18] = 65535;
|
||||||
|
+ cubic_spline(cx, cf, 19);
|
||||||
|
|
||||||
|
for (row = (qr ? ph1.split_row : 0);
|
||||||
|
row < (qr ? raw_height : ph1.split_row); row++)
|
||||||
|
@@ -1634,10 +1598,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,7 +245,7 @@
|
|||||||
unsigned c;
|
unsigned c;
|
||||||
|
|
||||||
if (nbits == -1)
|
if (nbits == -1)
|
||||||
@@ -1903,10 +1866,10 @@
|
@@ -1903,10 +1867,10 @@
|
||||||
maximum = curve[0x3ff];
|
maximum = curve[0x3ff];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,7 +259,7 @@
|
|||||||
int byte;
|
int byte;
|
||||||
|
|
||||||
if (!nbits) return vbits=0;
|
if (!nbits) return vbits=0;
|
||||||
@@ -2195,11 +2158,11 @@
|
@@ -2195,11 +2159,11 @@
|
||||||
METHODDEF(boolean)
|
METHODDEF(boolean)
|
||||||
fill_input_buffer (j_decompress_ptr cinfo)
|
fill_input_buffer (j_decompress_ptr cinfo)
|
||||||
{
|
{
|
||||||
@ -255,7 +273,7 @@
|
|||||||
cinfo->src->next_input_byte = jpeg_buffer;
|
cinfo->src->next_input_byte = jpeg_buffer;
|
||||||
cinfo->src->bytes_in_buffer = nbytes;
|
cinfo->src->bytes_in_buffer = nbytes;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -2524,10 +2487,9 @@
|
@@ -2524,10 +2488,9 @@
|
||||||
maximum = (1 << (thumb_misc & 31)) - 1;
|
maximum = (1 << (thumb_misc & 31)) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,7 +286,7 @@
|
|||||||
if (start) {
|
if (start) {
|
||||||
for (p=0; p < 4; p++)
|
for (p=0; p < 4; p++)
|
||||||
pad[p] = key = key * 48828125 + 1;
|
pad[p] = key = key * 48828125 + 1;
|
||||||
@@ -2612,11 +2574,13 @@
|
@@ -2612,11 +2575,13 @@
|
||||||
bit += 7;
|
bit += 7;
|
||||||
}
|
}
|
||||||
for (i=0; i < 16; i++, col+=2)
|
for (i=0; i < 16; i++, col+=2)
|
||||||
@ -283,7 +301,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CLASS samsung_load_raw()
|
void CLASS samsung_load_raw()
|
||||||
@@ -2863,7 +2827,7 @@
|
@@ -2863,7 +2828,7 @@
|
||||||
|
|
||||||
void CLASS foveon_decoder (unsigned size, unsigned code)
|
void CLASS foveon_decoder (unsigned size, unsigned code)
|
||||||
{
|
{
|
||||||
@ -292,7 +310,7 @@
|
|||||||
struct decode *cur;
|
struct decode *cur;
|
||||||
int i, len;
|
int i, len;
|
||||||
|
|
||||||
@@ -3586,10 +3550,13 @@
|
@@ -3586,10 +3551,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -308,7 +326,7 @@
|
|||||||
if (mask[0][3] > 0) goto mask_set;
|
if (mask[0][3] > 0) goto mask_set;
|
||||||
if (load_raw == &CLASS canon_load_raw ||
|
if (load_raw == &CLASS canon_load_raw ||
|
||||||
load_raw == &CLASS lossless_jpeg_load_raw) {
|
load_raw == &CLASS lossless_jpeg_load_raw) {
|
||||||
@@ -4191,239 +4158,8 @@
|
@@ -4191,239 +4159,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -549,7 +567,7 @@
|
|||||||
|
|
||||||
void CLASS cielab (ushort rgb[3], short lab[3])
|
void CLASS cielab (ushort rgb[3], short lab[3])
|
||||||
{
|
{
|
||||||
@@ -4684,112 +4420,7 @@
|
@@ -4684,112 +4421,7 @@
|
||||||
}
|
}
|
||||||
#undef fcol
|
#undef fcol
|
||||||
|
|
||||||
@ -662,7 +680,7 @@
|
|||||||
#undef TS
|
#undef TS
|
||||||
|
|
||||||
void CLASS median_filter()
|
void CLASS median_filter()
|
||||||
@@ -4959,7 +4590,7 @@
|
@@ -4959,7 +4591,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,7 +689,7 @@
|
|||||||
|
|
||||||
void CLASS parse_makernote (int base, int uptag)
|
void CLASS parse_makernote (int base, int uptag)
|
||||||
{
|
{
|
||||||
@@ -5116,7 +4747,8 @@
|
@@ -5116,7 +4748,8 @@
|
||||||
cam_mul[2] = get4() << 2;
|
cam_mul[2] = get4() << 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -681,7 +699,7 @@
|
|||||||
fread (model, 64, 1, ifp);
|
fread (model, 64, 1, ifp);
|
||||||
if (strstr(make,"PENTAX")) {
|
if (strstr(make,"PENTAX")) {
|
||||||
if (tag == 0x1b) tag = 0x1018;
|
if (tag == 0x1b) tag = 0x1018;
|
||||||
@@ -5367,7 +4999,7 @@
|
@@ -5367,7 +5000,7 @@
|
||||||
{ "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22",
|
{ "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22",
|
||||||
"Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65",
|
"Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65",
|
||||||
"Aptus 54S","Aptus 65S","Aptus 75S","AFi 5","AFi 6","AFi 7",
|
"Aptus 54S","Aptus 65S","Aptus 75S","AFi 5","AFi 6","AFi 7",
|
||||||
@ -690,7 +708,7 @@
|
|||||||
"","","","","Aptus-II 10R","Aptus-II 8","","Aptus-II 12","","AFi-II 12" };
|
"","","","","Aptus-II 10R","Aptus-II 8","","Aptus-II 12","","AFi-II 12" };
|
||||||
float romm_cam[3][3];
|
float romm_cam[3][3];
|
||||||
|
|
||||||
@@ -5456,6 +5088,8 @@
|
@@ -5456,6 +5089,8 @@
|
||||||
wbi = -2;
|
wbi = -2;
|
||||||
}
|
}
|
||||||
if (tag == 2118) wbtemp = getint(type);
|
if (tag == 2118) wbtemp = getint(type);
|
||||||
@ -699,7 +717,7 @@
|
|||||||
if (tag == 2130 + wbi)
|
if (tag == 2130 + wbi)
|
||||||
FORC3 mul[c] = getreal(type);
|
FORC3 mul[c] = getreal(type);
|
||||||
if (tag == 2140 + wbi && wbi >= 0)
|
if (tag == 2140 + wbi && wbi >= 0)
|
||||||
@@ -5475,8 +5109,8 @@
|
@@ -5475,8 +5110,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -710,7 +728,7 @@
|
|||||||
|
|
||||||
int CLASS parse_tiff_ifd (int base)
|
int CLASS parse_tiff_ifd (int base)
|
||||||
{
|
{
|
||||||
@@ -5489,7 +5123,7 @@
|
@@ -5489,7 +5124,7 @@
|
||||||
unsigned sony_curve[] = { 0,0,0,0,0,4095 };
|
unsigned sony_curve[] = { 0,0,0,0,0,4095 };
|
||||||
unsigned *buf, sony_offset=0, sony_length=0, sony_key=0;
|
unsigned *buf, sony_offset=0, sony_length=0, sony_key=0;
|
||||||
struct jhead jh;
|
struct jhead jh;
|
||||||
@ -719,7 +737,7 @@
|
|||||||
|
|
||||||
if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0])
|
if (tiff_nifds >= sizeof tiff_ifd / sizeof tiff_ifd[0])
|
||||||
return 1;
|
return 1;
|
||||||
@@ -5564,7 +5198,8 @@
|
@@ -5564,7 +5199,8 @@
|
||||||
fgets (make, 64, ifp);
|
fgets (make, 64, ifp);
|
||||||
break;
|
break;
|
||||||
case 272: /* Model */
|
case 272: /* Model */
|
||||||
@ -729,7 +747,7 @@
|
|||||||
break;
|
break;
|
||||||
case 280: /* Panasonic RW2 offset */
|
case 280: /* Panasonic RW2 offset */
|
||||||
if (type != 4) break;
|
if (type != 4) break;
|
||||||
@@ -5620,6 +5255,9 @@
|
@@ -5620,6 +5256,9 @@
|
||||||
case 315: /* Artist */
|
case 315: /* Artist */
|
||||||
fread (artist, 64, 1, ifp);
|
fread (artist, 64, 1, ifp);
|
||||||
break;
|
break;
|
||||||
@ -739,7 +757,7 @@
|
|||||||
case 322: /* TileWidth */
|
case 322: /* TileWidth */
|
||||||
tiff_ifd[ifd].tile_width = getint(type);
|
tiff_ifd[ifd].tile_width = getint(type);
|
||||||
break;
|
break;
|
||||||
@@ -5635,6 +5273,9 @@
|
@@ -5635,6 +5274,9 @@
|
||||||
is_raw = 5;
|
is_raw = 5;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -749,7 +767,7 @@
|
|||||||
case 330: /* SubIFDs */
|
case 330: /* SubIFDs */
|
||||||
if (!strcmp(model,"DSLR-A100") && tiff_ifd[ifd].width == 3872) {
|
if (!strcmp(model,"DSLR-A100") && tiff_ifd[ifd].width == 3872) {
|
||||||
load_raw = &CLASS sony_arw_load_raw;
|
load_raw = &CLASS sony_arw_load_raw;
|
||||||
@@ -5648,6 +5289,9 @@
|
@@ -5648,6 +5290,9 @@
|
||||||
fseek (ifp, i+4, SEEK_SET);
|
fseek (ifp, i+4, SEEK_SET);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -759,7 +777,7 @@
|
|||||||
case 400:
|
case 400:
|
||||||
strcpy (make, "Sarnoff");
|
strcpy (make, "Sarnoff");
|
||||||
maximum = 0xfff;
|
maximum = 0xfff;
|
||||||
@@ -5828,6 +5472,9 @@
|
@@ -5828,6 +5473,9 @@
|
||||||
if (!make[0]) strcpy (make, "DNG");
|
if (!make[0]) strcpy (make, "DNG");
|
||||||
is_raw = 1;
|
is_raw = 1;
|
||||||
break;
|
break;
|
||||||
@ -769,7 +787,7 @@
|
|||||||
case 50710: /* CFAPlaneColor */
|
case 50710: /* CFAPlaneColor */
|
||||||
if (filters == 9) break;
|
if (filters == 9) break;
|
||||||
if (len > 4) len = 4;
|
if (len > 4) len = 4;
|
||||||
@@ -5859,10 +5506,21 @@
|
@@ -5859,10 +5507,21 @@
|
||||||
case 61450:
|
case 61450:
|
||||||
cblack[4] = cblack[5] = MIN(sqrt(len),64);
|
cblack[4] = cblack[5] = MIN(sqrt(len),64);
|
||||||
case 50714: /* BlackLevel */
|
case 50714: /* BlackLevel */
|
||||||
@ -795,7 +813,7 @@
|
|||||||
case 50715: /* BlackLevelDeltaH */
|
case 50715: /* BlackLevelDeltaH */
|
||||||
case 50716: /* BlackLevelDeltaV */
|
case 50716: /* BlackLevelDeltaV */
|
||||||
for (num=i=0; i < len; i++)
|
for (num=i=0; i < len; i++)
|
||||||
@@ -5940,12 +5598,15 @@
|
@@ -5940,12 +5599,15 @@
|
||||||
fread (buf, sony_length, 1, ifp);
|
fread (buf, sony_length, 1, ifp);
|
||||||
sony_decrypt (buf, sony_length/4, 1, sony_key);
|
sony_decrypt (buf, sony_length/4, 1, sony_key);
|
||||||
sfp = ifp;
|
sfp = ifp;
|
||||||
@ -817,7 +835,7 @@
|
|||||||
ifp = sfp;
|
ifp = sfp;
|
||||||
free (buf);
|
free (buf);
|
||||||
}
|
}
|
||||||
@@ -5969,6 +5630,7 @@
|
@@ -5969,6 +5631,7 @@
|
||||||
int CLASS parse_tiff (int base)
|
int CLASS parse_tiff (int base)
|
||||||
{
|
{
|
||||||
int doff;
|
int doff;
|
||||||
@ -825,7 +843,7 @@
|
|||||||
|
|
||||||
fseek (ifp, base, SEEK_SET);
|
fseek (ifp, base, SEEK_SET);
|
||||||
order = get2();
|
order = get2();
|
||||||
@@ -6046,7 +5708,7 @@
|
@@ -6046,7 +5709,7 @@
|
||||||
case 8: load_raw = &CLASS eight_bit_load_raw; break;
|
case 8: load_raw = &CLASS eight_bit_load_raw; break;
|
||||||
case 12: if (tiff_ifd[raw].phint == 2)
|
case 12: if (tiff_ifd[raw].phint == 2)
|
||||||
load_flags = 6;
|
load_flags = 6;
|
||||||
@ -834,7 +852,7 @@
|
|||||||
case 14: load_flags = 0;
|
case 14: load_flags = 0;
|
||||||
case 16: load_raw = &CLASS unpacked_load_raw;
|
case 16: load_raw = &CLASS unpacked_load_raw;
|
||||||
if (!strncmp(make,"OLYMPUS",7) &&
|
if (!strncmp(make,"OLYMPUS",7) &&
|
||||||
@@ -6079,6 +5741,7 @@
|
@@ -6079,6 +5742,7 @@
|
||||||
case 32803: load_raw = &CLASS kodak_65000_load_raw;
|
case 32803: load_raw = &CLASS kodak_65000_load_raw;
|
||||||
}
|
}
|
||||||
case 32867: case 34892: break;
|
case 32867: case 34892: break;
|
||||||
@ -842,7 +860,7 @@
|
|||||||
default: is_raw = 0;
|
default: is_raw = 0;
|
||||||
}
|
}
|
||||||
if (!dng_version)
|
if (!dng_version)
|
||||||
@@ -6164,7 +5827,7 @@
|
@@ -6164,7 +5828,7 @@
|
||||||
{
|
{
|
||||||
const char *file, *ext;
|
const char *file, *ext;
|
||||||
char *jname, *jfile, *jext;
|
char *jname, *jfile, *jext;
|
||||||
@ -851,7 +869,7 @@
|
|||||||
|
|
||||||
ext = strrchr (ifname, '.');
|
ext = strrchr (ifname, '.');
|
||||||
file = strrchr (ifname, '/');
|
file = strrchr (ifname, '/');
|
||||||
@@ -6186,13 +5849,14 @@
|
@@ -6186,13 +5850,14 @@
|
||||||
} else
|
} else
|
||||||
while (isdigit(*--jext)) {
|
while (isdigit(*--jext)) {
|
||||||
if (*jext != '9') {
|
if (*jext != '9') {
|
||||||
@ -868,7 +886,7 @@
|
|||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf (stderr,_("Reading metadata from %s ...\n"), jname);
|
fprintf (stderr,_("Reading metadata from %s ...\n"), jname);
|
||||||
parse_tiff (12);
|
parse_tiff (12);
|
||||||
@@ -6537,7 +6201,11 @@
|
@@ -6537,7 +6202,11 @@
|
||||||
order = get2();
|
order = get2();
|
||||||
hlen = get4();
|
hlen = get4();
|
||||||
if (get4() == 0x48454150) /* "HEAP" */
|
if (get4() == 0x48454150) /* "HEAP" */
|
||||||
@ -880,7 +898,7 @@
|
|||||||
if (parse_tiff (save+6)) apply_tiff();
|
if (parse_tiff (save+6)) apply_tiff();
|
||||||
fseek (ifp, save+len, SEEK_SET);
|
fseek (ifp, save+len, SEEK_SET);
|
||||||
}
|
}
|
||||||
@@ -6789,7 +6457,8 @@
|
@@ -6789,7 +6458,8 @@
|
||||||
{
|
{
|
||||||
static const struct {
|
static const struct {
|
||||||
const char *prefix;
|
const char *prefix;
|
||||||
@ -890,7 +908,7 @@
|
|||||||
} table[] = {
|
} table[] = {
|
||||||
{ "AgfaPhoto DC-833m", 0, 0, /* DJC */
|
{ "AgfaPhoto DC-833m", 0, 0, /* DJC */
|
||||||
{ 11438,-3762,-1115,-2409,9914,2497,-1227,2295,5300 } },
|
{ 11438,-3762,-1115,-2409,9914,2497,-1227,2295,5300 } },
|
||||||
@@ -7690,6 +7359,27 @@
|
@@ -7690,6 +7360,27 @@
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -918,7 +936,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CLASS simple_coeff (int index)
|
void CLASS simple_coeff (int index)
|
||||||
@@ -7967,7 +7657,7 @@
|
@@ -7967,7 +7658,7 @@
|
||||||
tiff_flip = flip = filters = UINT_MAX; /* unknown */
|
tiff_flip = flip = filters = UINT_MAX; /* unknown */
|
||||||
raw_height = raw_width = fuji_width = fuji_layout = cr2_slice[0] = 0;
|
raw_height = raw_width = fuji_width = fuji_layout = cr2_slice[0] = 0;
|
||||||
maximum = height = width = top_margin = left_margin = 0;
|
maximum = height = width = top_margin = left_margin = 0;
|
||||||
@ -927,7 +945,7 @@
|
|||||||
iso_speed = shutter = aperture = focal_len = unique_id = 0;
|
iso_speed = shutter = aperture = focal_len = unique_id = 0;
|
||||||
tiff_nifds = 0;
|
tiff_nifds = 0;
|
||||||
memset (tiff_ifd, 0, sizeof tiff_ifd);
|
memset (tiff_ifd, 0, sizeof tiff_ifd);
|
||||||
@@ -7999,13 +7689,20 @@
|
@@ -7999,13 +7690,20 @@
|
||||||
fread (head, 1, 32, ifp);
|
fread (head, 1, 32, ifp);
|
||||||
fseek (ifp, 0, SEEK_END);
|
fseek (ifp, 0, SEEK_END);
|
||||||
flen = fsize = ftell(ifp);
|
flen = fsize = ftell(ifp);
|
||||||
@ -950,7 +968,7 @@
|
|||||||
parse_ciff (hlen, flen-hlen, 0);
|
parse_ciff (hlen, flen-hlen, 0);
|
||||||
load_raw = &CLASS canon_load_raw;
|
load_raw = &CLASS canon_load_raw;
|
||||||
} else if (parse_tiff(0)) apply_tiff();
|
} else if (parse_tiff(0)) apply_tiff();
|
||||||
@@ -8051,6 +7748,7 @@
|
@@ -8051,6 +7749,7 @@
|
||||||
fseek (ifp, 100+28*(shot_select > 0), SEEK_SET);
|
fseek (ifp, 100+28*(shot_select > 0), SEEK_SET);
|
||||||
parse_tiff (data_offset = get4());
|
parse_tiff (data_offset = get4());
|
||||||
parse_tiff (thumb_offset+12);
|
parse_tiff (thumb_offset+12);
|
||||||
@ -958,7 +976,7 @@
|
|||||||
apply_tiff();
|
apply_tiff();
|
||||||
} else if (!memcmp (head,"RIFF",4)) {
|
} else if (!memcmp (head,"RIFF",4)) {
|
||||||
fseek (ifp, 0, SEEK_SET);
|
fseek (ifp, 0, SEEK_SET);
|
||||||
@@ -8160,15 +7858,18 @@
|
@@ -8160,15 +7859,18 @@
|
||||||
if (make[0] == 0) parse_smal (0, flen);
|
if (make[0] == 0) parse_smal (0, flen);
|
||||||
if (make[0] == 0) {
|
if (make[0] == 0) {
|
||||||
parse_jpeg(0);
|
parse_jpeg(0);
|
||||||
@ -986,7 +1004,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i < sizeof corp / sizeof *corp; i++)
|
for (i=0; i < sizeof corp / sizeof *corp; i++)
|
||||||
@@ -8201,7 +7902,7 @@
|
@@ -8201,7 +7903,7 @@
|
||||||
if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */
|
if (height == 3136 && width == 4864) /* Pentax K20D and Samsung GX20 */
|
||||||
{ height = 3124; width = 4688; filters = 0x16161616; }
|
{ height = 3124; width = 4688; filters = 0x16161616; }
|
||||||
if (width == 4352 && (!strcmp(model,"K-r") || !strcmp(model,"K-x")))
|
if (width == 4352 && (!strcmp(model,"K-r") || !strcmp(model,"K-x")))
|
||||||
@ -995,7 +1013,7 @@
|
|||||||
if (width >= 4960 && !strncmp(model,"K-5",3))
|
if (width >= 4960 && !strncmp(model,"K-5",3))
|
||||||
{ left_margin = 10; width = 4950; filters = 0x16161616; }
|
{ left_margin = 10; width = 4950; filters = 0x16161616; }
|
||||||
if (width == 4736 && !strcmp(model,"K-7"))
|
if (width == 4736 && !strcmp(model,"K-7"))
|
||||||
@@ -8220,6 +7921,7 @@
|
@@ -8220,6 +7922,7 @@
|
||||||
switch (tiff_compress) {
|
switch (tiff_compress) {
|
||||||
case 1: load_raw = &CLASS packed_dng_load_raw; break;
|
case 1: load_raw = &CLASS packed_dng_load_raw; break;
|
||||||
case 7: load_raw = &CLASS lossless_dng_load_raw; break;
|
case 7: load_raw = &CLASS lossless_dng_load_raw; break;
|
||||||
@ -1003,7 +1021,7 @@
|
|||||||
case 34892: load_raw = &CLASS lossy_dng_load_raw; break;
|
case 34892: load_raw = &CLASS lossy_dng_load_raw; break;
|
||||||
default: load_raw = 0;
|
default: load_raw = 0;
|
||||||
}
|
}
|
||||||
@@ -8347,7 +8049,7 @@
|
@@ -8347,7 +8050,7 @@
|
||||||
width -= 44;
|
width -= 44;
|
||||||
} else if (!strcmp(model,"D3200") ||
|
} else if (!strcmp(model,"D3200") ||
|
||||||
!strcmp(model,"D600") ||
|
!strcmp(model,"D600") ||
|
||||||
@ -1012,7 +1030,7 @@
|
|||||||
width -= 46;
|
width -= 46;
|
||||||
} else if (!strcmp(model,"D4") ||
|
} else if (!strcmp(model,"D4") ||
|
||||||
!strcmp(model,"Df")) {
|
!strcmp(model,"Df")) {
|
||||||
@@ -8567,6 +8269,7 @@
|
@@ -8567,6 +8270,7 @@
|
||||||
if (load_raw == &CLASS lossless_jpeg_load_raw)
|
if (load_raw == &CLASS lossless_jpeg_load_raw)
|
||||||
load_raw = &CLASS hasselblad_load_raw;
|
load_raw = &CLASS hasselblad_load_raw;
|
||||||
if (raw_width == 7262) {
|
if (raw_width == 7262) {
|
||||||
@ -1020,7 +1038,7 @@
|
|||||||
height = 5444;
|
height = 5444;
|
||||||
width = 7248;
|
width = 7248;
|
||||||
top_margin = 4;
|
top_margin = 4;
|
||||||
@@ -8578,13 +8281,31 @@
|
@@ -8578,13 +8282,31 @@
|
||||||
top_margin = 4;
|
top_margin = 4;
|
||||||
left_margin = 41;
|
left_margin = 41;
|
||||||
filters = 0x61616161;
|
filters = 0x61616161;
|
||||||
@ -1054,7 +1072,7 @@
|
|||||||
} else if (raw_width == 4090) {
|
} else if (raw_width == 4090) {
|
||||||
strcpy (model, "V96C");
|
strcpy (model, "V96C");
|
||||||
height -= (top_margin = 6);
|
height -= (top_margin = 6);
|
||||||
@@ -8637,6 +8358,7 @@
|
@@ -8637,6 +8359,7 @@
|
||||||
filters = 0x16161616;
|
filters = 0x16161616;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(make,"Leica") || !strcmp(make,"Panasonic")) {
|
} else if (!strcmp(make,"Leica") || !strcmp(make,"Panasonic")) {
|
||||||
@ -1062,7 +1080,7 @@
|
|||||||
if ((flen - data_offset) / (raw_width*8/7) == raw_height)
|
if ((flen - data_offset) / (raw_width*8/7) == raw_height)
|
||||||
load_raw = &CLASS panasonic_load_raw;
|
load_raw = &CLASS panasonic_load_raw;
|
||||||
if (!load_raw) {
|
if (!load_raw) {
|
||||||
@@ -8654,6 +8376,7 @@
|
@@ -8654,6 +8377,7 @@
|
||||||
}
|
}
|
||||||
filters = 0x01010101 * (uchar) "\x94\x61\x49\x16"
|
filters = 0x01010101 * (uchar) "\x94\x61\x49\x16"
|
||||||
[((filters-1) ^ (left_margin & 1) ^ (top_margin << 1)) & 3];
|
[((filters-1) ^ (left_margin & 1) ^ (top_margin << 1)) & 3];
|
||||||
@ -1070,7 +1088,7 @@
|
|||||||
} else if (!strcmp(model,"C770UZ")) {
|
} else if (!strcmp(model,"C770UZ")) {
|
||||||
height = 1718;
|
height = 1718;
|
||||||
width = 2304;
|
width = 2304;
|
||||||
@@ -8883,6 +8606,10 @@
|
@@ -8883,6 +8607,10 @@
|
||||||
memcpy (rgb_cam, cmatrix, sizeof cmatrix);
|
memcpy (rgb_cam, cmatrix, sizeof cmatrix);
|
||||||
raw_color = 0;
|
raw_color = 0;
|
||||||
}
|
}
|
||||||
@ -1081,7 +1099,7 @@
|
|||||||
if (raw_color) adobe_coeff (make, model);
|
if (raw_color) adobe_coeff (make, model);
|
||||||
if (load_raw == &CLASS kodak_radc_load_raw)
|
if (load_raw == &CLASS kodak_radc_load_raw)
|
||||||
if (raw_color) adobe_coeff ("Apple","Quicktake");
|
if (raw_color) adobe_coeff ("Apple","Quicktake");
|
||||||
@@ -8899,7 +8626,7 @@
|
@@ -8899,7 +8627,7 @@
|
||||||
if (!tiff_bps) tiff_bps = 12;
|
if (!tiff_bps) tiff_bps = 12;
|
||||||
if (!maximum) maximum = (1 << tiff_bps) - 1;
|
if (!maximum) maximum = (1 << tiff_bps) - 1;
|
||||||
if (!load_raw || height < 22 || width < 22 ||
|
if (!load_raw || height < 22 || width < 22 ||
|
||||||
@ -1090,7 +1108,7 @@
|
|||||||
is_raw = 0;
|
is_raw = 0;
|
||||||
#ifdef NO_JASPER
|
#ifdef NO_JASPER
|
||||||
if (load_raw == &CLASS redcine_load_raw) {
|
if (load_raw == &CLASS redcine_load_raw) {
|
||||||
@@ -8978,194 +8705,245 @@
|
@@ -8978,194 +8706,245 @@
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1511,7 +1529,7 @@
|
|||||||
|
|
||||||
struct tiff_tag {
|
struct tiff_tag {
|
||||||
ushort tag, type;
|
ushort tag, type;
|
||||||
@@ -9188,585 +8966,12 @@
|
@@ -9188,585 +8967,12 @@
|
||||||
unsigned gps[26];
|
unsigned gps[26];
|
||||||
char desc[512], make[64], model[64], soft[32], date[20], artist[64];
|
char desc[512], make[64], model[64], soft[32], date[20], artist[64];
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user