Author: akv
Date: 2010-01-19 18:43:08 +0100 (Tue, 19 Jan 2010)
New Revision: 3036
Modified:
branches/rawstudio-ng-color/plugins/meta-tiff/tiff-meta.c
Log:
Reading basic lens information from Olympus cameras.
Modified: branches/rawstudio-ng-color/plugins/meta-tiff/tiff-meta.c
===================================================================
--- branches/rawstudio-ng-color/plugins/meta-tiff/tiff-meta.c 2010-01-18
23:25:24 UTC (rev 3035)
+++ branches/rawstudio-ng-color/plugins/meta-tiff/tiff-meta.c 2010-01-19
17:43:08 UTC (rev 3036)
@@ -59,6 +59,7 @@
static gboolean makernote_olympus(RAWFILE *rawfile, guint base, guint offset,
RSMetadata *meta);
static gboolean makernote_olympus_camerasettings(RAWFILE *rawfile, guint base,
guint offset, RSMetadata *meta);
static gboolean makernote_olympus_imageprocessing(RAWFILE *rawfile, guint
base, guint offset, RSMetadata *meta);
+static gboolean makernote_olympus_equipment(RAWFILE *rawfile, guint base,
guint offset, RSMetadata *meta);
static gboolean makernote_panasonic(RAWFILE *rawfile, guint offset, RSMetadata
*meta);
static gboolean makernote_pentax(RAWFILE *rawfile, guint offset, RSMetadata
*meta);
static void sony_decrypt(SonyMeta *sony, guint *data, gint len);
@@ -798,6 +799,47 @@
}
static gboolean
+makernote_olympus_equipment(RAWFILE *rawfile, guint base, guint offset,
RSMetadata *meta)
+{
+ gushort number_of_entries;
+ struct IFD ifd;
+ gushort ushort_temp1;
+ gchar *str = NULL;
+
+ if(!raw_get_ushort(rawfile, offset, &number_of_entries))
+ return FALSE;
+
+ if (number_of_entries>5000)
+ return FALSE;
+
+ offset += 2;
+
+ while(number_of_entries--)
+ {
+ read_ifd(rawfile, offset, &ifd);
+ offset += 12;
+
+ switch(ifd.tag)
+ {
+ case 0x0202: /* LensSerialNumber */
+ /* FIXME: odd data at this address? */
+ str = raw_strdup(rawfile, offset, 32);
+ break;
+ case 0x0207: /* MinFocalLength */
+ raw_get_ushort(rawfile, offset-4,
&ushort_temp1);
+ meta->lens_min_focal = ushort_temp1;
+ break;
+ case 0x0208: /* MaxFocalLength */
+ raw_get_ushort(rawfile, offset-4,
&ushort_temp1);
+ meta->lens_max_focal = ushort_temp1;
+ break;
+ }
+ }
+ return TRUE;
+}
+
+
+static gboolean
makernote_olympus(RAWFILE *rawfile, guint base, guint offset, RSMetadata *meta)
{
gushort number_of_entries;
@@ -846,6 +888,10 @@
raw_get_ushort(rawfile, offset, &ushort_temp1);
meta->cam_mul[2] = (gdouble) ushort_temp1 /
256.0;
break;
+ case 0x2010: /* Equipment2 */
+ raw_get_uint(rawfile, offset, &uint_temp1);
+ makernote_olympus_equipment(rawfile,
base+uint_temp1, base+uint_temp1, meta);
+ break;
case 0x2020: /* Olympus CameraSettings Tags */
raw_get_uint(rawfile, offset, &uint_temp1);
makernote_olympus_camerasettings(rawfile,
base+uint_temp1, base+uint_temp1, meta);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit