Mercurial > hg > forks > geeqie
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 |
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 | 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 | 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: */ |