annotate src/format_olympus.c @ 2916:ae6cdcd69d9f default tip

Merge with upstream/master.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 14 May 2019 11:46:50 +0300
parents 95507e596256
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
1 /*
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
2 * Copyright (C) 2005 John Ellis
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
3 * Copyright (C) 2008 - 2016 The Geeqie Team
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
4 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
5 * This program is free software; you can redistribute it and/or modify
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
6 * it under the terms of the GNU General Public License as published by
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
7 * the Free Software Foundation; either version 2 of the License, or
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
8 * (at your option) any later version.
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
9 *
2350
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
10 * This program is distributed in the hope that it will be useful,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
13 * GNU General Public License for more details.
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
14 *
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
15 * You should have received a copy of the GNU General Public License along
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
16 * with this program; if not, write to the Free Software Foundation, Inc.,
95507e596256 Update copyright in all files
Klaus Ethgen <Klaus@Ethgen.de>
parents: 2157
diff changeset
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
18 */
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
19
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
20 #ifdef HAVE_CONFIG_H
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
21 # include "config.h"
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
22 #endif
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
23
177
6611823f3c59 started exiv2 integration
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
24 #ifndef HAVE_EXIV2
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
25
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
26 #include <stdio.h>
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
27 #include <string.h>
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
28 #include <unistd.h>
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
29
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
30 #include <glib.h>
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
31
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
32 #include "intl.h"
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
33
281
b1c2c2cf19d4 gqview.h -> main.h
Laurent Monin <geeqie@norz.org>
parents: 177
diff changeset
34 #include "main.h"
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
35 #include "format_olympus.h"
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
36 #include "format_raw.h"
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
37
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
38 #include "exif.h"
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
39
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
40
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
41 /*
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
42 *-----------------------------------------------------------------------------
101
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
43 * Raw ORF embedded jpeg extraction for Olympus
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
44 *-----------------------------------------------------------------------------
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
45 */
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
46
1000
07f6093c1c1a For the sake of consistency, use glib basic types everywhere.
Laurent Monin <geeqie@norz.org>
parents: 541
diff changeset
47 static guint olympus_tiff_table(guchar *data, const guint len, guint offset, ExifByteOrder bo,
101
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
48 gint level,
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
49 guint *image_offset, guint *exif_offset);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
50
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
51
1000
07f6093c1c1a For the sake of consistency, use glib basic types everywhere.
Laurent Monin <geeqie@norz.org>
parents: 541
diff changeset
52 static void olympus_tiff_entry(guchar *data, const guint len, guint offset, ExifByteOrder bo,
101
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
53 gint level,
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
54 guint *image_offset, guint *exif_offset)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
55 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
56 guint tag;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
57 guint type;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
58 guint count;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
59 guint segment;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
60 guint seg_len;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
61
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
62 tag = exif_byte_get_int16(data + offset + EXIF_TIFD_OFFSET_TAG, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
63 type = exif_byte_get_int16(data + offset + EXIF_TIFD_OFFSET_FORMAT, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
64 count = exif_byte_get_int32(data + offset + EXIF_TIFD_OFFSET_COUNT, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
65
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
66 /* so far, we only care about tags with type long */
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
67 if (type != EXIF_FORMAT_LONG_UNSIGNED && type != EXIF_FORMAT_LONG) return;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
68
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
69 seg_len = ExifFormatList[type].size * count;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
70 if (seg_len > 4)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
71 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
72 segment = exif_byte_get_int32(data + offset + EXIF_TIFD_OFFSET_DATA, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
73 if (segment + seg_len > len) return;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
74 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
75 else
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
76 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
77 segment = offset + EXIF_TIFD_OFFSET_DATA;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
78 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
79
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
80 if (tag == 0x201)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
81 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
82 /* start of embedded jpeg, not all olympus cameras embed a jpeg */
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
83 *image_offset = exif_byte_get_int32(data + segment, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
84 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
85
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
86 if (tag == 0x8769)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
87 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
88 /* This is the Exif info */
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
89 *exif_offset = exif_byte_get_int32(data + segment, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
90 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
91 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
92
1000
07f6093c1c1a For the sake of consistency, use glib basic types everywhere.
Laurent Monin <geeqie@norz.org>
parents: 541
diff changeset
93 static guint olympus_tiff_table(guchar *data, const guint len, guint offset, ExifByteOrder bo,
101
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
94 gint level,
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
95 guint *image_offset, guint *exif_offset)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
96 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
97 guint count;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
98 guint i;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
99
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
100 if (level > EXIF_TIFF_MAX_LEVELS) return 0;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
101
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
102 if (len < offset + 2) return FALSE;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
103
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
104 count = exif_byte_get_int16(data + offset, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
105 offset += 2;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
106 if (len < offset + count * EXIF_TIFD_SIZE + 4) return 0;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
107
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
108 for (i = 0; i < count; i++)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
109 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
110 olympus_tiff_entry(data, len, offset + i * EXIF_TIFD_SIZE, bo, level,
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
111 image_offset, exif_offset);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
112 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
113
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
114 return exif_byte_get_int32(data + offset + count * EXIF_TIFD_SIZE, bo);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
115 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
116
1453
ccc663a2e148 gint -> gboolean where applicable. The end (ouf!).
Laurent Monin <geeqie@norz.org>
parents: 1284
diff changeset
117 gboolean format_olympus_raw(guchar *data, const guint len,
ccc663a2e148 gint -> gboolean where applicable. The end (ouf!).
Laurent Monin <geeqie@norz.org>
parents: 1284
diff changeset
118 guint *image_offset, guint *exif_offset)
101
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
119 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
120 guint i_off = 0;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
121 guint e_off = 0;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
122 guint offset;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
123 gint level;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
124
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
125 if (len < 8) return FALSE;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
126
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
127 /* these are in tiff file format with a different magick header */
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
128 if (memcmp(data, "IIR", 3) != 0) return FALSE;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
129
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
130 offset = exif_byte_get_int32(data + 4, EXIF_BYTE_ORDER_INTEL);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
131
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
132 level = 0;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
133 while (offset && level < EXIF_TIFF_MAX_LEVELS)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
134 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
135 offset = olympus_tiff_table(data, len, offset, EXIF_BYTE_ORDER_INTEL, 0, &i_off, &e_off);
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
136 level++;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
137 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
138
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
139 if (i_off != 0 || e_off != 0)
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
140 {
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
141 if (image_offset) *image_offset = i_off;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
142 if (exif_offset) *exif_offset = e_off;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
143 return TRUE;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
144 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
145
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
146 return FALSE;
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
147 }
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
148
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
149
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
150 /*
5ca15c24dfd5 Tue Nov 7 15:35:59 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 100
diff changeset
151 *-----------------------------------------------------------------------------
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
152 * EXIF Makernote for Olympus
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
153 *-----------------------------------------------------------------------------
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
154 */
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
155
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
156 static ExifTextList KonMinTagColorMode[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
157 { 0, "natural" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
158 { 1, "black and white" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
159 { 2, "vivid" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
160 { 3, "solarization" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
161 { 4, "Adobe RGB" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
162 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
163 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
164
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
165 static ExifTextList KonMinTagQuality[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
166 { 0, "raw" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
167 { 1, "super fine" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
168 { 2, "find" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
169 { 3, "standard" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
170 { 4, "extra fine" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
171 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
172 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
173
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
174 static ExifTextList OlympusTagJpegQuality[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
175 { 1, "standard" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
176 { 2, "high" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
177 { 3, "super high" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
178 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
179 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
180
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
181 static ExifTextList OlympusTagMacro[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
182 { 0, "off" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
183 { 1, "on" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
184 { 2, "view" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
185 { 3, "manual" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
186 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
187 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
188
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
189 static ExifTextList OlympusTagFlashMode[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
190 { 0, "auto" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
191 { 1, "red-eye reduction" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
192 { 2, "fill" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
193 { 3, "off" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
194 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
195 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
196
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
197 static ExifTextList OlympusTagFocusMode[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
198 { 0, "auto" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
199 { 1, "manual" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
200 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
201 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
202
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
203 static ExifTextList OlympusTagSharpness[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
204 { 0, "normal" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
205 { 1, "hard" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
206 { 2, "soft" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
207 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
208 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
209
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
210 static ExifTextList OlympusTagContrast[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
211 { 0, "hard" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
212 { 1, "normal" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
213 { 2, "soft" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
214 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
215 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
216
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
217
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
218 static ExifMarker OlympusExifMarkersList[] = {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
219 { 0x0001, EXIF_FORMAT_LONG_UNSIGNED, -1, "Konica/MinoltaSettings", "Konica / Minolta settings", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
220 { 0x0003, EXIF_FORMAT_LONG_UNSIGNED, -1, "Konica/MinoltaSettings", "Konica / Minolta settings", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
221 { 0x0040, EXIF_FORMAT_LONG_UNSIGNED, -1, "CompressedImageSize", "Compressed image size", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
222 { 0x0081, EXIF_FORMAT_LONG_UNSIGNED, 1, "ThumbnailOffset", "Thumbnail offset", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
223 { 0x0088, EXIF_FORMAT_LONG_UNSIGNED, 1, "ThumbnailOffset", "Thumbnail offset", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
224 { 0x0089, EXIF_FORMAT_LONG_UNSIGNED, 1, "ThumbnailLength", "Thumbnail length", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
225 { 0x0101, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Konica/Minolta.ColorMode", "Color mode", KonMinTagColorMode },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
226 { 0x0102, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Konica/Minolta.Quality", "Quality", KonMinTagQuality },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
227 { 0x0103, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Konica/Minolta.Quality", "Quality", KonMinTagQuality },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
228 { 0x0200, EXIF_FORMAT_LONG_UNSIGNED, 3, "Olympus.SpecialMode", "Special mode", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
229 { 0x0201, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.JpegQuality", "Jpeg quality", OlympusTagJpegQuality },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
230 { 0x0202, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.Macro", "Macro", OlympusTagMacro },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
231 { 0x0204, EXIF_FORMAT_RATIONAL_UNSIGNED, 1, "Olympus.DigitalZoom", "Digital zoom", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
232 { 0x0207, EXIF_FORMAT_STRING, -1, "Olympus.Firmware", "Firmware version", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
233 { 0x0208, EXIF_FORMAT_STRING, -1, "Olympus.PictureInfo", "Picture info", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
234 { 0x0209, EXIF_FORMAT_UNDEFINED, -1, "Olympus.CameraID", "Camera ID", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
235 { 0x020b, EXIF_FORMAT_LONG_UNSIGNED, 1, "Epson.ImageWidth", "Image width", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
236 { 0x020c, EXIF_FORMAT_LONG_UNSIGNED, 1, "Epson.ImageHeight", "Image height", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
237 { 0x020d, EXIF_FORMAT_STRING, -1, "Epson.Manufacturer", "Manufacturer", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
238 { 0x0e00, EXIF_FORMAT_BYTE, -1, "Olympus.PrintImageMatching", "Print image matching", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
239 { 0x1004, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.FlashMode", "Flash mode", OlympusTagFlashMode },
100
9668b2c689df Mon Nov 6 20:53:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 58
diff changeset
240 { 0x1006, EXIF_FORMAT_RATIONAL, 1, "Olympus.Bracket", "Bracket", NULL },
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
241 { 0x100b, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.FocusMode", "Focus mode", OlympusTagFocusMode },
100
9668b2c689df Mon Nov 6 20:53:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 58
diff changeset
242 { 0x100c, EXIF_FORMAT_RATIONAL_UNSIGNED, 1, "Olympus.FocusDistance", "Focus distance", NULL },
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
243 { 0x100d, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.Zoom", "Zoom", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
244 { 0x1006, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.MacroFocus", "Macro focus", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
245 { 0x100f, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.Sharpness", "Sharpness", OlympusTagSharpness },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
246 { 0x1011, EXIF_FORMAT_SHORT_UNSIGNED, 9, "Olympus.ColorMatrix", "Color matrix", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
247 { 0x1012, EXIF_FORMAT_SHORT_UNSIGNED, 4, "Olympus.BlackLevel", "Black level", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
248 { 0x1015, EXIF_FORMAT_SHORT_UNSIGNED, 2, "Olympus.WhiteBalance", "White balance", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
249 { 0x1017, EXIF_FORMAT_SHORT_UNSIGNED, 2, "Olympus.RedBias", "Red bias", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
250 { 0x1018, EXIF_FORMAT_SHORT_UNSIGNED, 2, "Olympus.BlueBias", "Blue bias", NULL },
100
9668b2c689df Mon Nov 6 20:53:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 58
diff changeset
251 { 0x101a, EXIF_FORMAT_STRING, -1, "Olympus.SerialNumber", "Serial number", NULL },
9668b2c689df Mon Nov 6 20:53:22 2006 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 58
diff changeset
252 { 0x1023, EXIF_FORMAT_RATIONAL, 1, "Olympus.FlashBias", "Flash bias", NULL },
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
253 { 0x1029, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.Contrast", "Contrast", OlympusTagContrast },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
254 { 0x102a, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.SharpnessFactor", "Sharpness factor", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
255 { 0x102b, EXIF_FORMAT_SHORT_UNSIGNED, 6, "Olympus.ColorControl", "Color control", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
256 { 0x102c, EXIF_FORMAT_SHORT_UNSIGNED, 2, "Olympus.ValidBits", "Valid bits", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
257 { 0x102d, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.CoringFilter", "Coring filter", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
258 { 0x102e, EXIF_FORMAT_LONG_UNSIGNED, 1, "Olympus.FinalWidth", "Final width", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
259 { 0x102f, EXIF_FORMAT_LONG_UNSIGNED, 1, "Olympus.FinalHeight", "Final height", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
260 { 0x1034, EXIF_FORMAT_SHORT_UNSIGNED, 1, "Olympus.CompressionRatio", "Compression ratio", NULL },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
261 EXIF_MARKER_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
262 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
263
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
264 static ExifTextList OlympusShootingMode[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
265 { 0, "normal" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
266 { 1, "unknown" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
267 { 2, "fast" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
268 { 3, "panorama" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
269 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
270 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
271
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
272 static ExifTextList OlympusPanoramaDirection[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
273 { 1, "left to right" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
274 { 2, "right to left" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
275 { 3, "bottom to top" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
276 { 4, "top to bottom" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
277 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
278 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
279
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
280 static ExifTextList OlympusWB[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
281 { 1, "auto" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
282 { 2, "manual" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
283 { 3, "one-touch" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
284 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
285 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
286
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
287 static ExifTextList OlympusWBColorTemp[]= {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
288 { 2, "3000" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
289 { 3, "3700" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
290 { 4, "4000" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
291 { 5, "4500" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
292 { 6, "5500" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
293 { 7, "6500" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
294 { 8, "7500" },
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
295 EXIF_TEXT_LIST_END
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
296 };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
297
1453
ccc663a2e148 gint -> gboolean where applicable. The end (ouf!).
Laurent Monin <geeqie@norz.org>
parents: 1284
diff changeset
298 gboolean format_olympus_makernote(ExifData *exif, guchar *tiff, guint offset,
ccc663a2e148 gint -> gboolean where applicable. The end (ouf!).
Laurent Monin <geeqie@norz.org>
parents: 1284
diff changeset
299 guint size, ExifByteOrder bo)
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
300 {
1000
07f6093c1c1a For the sake of consistency, use glib basic types everywhere.
Laurent Monin <geeqie@norz.org>
parents: 541
diff changeset
301 guchar *data;
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
302 ExifItem *item;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
303
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
304 if (offset + 8 + 4 >= size) return FALSE;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
305
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
306 data = tiff + offset;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
307
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
308 /* Olympus tag format starts with "OLYMP\x00\x01" or "OLYMP\x00\x02",
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
309 * plus an unknown byte,
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
310 * followed by IFD data using Olympus tags.
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
311 */
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
312 if (memcmp(data, "OLYMP\x00\x01", 7) != 0 &&
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
313 memcmp(data, "OLYMP\x00\x02", 7) != 0) return FALSE;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
314
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
315 if (exif_parse_IFD_table(exif, tiff, offset + 8, size,
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
316 bo, 0, OlympusExifMarkersList) != 0)
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
317 {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
318 return FALSE;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
319 }
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
320
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
321 item = exif_get_item(exif, "Olympus.SpecialMode");
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
322 if (item && item->data_len == 3 * sizeof(guint32))
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
323 {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
324 static ExifMarker marker = { 0x0200, EXIF_FORMAT_STRING, -1,
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
325 "Olympus.ShootingMode", "Shooting mode", NULL };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
326 guint32 *array = item->data;
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
327 gchar *mode;
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
328 gchar *pdir = NULL;
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
329 gchar *text;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
330 gint l;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
331
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
332 mode = exif_text_list_find_value(OlympusShootingMode, array[0]);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
333 if (array[0] == 3)
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
334 {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
335 pdir = exif_text_list_find_value(OlympusPanoramaDirection, array[2]);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
336 }
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
337
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
338 text = g_strdup_printf("%s%s%s, seq %d", mode,
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
339 (pdir) ? " " : "", (pdir) ? pdir : "",
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
340 array[1] + 1);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
341 l = strlen(text) + 1;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
342 item = exif_item_new(marker.format, marker.tag, l, &marker);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
343 memcpy(item->data, text, l);
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
344
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
345 g_free(text);
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
346 g_free(pdir);
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
347 g_free(mode);
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
348
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
349 exif->items = g_list_prepend(exif->items, item);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
350 }
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
351
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
352 item = exif_get_item(exif, "Olympus.WhiteBalance");
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
353 if (item && item->data_len == 2 * sizeof(guint16))
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
354 {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
355 static ExifMarker marker = { 0x1015, EXIF_FORMAT_STRING, -1,
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
356 "Olympus.WhiteBalance", "White balance", NULL };
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
357 guint16 *array = item->data;
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
358 gchar *mode;
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
359 gchar *color = NULL;
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
360 gchar *text;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
361 gint l;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
362
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
363 mode = exif_text_list_find_value(OlympusWB, array[0]);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
364 if (array[0] == 2)
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
365 {
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
366 color = exif_text_list_find_value(OlympusWBColorTemp, array[1]);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
367 }
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
368
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
369 text = g_strdup_printf("%s%s%s", mode,
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
370 (color) ? " " : "", (color) ? color : "");
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
371 l = strlen(text) + 1;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
372 item = exif_item_new(marker.format, marker.tag, l, &marker);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
373 memcpy(item->data, text, l);
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
374
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
375 g_free(text);
58
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
376 g_free(color);
47944e6f9513 Sat Jun 11 01:06:49 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents: 57
diff changeset
377 g_free(mode);
57
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
378
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
379 exif->items = g_list_prepend(exif->items, item);
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
380 }
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
381
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
382 return TRUE;
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
383 }
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
384
9a5cb1658b82 Fri Jun 10 20:57:42 2005 John Ellis <johne@verizon.net>
John Ellis <johne@verizon.net>
parents:
diff changeset
385
442
f698b737556b Big whitespaces cleanup:
Laurent Monin <geeqie@norz.org>
parents: 281
diff changeset
386 #endif
177
6611823f3c59 started exiv2 integration
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 138
diff changeset
387 /* not HAVE_EXIV2 */
1055
4bbdfab3c89a Adding a vim modeline to all files - patch by Klaus Ethgen
Vladimir Nadvornik <nadvornik@suse.cz>
parents: 1000
diff changeset
388 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */