Mercurial > geeqie
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; } }