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
[email protected]
https://lists.sourceforge.net/lists/listinfo/ufraw-cvs