Update of /cvsroot/ufraw/ufraw In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv26188
Modified Files: dcraw.cc dcraw.h Log Message: dcraw modified 9.04 (1.438). Changelog: Fixed rotation for Kodak EasyShare and some Canon EOS photos. Index: dcraw.cc =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw.cc,v retrieving revision 1.226 retrieving revision 1.227 diff -u -d -r1.226 -r1.227 --- dcraw.cc 22 Jul 2010 17:30:14 -0000 1.226 +++ dcraw.cc 31 Jul 2010 06:15:27 -0000 1.227 @@ -22,7 +22,7 @@ #include "uf_progress.h" } -#define DCRAW_VERSION "9.03" +#define DCRAW_VERSION "9.04" #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -4525,6 +4525,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)) { @@ -4718,7 +4724,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); @@ -4892,6 +4898,7 @@ } //void CLASS parse_minolta (int base); +//int CLASS parse_tiff (int base); int CLASS parse_tiff_ifd (int base) { @@ -4972,7 +4979,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) { @@ -4985,6 +4992,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; @@ -5340,21 +5350,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); @@ -5381,8 +5396,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: @@ -5880,7 +5895,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; @@ -6805,6 +6820,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); @@ -6835,14 +6852,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); @@ -6882,6 +6897,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(); @@ -6941,6 +6957,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; Index: dcraw.h =================================================================== RCS file: /cvsroot/ufraw/ufraw/dcraw.h,v retrieving revision 1.64 retrieving revision 1.65 diff -u -d -r1.64 -r1.65 --- dcraw.h 30 May 2010 02:15:06 -0000 1.64 +++ dcraw.h 31 Jul 2010 06:15:27 -0000 1.65 @@ -234,7 +234,8 @@ void linear_table (unsigned len); void parse_kodak_ifd (int base); int parse_tiff_ifd (int base); -void parse_tiff (int base); +int parse_tiff (int base); +void apply_tiff(); void parse_minolta (int base); void parse_external_jpeg(); void ciff_block_1030(); ------------------------------------------------------------------------------ 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