EXIF library (libexif) Internals 0.6.26
mnote-fuji-entry.c
Go to the documentation of this file.
1/* mnote-fuji-entry.c
2 *
3 * Copyright (c) 2002 Lutz Mueller <lutz@users.sourceforge.net>
4 *
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.
9 *
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.
14 *
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., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301 USA.
19 *
20 * SPDX-License-Identifier: LGPL-2.0-or-later
21 */
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#include <config.h>
28
29#include <libexif/i18n.h>
30
31#include "mnote-fuji-entry.h"
32
33#define CF(format,target,v,maxlen) \
34{ \
35 if (format != target) { \
36 snprintf (v, maxlen, \
37 _("Invalid format '%s', " \
38 "expected '%s'."), \
39 exif_format_get_name (format), \
40 exif_format_get_name (target)); \
41 break; \
42 } \
43}
44
45#define CC(number,target,v,maxlen) \
46{ \
47 if (number != target) { \
48 snprintf (v, maxlen, \
49 _("Invalid number of components (%i, " \
50 "expected %i)."), (int) number, (int) target); \
51 break; \
52 } \
53}
54
55static const struct {
57 struct {
58 int index;
59 const char *string;
60 } elem[22];
61} items[] = {
62#ifndef NO_VERBOSE_TAG_DATA
64 { {1, N_("Softest")},
65 {2, N_("Soft")},
66 {3, N_("Normal")},
67 {4, N_("Hard")},
68 {5, N_("Hardest")},
69 {0x0082, N_("Medium soft")},
70 {0x0084, N_("Medium hard")},
71 {0x8000, N_("Film simulation mode")},
72 {0xFFFF, N_("Off")},
73 {0, NULL}}},
75 { {0, N_("Auto")},
76 {0x100, N_("Daylight")},
77 {0x200, N_("Cloudy")},
78 {0x300, N_("Daylight fluorescent")},
79 {0x301, N_("Day white fluorescent")},
80 {0x302, N_("White fluorescent")},
81 {0x400, N_("Incandescent")},
82 {0x500, N_("Flash")},
83 {0xF00, N_("Custom")},
84 {0, NULL}}},
86 { {0, N_("Standard")},
87 {0x0080, N_("Medium high")},
88 {0x0100, N_("High")},
89 {0x0180, N_("Medium low")},
90 {0x0200, N_("Original")},
91 {0x0300, N_("Black & white")},
92 {0x8000, N_("Film simulation mode")},
93 {0, NULL}}},
95 { {0, N_("Standard")},
96 {0x0080, N_("Medium hard")},
97 {0x0100, N_("Hard")},
98 {0x0180, N_("Medium soft")},
99 {0x0200, N_("Original")},
100 {0x8000, N_("Film simulation mode")},
101 {0, NULL}}},
103 { {0, N_("Auto")},
104 {1, N_("On")},
105 {2, N_("Off")},
106 {3, N_("Red-eye reduction")},
107 {0, NULL}}},
109 { {0, N_("Off")},
110 {1, N_("On")},
111 {0, NULL}}},
113 { {0, N_("Auto")},
114 {1, N_("Manual")},
115 {0, NULL}}},
117 { {0, N_("Off")},
118 {1, N_("On")},
119 {0, NULL}}},
121 { {0, N_("Auto")},
122 {1, N_("Portrait")},
123 {2, N_("Landscape")},
124 {4, N_("Sports")},
125 {5, N_("Night")},
126 {6, N_("Program AE")},
127 {7, N_("Natural photo")},
128 {8, N_("Vibration reduction")},
129 {0x000A, N_("Sunset")},
130 {0x000B, N_("Museum")},
131 {0x000C, N_("Party")},
132 {0x000D, N_("Flower")},
133 {0x000E, N_("Text")},
134 {0x000F, N_("NP & flash")},
135 {0x0010, N_("Beach")},
136 {0x0011, N_("Snow")},
137 {0x0012, N_("Fireworks")},
138 {0x0013, N_("Underwater")},
139 {0x0100, N_("Aperture priority AE")},
140 {0x0200, N_("Shutter priority AE")},
141 {0x0300, N_("Manual exposure")},
142 {0, NULL}}},
144 { {0, N_("Off")},
145 {1, N_("On")},
146 {0, NULL}}},
148 { {0x00, N_("F-Standard")},
149 {0x10, N_("F-Chrome")},
150 {0x30, N_("F-B&W")},
151 {0, NULL}}},
153 { {0, N_("No blur")},
154 {1, N_("Blur warning")},
155 {0, NULL}}},
157 { {0, N_("Focus good")},
158 {1, N_("Out of focus")},
159 {0, NULL}}},
161 { {0, N_("AE good")},
162 {1, N_("Over exposed")},
163 {0, NULL}}},
165 { {1, N_("Standard")},
166 {3, N_("Wide")},
167 {0, NULL}}},
169 { {0, N_("F0/Standard")},
170 {0x0100, N_("F1/Studio portrait")},
171 {0x0110, N_("F1a/Professional portrait")},
172 {0x0120, N_("F1b/Professional portrait")},
173 {0x0130, N_("F1c/Professional portrait")},
174 {0x0200, N_("F2/Fujichrome")},
175 {0x0300, N_("F3/Studio portrait Ex")},
176 {0x0400, N_("F4/Velvia")},
177 {0, NULL}}},
179 { {0, N_("Auto (100-400%)")},
180 {1, N_("RAW")},
181 {0x0100, N_("Standard (100%)")},
182 {0x0200, N_("Wide1 (230%)")},
183 {0x0201, N_("Wide2 (400%)")},
184 {0x8000, N_("Film simulation mode")},
185 {0, NULL}}},
186#endif
187 {0, {{0, NULL}}}
189
190
191char *
193 char *val, unsigned int maxlen)
194{
195 ExifLong vl;
196 ExifSLong vsl;
197 ExifShort vs, vs2;
198 ExifSShort vss;
199 ExifRational vr;
200 ExifSRational vsr;
201 int i, j;
202
203 if (!entry) return (NULL);
204 if (maxlen < 1) return NULL;
205
206 memset (val, 0, maxlen);
207 maxlen--;
208
209 switch (entry->tag) {
211 CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen)
212 CC (entry->components, 4, val, maxlen)
213 memcpy (val, entry->data, MIN(maxlen, entry->size));
214 break;
232 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen)
233 CC (entry->components, 1, val, maxlen)
234 vs = exif_get_short (entry->data, entry->order);
235
236 /* search the tag */
237 for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++);
238 if (!items[i].tag) {
239 snprintf (val, maxlen,
240 _("Internal error (unknown value %i)"), vs);
241 break;
242 }
243
244 /* find the value */
245 for (j = 0; items[i].elem[j].string &&
246 (items[i].elem[j].index < vs); j++);
247 if (items[i].elem[j].index != vs) {
248 snprintf (val, maxlen,
249 _("Internal error (unknown value %i)"), vs);
250 break;
251 }
252 strncpy (val, _(items[i].elem[j].string), maxlen);
253 break;
255 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen)
256 CC (entry->components, 2, val, maxlen)
257 vs = exif_get_short (entry->data, entry->order);
258 vs2 = exif_get_short (entry->data+2, entry->order);
259 snprintf (val, maxlen, "%i, %i", vs, vs2);
260 break;
263 CF (entry->format, EXIF_FORMAT_RATIONAL, val, maxlen)
264 CC (entry->components, 1, val, maxlen)
265 vr = exif_get_rational (entry->data, entry->order);
266 if (!vr.denominator) break;
267 snprintf (val, maxlen, _("%2.2f mm"), (double) vr.numerator /
268 vr.denominator);
269 break;
270
271 default:
272 switch (entry->format) {
274 strncpy (val, (char *)entry->data, MIN(maxlen, entry->size));
275 break;
277 vs = exif_get_short (entry->data, entry->order);
278 snprintf (val, maxlen, "%hu", vs);
279 break;
281 vss = exif_get_sshort (entry->data, entry->order);
282 snprintf (val, maxlen, "%hi", vss);
283 break;
284 case EXIF_FORMAT_LONG:
285 vl = exif_get_long (entry->data, entry->order);
286 snprintf (val, maxlen, "%lu", (long unsigned) vl);
287 break;
289 vsl = exif_get_slong (entry->data, entry->order);
290 snprintf (val, maxlen, "%li", (long int) vsl);
291 break;
293 vr = exif_get_rational (entry->data, entry->order);
294 if (!vr.denominator) break;
295 snprintf (val, maxlen, "%2.4f", (double) vr.numerator /
296 vr.denominator);
297 break;
299 vsr = exif_get_srational (entry->data, entry->order);
300 if (!vsr.denominator) break;
301 snprintf (val, maxlen, "%2.4f", (double) vsr.numerator /
302 vsr.denominator);
303 break;
305 default:
306 snprintf (val, maxlen, _("%i bytes unknown data"),
307 entry->size);
308 break;
309 }
310 break;
311 }
312
313 return (val);
314}
@ EXIF_FORMAT_SLONG
Definition exif-format.h:43
@ EXIF_FORMAT_RATIONAL
Definition exif-format.h:39
@ EXIF_FORMAT_SRATIONAL
Definition exif-format.h:44
@ EXIF_FORMAT_LONG
Definition exif-format.h:38
@ EXIF_FORMAT_UNDEFINED
Definition exif-format.h:41
@ EXIF_FORMAT_SHORT
Definition exif-format.h:37
@ EXIF_FORMAT_SSHORT
Definition exif-format.h:42
@ EXIF_FORMAT_ASCII
Definition exif-format.h:36
ExifRational exif_get_rational(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifRational value from memory.
Definition exif-utils.c:190
ExifLong exif_get_long(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifLong value from memory.
Definition exif-utils.c:167
ExifShort exif_get_short(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifShort value from memory.
Definition exif-utils.c:104
ExifSLong exif_get_slong(const unsigned char *b, ExifByteOrder order)
Retrieve an ExifSLong value from memory.
Definition exif-utils.c:132
ExifSShort exif_get_sshort(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifSShort value from memory.
Definition exif-utils.c:89
ExifSRational exif_get_srational(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifSRational value from memory.
Definition exif-utils.c:179
uint32_t ExifLong
EXIF Unsigned Long data type.
Definition exif-utils.h:56
int32_t ExifSLong
EXIF Signed Long data type.
Definition exif-utils.h:59
uint16_t ExifShort
EXIF Unsigned Short data type.
Definition exif-utils.h:50
#define MIN(a, b)
Definition exif-utils.h:182
int16_t ExifSShort
EXIF Signed Short data type.
Definition exif-utils.h:53
#define _(String)
Definition i18n.h:50
#define N_(String)
Definition i18n.h:51
#define CC(number, target, v, maxlen)
struct @10::@11 elem[22]
int index
MnoteFujiTag tag
#define CF(format, target, v, maxlen)
static const struct @10 items[]
const char * string
char * mnote_fuji_entry_get_value(MnoteFujiEntry *entry, char *val, unsigned int maxlen)
enum _MnoteFujiTag MnoteFujiTag
@ MNOTE_FUJI_TAG_MAX_FOCAL_LENGTH
@ MNOTE_FUJI_TAG_DYNAMIC_RANGE_SETTING
@ MNOTE_FUJI_TAG_FLASH_MODE
@ MNOTE_FUJI_TAG_WHITE_BALANCE
@ MNOTE_FUJI_TAG_SHARPNESS
@ MNOTE_FUJI_TAG_CONT_TAKING
@ MNOTE_FUJI_TAG_BLUR_CHECK
@ MNOTE_FUJI_TAG_SLOW_SYNC
@ MNOTE_FUJI_TAG_PICTURE_MODE
@ MNOTE_FUJI_TAG_TONE
@ MNOTE_FUJI_TAG_FINEPIX_COLOR
@ MNOTE_FUJI_TAG_AUTO_EXPOSURE_CHECK
@ MNOTE_FUJI_TAG_FOCUS_POINT
@ MNOTE_FUJI_TAG_COLOR
@ MNOTE_FUJI_TAG_MACRO
@ MNOTE_FUJI_TAG_DYNAMIC_RANGE
@ MNOTE_FUJI_TAG_MIN_FOCAL_LENGTH
@ MNOTE_FUJI_TAG_VERSION
@ MNOTE_FUJI_TAG_FILM_MODE
@ MNOTE_FUJI_TAG_FOCUS_MODE
@ MNOTE_FUJI_TAG_FOCUS_CHECK
EXIF Unsigned Rational data type.
Definition exif-utils.h:62
ExifLong denominator
Definition exif-utils.h:62
ExifLong numerator
Definition exif-utils.h:62
EXIF Signed Rational data type.
Definition exif-utils.h:67
ExifSLong numerator
Definition exif-utils.h:67
ExifSLong denominator
Definition exif-utils.h:67
unsigned char * data
ExifByteOrder order
unsigned int size
unsigned long components

libexif Generated by doxygen