1 /* mnote-olympus-entry.c
3 * Copyright © 2002 Lutz Müller <lutz@users.sourceforge.net>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
22 #include "mnote-olympus-entry.h"
28 #include <libexif/exif-format.h>
29 #include <libexif/exif-utils.h>
30 #include <libexif/i18n.h>
32 #define CF(format,target,v,maxlen) \
34 if (format != target) { \
35 snprintf (v, maxlen, \
36 _("Invalid format '%s', " \
38 exif_format_get_name (format), \
39 exif_format_get_name (target)); \
44 #define CC(number,target,v,maxlen) \
46 if (number != target) { \
47 snprintf (v, maxlen, \
48 _("Invalid number of components (%i, " \
49 "expected %i)."), (int) number, (int) target); \
55 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
58 mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *val, unsigned int maxlen)
68 memset (val, 0, maxlen);
71 if ((!entry->data) && (entry->components > 0)) return (val);
74 case MNOTE_OLYMPUS_TAG_MODE:
75 CF (entry->format, EXIF_FORMAT_LONG, val, maxlen);
76 CC (entry->components, 3, val, maxlen);
77 vl = exif_get_long (entry->data, entry->order);
80 strncpy (val, _("normal"), maxlen);
83 strncpy (val, _("unknown"), maxlen);
86 strncpy (val, _("fast"), maxlen);
89 strncpy (val, _("panorama"), maxlen);
92 snprintf (val, maxlen, _("%li"), vl);
94 vl = exif_get_long (entry->data + 4, entry->order);
95 snprintf (buf, sizeof (buf), "/%li/", vl);
96 strncat (val, buf, maxlen - strlen(val));
97 vl = exif_get_long (entry->data + 4, entry->order);
100 strncat (val, _("left to right"), maxlen - strlen(val));
103 strncat (val, _("right to left"), maxlen - strlen(val));
106 strncat (val, _("bottom to top"), maxlen - strlen(val));
109 strncat (val, _("top to bottom"), maxlen - strlen(val));
112 snprintf (buf, sizeof (buf), _("%li"), vl);
113 strncat (val, buf, maxlen - strlen(val));
116 case MNOTE_OLYMPUS_TAG_QUALITY:
117 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
118 CC (entry->components, 1, val, maxlen);
119 vs = exif_get_short (entry->data, entry->order);
122 strncpy (val, _("SQ"), maxlen);
125 strncpy (val, _("HQ"), maxlen);
128 strncpy (val, _("SHQ"), maxlen);
131 snprintf (val, maxlen, _("%i"), vs);
134 case MNOTE_OLYMPUS_TAG_MACRO:
135 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
136 CC (entry->components, 1, val, maxlen);
137 vs = exif_get_short (entry->data, entry->order);
140 strncpy (val, _("no"), maxlen);
143 strncpy (val, _("yes"), maxlen);
146 snprintf (val, maxlen, _("%i"), vs);
149 case MNOTE_OLYMPUS_TAG_UNKNOWN_1:
150 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
151 CC (entry->components, 1, val, maxlen);
152 strncpy (val, _("Unknown tag."), maxlen);
154 case MNOTE_OLYMPUS_TAG_DIGIZOOM:
155 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
156 CC (entry->components, 1, val, maxlen);
157 vs = exif_get_short (entry->data, entry->order);
160 strncpy (val, _("1x"), maxlen);
163 strncpy (val, _("2x"), maxlen);
166 snprintf (val, maxlen, _("%i"), vs);
169 case MNOTE_OLYMPUS_TAG_UNKNOWN_2:
170 CF (entry->format, EXIF_FORMAT_RATIONAL, val, maxlen);
171 CC (entry->components, 1, val, maxlen);
173 case MNOTE_OLYMPUS_TAG_UNKNOWN_3:
174 CF (entry->format, EXIF_FORMAT_SSHORT, val, maxlen);
175 CC (entry->components, 1, val, maxlen);
177 case MNOTE_OLYMPUS_TAG_VERSION:
178 CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen);
179 CC (entry->components, 5, val, maxlen);
180 strncpy (val, entry->data, MIN (maxlen, entry->size));
182 case MNOTE_OLYMPUS_TAG_INFO:
183 CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen);
184 CC (entry->components, 52, val, maxlen);
186 case MNOTE_OLYMPUS_TAG_ID:
187 CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen);
188 CC (entry->components, 32, val, maxlen);
189 strncpy (val, entry->data, MIN (maxlen, entry->size));
191 case MNOTE_OLYMPUS_TAG_UNKNOWN_4:
192 CF (entry->format, EXIF_FORMAT_LONG, val, maxlen);
193 CC (entry->components, 30, val, maxlen);
195 case MNOTE_OLYMPUS_TAG_FLASHMODE:
196 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
197 CC (entry->components, 1, val, maxlen);
198 vs = exif_get_short (entry->data, entry->order);
201 strncpy (val, _("Auto"), maxlen);
204 strncpy (val, _("Red-eye reduction"), maxlen);
207 strncpy (val, _("Fill"), maxlen);
210 strncpy (val, _("Off"), maxlen);
213 snprintf (val, maxlen, _("%i"), vs);
216 case MNOTE_OLYMPUS_TAG_FOCUSDIST:
217 CF (entry->format, EXIF_FORMAT_RATIONAL, val, maxlen);
218 CC (entry->components, 1, val, maxlen);
219 vr = exif_get_rational (entry->data, entry->order);
220 if (vr.numerator == 0) {
221 strncpy (val, _("Unknown"), maxlen);
224 unsigned long tmp = vr.numerator / vr.denominator;
225 /* printf("numerator %li, denominator %li\n", vr.numerator, vr.denominator); */
226 snprintf (val, maxlen, "%li mm", tmp);
229 case MNOTE_OLYMPUS_TAG_SHARPNESS:
230 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
231 CC (entry->components, 1, val, maxlen);
232 vs = exif_get_short (entry->data, entry->order);
235 strncpy (val, _("Normal"), maxlen);
238 strncpy (val, _("Hard"), maxlen);
241 strncpy (val, _("Soft"), maxlen);
244 snprintf (val, maxlen, _("%i"), vs);
247 case MNOTE_OLYMPUS_TAG_WBALANCE:
248 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
249 CC (entry->components, 2, val, maxlen);
250 vs = exif_get_short (entry->data, entry->order);
253 strncpy (val, _("Automatic"), maxlen);
257 ExifShort v2 = exif_get_short (entry->data + 2, entry->order);
258 unsigned long colorTemp = 0;
283 snprintf (val, maxlen, "Manual: %liK", colorTemp);
286 strncpy (val, _("Manual: Unknown"), maxlen);
292 strncpy (val, _("One-touch"), maxlen);
295 strncpy (val, _("Unknown"), maxlen);
299 case MNOTE_OLYMPUS_TAG_CONTRAST:
300 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
301 CC (entry->components, 1, val, maxlen);
302 vs = exif_get_short (entry->data, entry->order);
305 strncpy (val, _("Hard"), maxlen);
308 strncpy (val, _("Normal"), maxlen);
311 strncpy (val, _("Soft"), maxlen);
314 snprintf (val, maxlen, "%i", vs);
317 case MNOTE_OLYMPUS_TAG_MANFOCUS:
318 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
319 CC (entry->components, 1, val, maxlen);
320 vs = exif_get_short (entry->data, entry->order);
323 strncpy (val, _("No"), maxlen);
326 strncpy (val, _("Yes"), maxlen);
329 snprintf (val, maxlen, _("%i"), vs);