diff src/exif.c @ 101:847e4bc6b54c

Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net> * exif.c: Use new format_raw_exif_offset() function to find Exif in raw files. * filelist.c: Add orf and pef to displayed file types. * format_canon.h, format_fuji.h: Update to new #define format. * format_fuji.c: Use same offset for Exif as the jpeg image as the Exif is always embedded in the jpeg and assuming offset of 12 is just broken. * format_nikon.h: Update to new #define format, and add pentax here as finding the jpeg will be same code. * format_olympus.[ch]: Support Olympus raw files with embedded jpegs, not all raw files will have a jpeg, but all appear to have Exif tags. * format_raw.[ch]: Add new camera types, and add a debugging facility to easily list all tags within tiff files (see format_raw.h to enable).
author gqview
date Tue, 07 Nov 2006 21:00:50 +0000
parents 04ff0df3ad2f
children 1003bd2ec862
line wrap: on
line diff
--- a/src/exif.c	Tue Nov 07 01:57:19 2006 +0000
+++ b/src/exif.c	Tue Nov 07 21:00:50 2006 +0000
@@ -1098,11 +1098,37 @@
 
 	if (res != 0)
 		{
+		FormatRawExifType exif_type;
+		FormatRawExifParseFunc exif_parse_func;
 		guint32 offset = 0;
-		
-		if (format_raw_img_exif_offsets(f, size, NULL, &offset))
+
+		exif_type = format_raw_exif_offset(f, size, &offset, &exif_parse_func);
+		switch (exif_type)
 			{
-			res = exif_tiff_parse(exif, (unsigned char*)f + offset, size - offset, ExifKnownMarkersList);
+			case FORMAT_RAW_EXIF_NONE:
+			default:
+				break;
+			case FORMAT_RAW_EXIF_TIFF:
+				res = exif_tiff_parse(exif, (unsigned char*)f + offset, size - offset,
+						      ExifKnownMarkersList);
+				break;
+			case FORMAT_RAW_EXIF_JPEG:
+				res = exif_parse_JPEG(exif, (unsigned char*)f + offset, size - offset,
+						      ExifKnownMarkersList);
+				break;
+			case FORMAT_RAW_EXIF_IFD_II:
+			case FORMAT_RAW_EXIF_IFD_MM:
+				res = exif_parse_IFD_table(exif, (unsigned char*)f, offset, size - offset,
+							   (exif_type == FORMAT_RAW_EXIF_IFD_II) ?
+								EXIF_BYTE_ORDER_INTEL : EXIF_BYTE_ORDER_MOTOROLA,
+							   0, ExifKnownMarkersList);
+				break;
+			case FORMAT_RAW_EXIF_PROPRIETARY:
+				if (exif_parse_func)
+					{
+					res = exif_parse_func((unsigned char*)f + offset, size - offset, exif);
+					}
+				break;
 			}
 		}