Update of /cvsroot/ufraw/ufraw In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv25129
Modified Files: Tag: dcraw-original-branch dcraw.cc Log Message: dcraw original 9.04 (1.438). Index: dcraw.cc =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw.cc,v retrieving revision 1.1.2.107 retrieving revision 1.1.2.108 diff -u -d -r1.1.2.107 -r1.1.2.108 --- dcraw.cc 27 Jun 2010 04:35:10 -0000 1.1.2.107 +++ dcraw.cc 31 Jul 2010 06:10:14 -0000 1.1.2.108 @@ -23,7 +23,7 @@ $Date$ */ -#define VERSION "9.03" +#define VERSION "9.04" #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -4445,6 +4445,12 @@ cam_mul[0] = getreal(type); cam_mul[2] = getreal(type); } + if (tag == 0xd && type == 7 && get2() == 0xaaaa) { + fread (buf97, 1, sizeof buf97, ifp); + i = (uchar *) memmem (buf97, sizeof buf97,"\xbb\xbb",2) - buf97 + 10; + if (i < 70 && buf97[i] < 3) + flip = "065"[buf97[i]]-'0'; + } if (tag == 0x10 && type == 4) unique_id = get4(); if (tag == 0x11 && is_raw && !strncmp(make,"NIKON",5)) { @@ -4630,7 +4636,7 @@ unsigned kodak, entries, tag, type, len, save, c; double expo; - kodak = !strncmp(make,"EASTMAN",7); + kodak = !strncmp(make,"EASTMAN",7) && tiff_nifds < 3; entries = get2(); while (entries--) { tiff_get (base, &tag, &type, &len, &save); @@ -4804,6 +4810,7 @@ } void CLASS parse_minolta (int base); +int CLASS parse_tiff (int base); int CLASS parse_tiff_ifd (int base) { @@ -4884,7 +4891,7 @@ load_raw = &CLASS panasonic_load_raw; load_flags = 0x2008; case 273: /* StripOffset */ - case 513: + case 513: /* JpegIFOffset */ case 61447: tiff_ifd[ifd].offset = get4()+base; if (!tiff_ifd[ifd].bps) { @@ -4897,6 +4904,9 @@ tiff_ifd[ifd].samples = jh.clrs; if (!(jh.sraw || (jh.clrs & 1))) tiff_ifd[ifd].width *= jh.clrs; + i = order; + parse_tiff (tiff_ifd[ifd].offset + 12); + order = i; } } break; @@ -5251,21 +5261,26 @@ return 0; } -void CLASS parse_tiff (int base) +int CLASS parse_tiff (int base) { - int doff, max_samp=0, raw=-1, thm=-1, i; - struct jhead jh; + int doff; fseek (ifp, base, SEEK_SET); order = get2(); - if (order != 0x4949 && order != 0x4d4d) return; + if (order != 0x4949 && order != 0x4d4d) return 0; get2(); - memset (tiff_ifd, 0, sizeof tiff_ifd); - tiff_nifds = 0; while ((doff = get4())) { fseek (ifp, doff+base, SEEK_SET); if (parse_tiff_ifd (base)) break; } + return 1; +} + +void CLASS apply_tiff() +{ + int max_samp=0, raw=-1, thm=-1, i; + struct jhead jh; + thumb_misc = 16; if (thumb_offset) { fseek (ifp, thumb_offset, SEEK_SET); @@ -5292,8 +5307,8 @@ raw = i; } } - fuji_width *= (raw_width+1)/2; - if (tiff_ifd[0].flip) tiff_flip = tiff_ifd[0].flip; + for (i=tiff_nifds; i--; ) + if (tiff_ifd[i].flip) tiff_flip = tiff_ifd[i].flip; if (raw >= 0 && !load_raw) switch (tiff_compress) { case 0: case 1: @@ -5791,7 +5806,7 @@ hlen = get4(); if (get4() == 0x48454150) /* "HEAP" */ parse_ciff (save+hlen, len-hlen); - parse_tiff (save+6); + if (parse_tiff (save+6)) apply_tiff(); fseek (ifp, save+len, SEEK_SET); } return 1; @@ -6653,7 +6668,7 @@ { 6573120, "Canon", "PowerShot A610" ,0 }, { 9219600, "Canon", "PowerShot A620" ,0 }, { 9243240, "Canon", "PowerShot A470" ,0 }, - { 10341600, "Canon", "PowerShot A720" ,0 }, + { 10341600, "Canon", "PowerShot A720 IS",0 }, { 10383120, "Canon", "PowerShot A630" ,0 }, { 12945240, "Canon", "PowerShot A640" ,0 }, { 15636240, "Canon", "PowerShot A650" ,0 }, @@ -6711,6 +6726,8 @@ maximum = height = width = top_margin = left_margin = 0; cdesc[0] = desc[0] = artist[0] = make[0] = model[0] = model2[0] = 0; iso_speed = shutter = aperture = focal_len = unique_id = 0; + tiff_nifds = 0; + memset (tiff_ifd, 0, sizeof tiff_ifd); memset (gpsdata, 0, sizeof gpsdata); memset (cblack, 0, sizeof cblack); memset (white, 0, sizeof white); @@ -6741,14 +6758,12 @@ if ((cp = (char *) memmem (head, 32, "MMMM", 4)) || (cp = (char *) memmem (head, 32, "IIII", 4))) { parse_phase_one (cp-head); - if (cp-head) parse_tiff(0); + if (cp-head && parse_tiff(0)) apply_tiff(); } else if (order == 0x4949 || order == 0x4d4d) { if (!memcmp (head+6,"HEAPCCDR",8)) { data_offset = hlen; parse_ciff (hlen, flen - hlen); - } else { - parse_tiff(0); - } + } 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); @@ -6788,6 +6803,7 @@ fseek (ifp, 100, SEEK_SET); parse_tiff (data_offset = get4()); parse_tiff (thumb_offset+12); + apply_tiff(); } else if (!memcmp (head,"RIFF",4)) { fseek (ifp, 0, SEEK_SET); parse_riff(); @@ -6847,6 +6863,7 @@ if (!height) height = raw_height; if (!width) width = raw_width; if (fuji_width) { + fuji_width = (raw_width+1)/2; width = height + fuji_width; height = width - 1; pixel_aspect = 1; @@ -6978,7 +6995,7 @@ top_margin = 6; left_margin = 12; goto canon_a5; - } else if (!strcmp(model,"PowerShot A720")) { + } else if (!strcmp(model,"PowerShot A720 IS")) { height = 2472; width = 3298; raw_height = 2480; ------------------------------------------------------------------------------ The Palm PDK Hot Apps Program offers developers who use the Plug-In Development Kit to bring their C/C++ apps to Palm for a share of $1 Million in cash or HP Products. Visit us here for more details: http://p.sf.net/sfu/dev2dev-palm _______________________________________________ ufraw-cvs mailing list ufraw-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ufraw-cvs