/src/libexif/libexif/olympus/mnote-olympus-entry.c
Line | Count | Source |
1 | | /* mnote-olympus-entry.c |
2 | | * |
3 | | * Copyright (c) 2002-2009 Lutz Mueller <lutz@users.sourceforge.net> et. al. |
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 <config.h> |
24 | | #include "mnote-olympus-entry.h" |
25 | | |
26 | | #include <stdio.h> |
27 | | #include <stdlib.h> |
28 | | #include <string.h> |
29 | | |
30 | | #include <libexif/exif-format.h> |
31 | | #include <libexif/exif-utils.h> |
32 | | #include <libexif/exif-entry.h> |
33 | | #include <libexif/i18n.h> |
34 | | |
35 | 40.0k | #define CF(format,target,v,maxlen) \ |
36 | 40.0k | { \ |
37 | 40.0k | if (format != target) { \ |
38 | 11.4k | snprintf (v, maxlen, \ |
39 | 11.4k | _("Invalid format '%s', " \ |
40 | 11.4k | "expected '%s'."), \ |
41 | 11.4k | exif_format_get_name (format), \ |
42 | 11.4k | exif_format_get_name (target)); \ |
43 | 11.4k | break; \ |
44 | 11.4k | } \ |
45 | 40.0k | } |
46 | | |
47 | 666 | #define CF2(format,target1,target2,v,maxlen) \ |
48 | 666 | { \ |
49 | 666 | if ((format != target1) && (format != target2)) { \ |
50 | 336 | snprintf (v, maxlen, \ |
51 | 336 | _("Invalid format '%s', " \ |
52 | 336 | "expected '%s' or '%s'."), \ |
53 | 336 | exif_format_get_name (format), \ |
54 | 336 | exif_format_get_name (target1), \ |
55 | 336 | exif_format_get_name (target2)); \ |
56 | 336 | break; \ |
57 | 336 | } \ |
58 | 666 | } |
59 | | |
60 | 34.9k | #define CC(number,target,v,maxlen) \ |
61 | 34.9k | { \ |
62 | 34.9k | if (number != target) { \ |
63 | 10.4k | snprintf (v, maxlen, \ |
64 | 10.4k | _("Invalid number of components (%i, " \ |
65 | 10.4k | "expected %i)."), (int) number, (int) target); \ |
66 | 10.4k | break; \ |
67 | 10.4k | } \ |
68 | 34.9k | } |
69 | | |
70 | 834 | #define CC2(number,t1,t2,v,maxlen) \ |
71 | 834 | { \ |
72 | 834 | if ((number < t1) || (number > t2)) { \ |
73 | 528 | snprintf (v, maxlen, \ |
74 | 528 | _("Invalid number of components (%i, " \ |
75 | 528 | "expected %i or %i)."), (int) number, \ |
76 | 528 | (int) t1, (int) t2); \ |
77 | 528 | break; \ |
78 | 528 | } \ |
79 | 834 | } |
80 | | |
81 | 2.49k | #define R2L(n) ((n).denominator ? (unsigned long)(n).numerator/(n).denominator : 0L) |
82 | 7.64k | #define R2D(n) ((n).denominator ? (double)(n).numerator/(n).denominator : 0.0) |
83 | | |
84 | | static const struct { |
85 | | MnoteOlympusTag tag; |
86 | | ExifFormat fmt; |
87 | | struct { |
88 | | int index; |
89 | | const char *string; |
90 | | } elem[24]; |
91 | | } items[] = { |
92 | | #ifndef NO_VERBOSE_TAG_DATA |
93 | | { MNOTE_NIKON_TAG_LENSTYPE, EXIF_FORMAT_BYTE, |
94 | | { {0, N_("AF non D lens")}, |
95 | | {1, N_("Manual")}, |
96 | | {2, N_("AF-D or AF-S lens")}, |
97 | | {6, N_("AF-D G lens")}, |
98 | | {10, N_("AF-D VR lens")}, |
99 | | {14, N_("AF-D G VR lens")}, |
100 | | {0, NULL}}}, |
101 | | { MNOTE_NIKON_TAG_FLASHUSED, EXIF_FORMAT_BYTE, |
102 | | { {0, N_("Flash did not fire")}, |
103 | | {4, N_("Flash unit unknown")}, |
104 | | {7, N_("Flash is external")}, |
105 | | {9, N_("Flash is on camera")}, |
106 | | {0, NULL}}}, |
107 | | { MNOTE_NIKON1_TAG_QUALITY, EXIF_FORMAT_SHORT, |
108 | | { {1, N_("VGA basic")}, |
109 | | {2, N_("VGA normal")}, |
110 | | {3, N_("VGA fine")}, |
111 | | {4, N_("SXGA basic")}, |
112 | | {5, N_("SXGA normal")}, |
113 | | {6, N_("SXGA fine")}, |
114 | | {10, N_("2 Mpixel basic")}, |
115 | | {11, N_("2 Mpixel normal")}, |
116 | | {12, N_("2 Mpixel fine")}, |
117 | | {0, NULL}}}, |
118 | | { MNOTE_NIKON1_TAG_COLORMODE, EXIF_FORMAT_SHORT, |
119 | | { {1, N_("Color")}, |
120 | | {2, N_("Monochrome")}, |
121 | | {0, NULL}}}, |
122 | | { MNOTE_NIKON1_TAG_IMAGEADJUSTMENT, EXIF_FORMAT_SHORT, |
123 | | { {0, N_("Normal")}, |
124 | | {1, N_("Bright+")}, |
125 | | {2, N_("Bright-")}, |
126 | | {3, N_("Contrast+")}, |
127 | | {4, N_("Contrast-")}, |
128 | | {0, NULL}}}, |
129 | | { MNOTE_NIKON1_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT, |
130 | | { {0, N_("ISO 80")}, |
131 | | {2, N_("ISO 160")}, |
132 | | {4, N_("ISO 320")}, |
133 | | {5, N_("ISO 100")}, |
134 | | {0, NULL}}}, |
135 | | { MNOTE_NIKON1_TAG_WHITEBALANCE, EXIF_FORMAT_SHORT, |
136 | | { {0, N_("Auto")}, |
137 | | {1, N_("Preset")}, |
138 | | {2, N_("Daylight")}, |
139 | | {3, N_("Incandescence")}, |
140 | | {4, N_("Fluorescence")}, |
141 | | {5, N_("Cloudy")}, |
142 | | {6, N_("SpeedLight")}, |
143 | | {0, NULL}}}, |
144 | | { MNOTE_NIKON1_TAG_CONVERTER, EXIF_FORMAT_SHORT, |
145 | | { {0, N_("No fisheye")}, |
146 | | {1, N_("Fisheye on")}, |
147 | | {0, NULL}}}, |
148 | | { MNOTE_OLYMPUS_TAG_QUALITY, EXIF_FORMAT_SHORT, |
149 | | { {1, N_("Normal, SQ")}, |
150 | | {2, N_("Normal, HQ")}, |
151 | | {3, N_("Normal, SHQ")}, |
152 | | {4, N_("Normal, RAW")}, |
153 | | {5, N_("Normal, SQ1")}, |
154 | | {6, N_("Normal, SQ2")}, |
155 | | {7, N_("Normal, super high")}, |
156 | | {17, N_("Normal, standard")}, |
157 | | {0x101, N_("Fine, SQ")}, |
158 | | {0x102, N_("Fine, HQ")}, |
159 | | {0x103, N_("Fine, SHQ")}, |
160 | | {0x104, N_("Fine, RAW")}, |
161 | | {0x105, N_("Fine, SQ1")}, |
162 | | {0x106, N_("Fine, SQ2")}, |
163 | | {0x107, N_("Fine, super high")}, |
164 | | {0x201, N_("Super fine, SQ")}, |
165 | | {0x202, N_("Super fine, HQ")}, |
166 | | {0x203, N_("Super fine, SHQ")}, |
167 | | {0x204, N_("Super fine, RAW")}, |
168 | | {0x205, N_("Super fine, SQ1")}, |
169 | | {0x206, N_("Super fine, SQ2")}, |
170 | | {0x207, N_("Super fine, super high")}, |
171 | | {0x211, N_("Super fine, high")}, |
172 | | {0, NULL}}}, |
173 | | { MNOTE_OLYMPUS_TAG_MACRO, EXIF_FORMAT_SHORT, |
174 | | { {0, N_("No")}, |
175 | | {1, N_("Yes")}, |
176 | | {2, N_("Super macro")}, |
177 | | {0, NULL}}}, |
178 | | { MNOTE_OLYMPUS_TAG_BWMODE, EXIF_FORMAT_SHORT, |
179 | | { {0, N_("No")}, |
180 | | {1, N_("Yes")}, |
181 | | {0, NULL}}}, |
182 | | { MNOTE_OLYMPUS_TAG_ONETOUCHWB, EXIF_FORMAT_SHORT, |
183 | | { {0, N_("Off")}, |
184 | | {1, N_("On")}, |
185 | | {2, N_("On (Preset)")}, |
186 | | {0, NULL}}}, |
187 | | { MNOTE_OLYMPUS_TAG_FLASHMODE, EXIF_FORMAT_SHORT, |
188 | | { {0, N_("Auto")}, |
189 | | {1, N_("Red-eye reduction")}, |
190 | | {2, N_("Fill")}, |
191 | | {3, N_("Off")}, |
192 | | {0, NULL}}}, |
193 | | { MNOTE_OLYMPUS_TAG_FLASHDEVICE, EXIF_FORMAT_SHORT, |
194 | | { {0, N_("None")}, |
195 | | {1, N_("Internal")}, |
196 | | {4, N_("External")}, |
197 | | {5, N_("Internal + external")}, |
198 | | {0, NULL}}}, |
199 | | { MNOTE_OLYMPUS_TAG_FOCUSRANGE, EXIF_FORMAT_SHORT, |
200 | | { {0, N_("Normal")}, |
201 | | {1, N_("Macro")}, |
202 | | {0, NULL}}}, |
203 | | { MNOTE_OLYMPUS_TAG_MANFOCUS, EXIF_FORMAT_SHORT, |
204 | | { {0, N_("Auto")}, |
205 | | {1, N_("Manual")}, |
206 | | {0, NULL}}}, |
207 | | { MNOTE_OLYMPUS_TAG_SHARPNESS, EXIF_FORMAT_SHORT, |
208 | | { {0, N_("Normal")}, |
209 | | {1, N_("Hard")}, |
210 | | {2, N_("Soft")}, |
211 | | {0, NULL}}}, |
212 | | { MNOTE_OLYMPUS_TAG_EXTERNALFLASHBOUNCE, EXIF_FORMAT_SHORT, |
213 | | { {0, N_("No")}, |
214 | | {1, N_("Yes")}, |
215 | | {0, NULL}}}, |
216 | | { MNOTE_OLYMPUS_TAG_CONTRAST, EXIF_FORMAT_SHORT, |
217 | | { {0, N_("Hard")}, |
218 | | {1, N_("Normal")}, |
219 | | {2, N_("Soft")}, |
220 | | {0, NULL}}}, |
221 | | { MNOTE_OLYMPUS_TAG_PREVIEWIMAGEVALID, EXIF_FORMAT_LONG, |
222 | | { {0, N_("No")}, |
223 | | {1, N_("Yes")}, |
224 | | {0, NULL}}}, |
225 | | { MNOTE_OLYMPUS_TAG_CCDSCANMODE, EXIF_FORMAT_SHORT, |
226 | | { {0, N_("Interlaced")}, |
227 | | {1, N_("Progressive")}, |
228 | | {0, NULL}}}, |
229 | | |
230 | | { MNOTE_SANYO_TAG_SEQUENTIALSHOT, EXIF_FORMAT_SHORT, |
231 | | { {0, N_("None")}, |
232 | | {1, N_("Standard")}, |
233 | | {2, N_("Best")}, |
234 | | {3, N_("Adjust exposure")}, |
235 | | {0, NULL}}}, |
236 | | { MNOTE_SANYO_TAG_FOCUSMODE, EXIF_FORMAT_SHORT, |
237 | | { {1, N_("Spot focus")}, |
238 | | {2, N_("Normal focus")}, |
239 | | {0, NULL}}}, |
240 | | { MNOTE_SANYO_TAG_RECORDSHUTTERRELEASE, EXIF_FORMAT_SHORT, |
241 | | { {0, N_("Record while down")}, |
242 | | {1, N_("Press start, press stop")}, |
243 | | {0, NULL}}}, |
244 | | { MNOTE_SANYO_TAG_RESAVED, EXIF_FORMAT_SHORT, |
245 | | { {0, N_("No")}, |
246 | | {1, N_("Yes")}, |
247 | | {0, NULL}}}, |
248 | | { MNOTE_SANYO_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT, |
249 | | { {0, N_("Auto")}, |
250 | | {1, N_("ISO 50")}, |
251 | | {3, N_("ISO 100")}, |
252 | | {4, N_("ISO 200")}, |
253 | | {5, N_("ISO 400")}, |
254 | | {0, NULL}}}, |
255 | | { MNOTE_SANYO_TAG_SCENESELECT, EXIF_FORMAT_SHORT, |
256 | | { {0, N_("Off")}, |
257 | | {1, N_("Sport")}, |
258 | | {2, N_("TV")}, |
259 | | {3, N_("Night")}, |
260 | | {4, N_("User 1")}, |
261 | | {5, N_("User 2")}, |
262 | | {6, N_("Lamp")}, |
263 | | {0, NULL}}}, |
264 | | { MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL, EXIF_FORMAT_SHORT, |
265 | | { {0, N_("5 frames/sec")}, |
266 | | {1, N_("10 frames/sec")}, |
267 | | {2, N_("15 frames/sec")}, |
268 | | {3, N_("20 frames/sec")}, |
269 | | {0, NULL}}}, |
270 | | #endif |
271 | | { 0, 0, { { 0, NULL } } } |
272 | | }; |
273 | | |
274 | | char * |
275 | | mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int maxlen) |
276 | 51.5k | { |
277 | 51.5k | char buf[30]; |
278 | 51.5k | ExifLong vl; |
279 | 51.5k | ExifSLong vsl; |
280 | 51.5k | ExifShort vs = 0; |
281 | 51.5k | ExifSShort vss = 0; |
282 | 51.5k | ExifRational vr, vr2; |
283 | 51.5k | ExifSRational vsr; |
284 | 51.5k | int i, j; |
285 | 51.5k | double r, b; |
286 | | |
287 | 51.5k | if (!entry) |
288 | 0 | return (NULL); |
289 | 51.5k | if (maxlen < 1) |
290 | 0 | return NULL; |
291 | | |
292 | 51.5k | memset (v, 0, maxlen); |
293 | 51.5k | maxlen--; |
294 | | |
295 | 51.5k | if ((!entry->data) && (entry->components > 0)) |
296 | 3.56k | return (v); |
297 | | |
298 | 47.9k | if ((!entry->data) && (entry->size > 0)) |
299 | 0 | return NULL; /* internal inconsistency error */ |
300 | | |
301 | 47.9k | switch (entry->tag) { |
302 | | |
303 | | /* Nikon */ |
304 | 675 | case MNOTE_NIKON_TAG_FIRMWARE: |
305 | 675 | CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen) |
306 | 410 | CC (entry->components, 4, v, maxlen) |
307 | 317 | vl = exif_get_long (entry->data, EXIF_BYTE_ORDER_INTEL); |
308 | 317 | if ((vl & 0xF0F0F0F0) == 0x30303030) { |
309 | 67 | memcpy (v, entry->data, MIN (maxlen, 4)); |
310 | 250 | } else { |
311 | 250 | snprintf (v, maxlen, "%04lx", (long unsigned int) vl); |
312 | 250 | } |
313 | 317 | break; |
314 | 659 | case MNOTE_NIKON_TAG_ISO: |
315 | 659 | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
316 | 421 | CC (entry->components, 2, v, maxlen) |
317 | | /*vs = exif_get_short (entry->data, entry->order);*/ |
318 | 195 | vs = exif_get_short (entry->data + 2, entry->order); |
319 | 195 | snprintf (v, maxlen, "ISO %hd", vs); |
320 | 195 | break; |
321 | 480 | case MNOTE_NIKON_TAG_ISO2: |
322 | 480 | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
323 | 272 | CC (entry->components, 2, v, maxlen) |
324 | | /*vs = exif_get_short (entry->data, entry->order);*/ |
325 | 66 | vs = exif_get_short (entry->data + 2, entry->order); |
326 | 66 | snprintf (v, maxlen, "ISO2 %hd", vs); |
327 | 66 | break; |
328 | 218 | case MNOTE_NIKON_TAG_QUALITY: |
329 | 478 | case MNOTE_NIKON_TAG_COLORMODE: |
330 | 850 | case MNOTE_NIKON_TAG_COLORMODE1: |
331 | 1.15k | case MNOTE_NIKON_TAG_WHITEBALANCE: |
332 | 1.38k | case MNOTE_NIKON_TAG_SHARPENING: |
333 | 1.66k | case MNOTE_NIKON_TAG_FOCUSMODE: |
334 | 2.02k | case MNOTE_NIKON_TAG_FLASHSETTING: |
335 | 2.27k | case MNOTE_NIKON_TAG_ISOSELECTION: |
336 | 2.47k | case MNOTE_NIKON_TAG_FLASHMODE: |
337 | 2.69k | case MNOTE_NIKON_TAG_IMAGEADJUSTMENT: |
338 | 2.89k | case MNOTE_NIKON_TAG_ADAPTER: |
339 | 2.97k | case MNOTE_NIKON_TAG_SATURATION2: |
340 | 3.04k | case MNOTE_EPSON_TAG_SOFTWARE: |
341 | 3.04k | CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen) |
342 | 496 | memcpy(v, entry->data, MIN (maxlen, entry->size)); |
343 | 496 | break; |
344 | 196 | case MNOTE_NIKON_TAG_TOTALPICTURES: |
345 | 459 | case MNOTE_EPSON_TAG_IMAGE_WIDTH: |
346 | 844 | case MNOTE_EPSON_TAG_IMAGE_HEIGHT: |
347 | 844 | CF (entry->format, EXIF_FORMAT_LONG, v, maxlen) |
348 | 567 | CC (entry->components, 1, v, maxlen) |
349 | 231 | vl = exif_get_long (entry->data, entry->order); |
350 | 231 | snprintf (v, maxlen, "%lu", (long unsigned int) vl ); |
351 | 231 | break; |
352 | 565 | case MNOTE_NIKON_TAG_LENS_FSTOPS: |
353 | 1.04k | case MNOTE_NIKON_TAG_EXPOSUREDIFF: { |
354 | 1.04k | unsigned char h,m,l; |
355 | 1.04k | CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen) |
356 | 840 | CC (entry->components, 4, v, maxlen) |
357 | 547 | vl = exif_get_long (entry->data, entry->order); |
358 | 547 | h = (vl>>24)&0xff; m = (vl>>16)&0xff; l = (vl>>8)&0xff; |
359 | 547 | snprintf (v, maxlen, "%.1f", l?(double)h*((double)m/(double)l):0 ); |
360 | 547 | break; |
361 | 840 | } |
362 | 376 | case MNOTE_NIKON_TAG_FLASHEXPCOMPENSATION: |
363 | 822 | case MNOTE_NIKON_TAG_FLASHEXPOSUREBRACKETVAL: |
364 | 822 | CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen) |
365 | 488 | CC (entry->components, 4, v, maxlen) |
366 | 321 | vl = exif_get_long (entry->data, entry->order); |
367 | 321 | snprintf (v, maxlen, "%.1f", ((long unsigned int) vl>>24)/6.0 ); |
368 | 321 | break; |
369 | 709 | case MNOTE_NIKON_TAG_SATURATION: |
370 | 967 | case MNOTE_NIKON_TAG_WHITEBALANCEFINE: |
371 | 1.16k | case MNOTE_NIKON_TAG_HUE: |
372 | 1.37k | case MNOTE_OLYMPUS_TAG_SENSORTEMPERATURE: |
373 | 1.58k | case MNOTE_OLYMPUS_TAG_LENSTEMPERATURE: |
374 | 1.58k | CF (entry->format, EXIF_FORMAT_SSHORT, v, maxlen) |
375 | 849 | CC (entry->components, 1, v, maxlen) |
376 | 427 | vs = exif_get_short (entry->data, entry->order); |
377 | 427 | snprintf (v, maxlen, "%hd", vs); |
378 | 427 | break; |
379 | 1.28k | case MNOTE_NIKON_TAG_WHITEBALANCERB: |
380 | 1.28k | CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen) |
381 | 1.05k | CC (entry->components, 4, v, maxlen) |
382 | 818 | vr = exif_get_rational (entry->data, entry->order); |
383 | 818 | r = R2D(vr); |
384 | 818 | vr = exif_get_rational (entry->data+8, entry->order); |
385 | 818 | b = R2D(vr); |
386 | 818 | snprintf (v, maxlen, _("Red Correction %f, blue Correction %f"), r,b); |
387 | 818 | break; |
388 | 908 | case MNOTE_NIKON_TAG_MANUALFOCUSDISTANCE: |
389 | 908 | CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen) |
390 | 768 | CC (entry->components, 1, v, maxlen) |
391 | 557 | vr = exif_get_rational (entry->data, entry->order); |
392 | 557 | if (!vr.numerator || !vr.denominator) { |
393 | 263 | strncpy (v, _("No manual focus selection"), maxlen); |
394 | 294 | } else { |
395 | 294 | r = R2D(vr); |
396 | 294 | snprintf (v, maxlen, _("%2.2f meters"), r); |
397 | 294 | } |
398 | 557 | break; |
399 | 1.61k | case MNOTE_NIKON_TAG_SENSORPIXELSIZE: |
400 | 1.61k | CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen) |
401 | 1.38k | CC (entry->components, 2, v, maxlen) |
402 | 1.11k | vr = exif_get_rational (entry->data, entry->order); |
403 | 1.11k | vr2 = exif_get_rational (entry->data+8, entry->order); |
404 | 1.11k | r = R2D(vr); |
405 | 1.11k | b = R2D(vr2); |
406 | 1.11k | snprintf (v, maxlen, "%2.2f x %2.2f um", r, b); |
407 | 1.11k | break; |
408 | 666 | case MNOTE_NIKON_TAG_BRACKETING: |
409 | 666 | CF2 (entry->format, EXIF_FORMAT_BYTE, EXIF_FORMAT_SHORT, v, maxlen) |
410 | 330 | CC (entry->components, 1, v, maxlen) |
411 | 132 | if (EXIF_FORMAT_SHORT == entry->format) { |
412 | 66 | vs = exif_get_short (entry->data, entry->order); |
413 | 66 | } else { |
414 | 66 | vs = entry->data[0]; |
415 | 66 | } |
416 | 132 | snprintf (v, maxlen, "%hd", vs); |
417 | 132 | break; |
418 | 2.62k | case MNOTE_NIKON_TAG_AFFOCUSPOSITION: |
419 | 2.62k | CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen) |
420 | 2.39k | CC (entry->components, 4, v, maxlen) |
421 | 2.09k | switch ( *( entry->data+1) ) { |
422 | 218 | case 0: strncpy (v, _("AF position: center"), maxlen); break; |
423 | 66 | case 1: strncpy (v, _("AF position: top"), maxlen); break; |
424 | 141 | case 2: strncpy (v, _("AF position: bottom"), maxlen); break; |
425 | 194 | case 3: strncpy (v, _("AF position: left"), maxlen); break; |
426 | 201 | case 4: strncpy (v, _("AF position: right"), maxlen); break; |
427 | 196 | case 5: strncpy (v, _("AF position: upper-left"), maxlen); break; |
428 | 160 | case 6: strncpy (v, _("AF position: upper-right"), maxlen); break; |
429 | 195 | case 7: strncpy (v, _("AF position: lower-left"), maxlen); break; |
430 | 236 | case 8: strncpy (v, _("AF position: lower-right"), maxlen); break; |
431 | 205 | case 9: strncpy (v, _("AF position: far left"), maxlen); break; |
432 | 66 | case 10: strncpy (v, _("AF position: far right"), maxlen); break; |
433 | 215 | default: strncpy (v, _("Unknown AF position"), maxlen); |
434 | 2.09k | } |
435 | 2.09k | break; |
436 | 2.09k | case MNOTE_OLYMPUS_TAG_FLASHDEVICE: |
437 | 1.40k | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
438 | 1.19k | CC (entry->components, 2, v, maxlen) |
439 | 995 | vs = exif_get_short(entry->data, entry->order); |
440 | | /* search for the tag */ |
441 | 13.9k | for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++) |
442 | 12.9k | ; |
443 | 995 | if (!items[i].tag) { |
444 | 0 | snprintf (v, maxlen, _("Internal error (unknown value %hi)"), vs); |
445 | 0 | break; |
446 | 0 | } |
447 | 995 | CF (entry->format, items[i].fmt, v, maxlen) |
448 | | /* find the value */ |
449 | 2.81k | for (j = 0; items[i].elem[j].string && |
450 | 2.53k | (items[i].elem[j].index < vs); j++); |
451 | 995 | if (items[i].elem[j].index != vs) { |
452 | 289 | snprintf (v, maxlen, _("Unknown value %hi"), vs); |
453 | 289 | break; |
454 | 289 | } |
455 | 706 | strncpy (v, _(items[i].elem[j].string), maxlen); |
456 | 706 | break; |
457 | 1.18k | case MNOTE_OLYMPUS_TAG_DIGIZOOM: |
458 | 1.18k | if (entry->format == EXIF_FORMAT_RATIONAL) { |
459 | 900 | CC (entry->components, 1, v, maxlen) |
460 | 754 | vr = exif_get_rational (entry->data, entry->order); |
461 | 754 | if (!vr.numerator || !vr.denominator) { |
462 | 422 | strncpy (v, _("None"), maxlen); |
463 | 422 | } else { |
464 | 332 | r = R2D(vr); |
465 | 332 | snprintf (v, maxlen, "%2.2f", r); |
466 | 332 | } |
467 | 754 | break; |
468 | 900 | } |
469 | | /* to handle SHORT version of this tag, */ |
470 | | /* fall through */ |
471 | 476 | case MNOTE_NIKON_TAG_LENSTYPE: |
472 | 840 | case MNOTE_NIKON_TAG_FLASHUSED: |
473 | 1.05k | case MNOTE_NIKON1_TAG_QUALITY: |
474 | 1.31k | case MNOTE_NIKON1_TAG_COLORMODE: |
475 | 1.53k | case MNOTE_NIKON1_TAG_IMAGEADJUSTMENT: |
476 | 1.73k | case MNOTE_NIKON1_TAG_CCDSENSITIVITY: |
477 | 1.95k | case MNOTE_NIKON1_TAG_WHITEBALANCE: |
478 | 2.15k | case MNOTE_NIKON1_TAG_CONVERTER: |
479 | 2.46k | case MNOTE_OLYMPUS_TAG_QUALITY: |
480 | 2.69k | case MNOTE_OLYMPUS_TAG_MACRO: |
481 | 2.91k | case MNOTE_OLYMPUS_TAG_BWMODE: |
482 | 3.13k | case MNOTE_OLYMPUS_TAG_ONETOUCHWB: |
483 | 3.34k | case MNOTE_OLYMPUS_TAG_FLASHMODE: |
484 | 3.53k | case MNOTE_OLYMPUS_TAG_FOCUSRANGE: |
485 | 3.61k | case MNOTE_OLYMPUS_TAG_MANFOCUS: |
486 | 3.82k | case MNOTE_OLYMPUS_TAG_SHARPNESS: |
487 | 4.08k | case MNOTE_OLYMPUS_TAG_EXTERNALFLASHBOUNCE: |
488 | 4.57k | case MNOTE_OLYMPUS_TAG_CONTRAST: |
489 | 4.80k | case MNOTE_OLYMPUS_TAG_PREVIEWIMAGEVALID: |
490 | 5.00k | case MNOTE_OLYMPUS_TAG_CCDSCANMODE: |
491 | 5.24k | case MNOTE_SANYO_TAG_SEQUENTIALSHOT: |
492 | 5.45k | case MNOTE_SANYO_TAG_FOCUSMODE: |
493 | 5.66k | case MNOTE_SANYO_TAG_RECORDSHUTTERRELEASE: |
494 | 5.86k | case MNOTE_SANYO_TAG_RESAVED: |
495 | 6.06k | case MNOTE_SANYO_TAG_CCDSENSITIVITY: |
496 | 6.26k | case MNOTE_SANYO_TAG_SCENESELECT: |
497 | 6.51k | case MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL: |
498 | 6.51k | CC (entry->components, 1, v, maxlen) |
499 | 3.71k | switch (entry->format) { |
500 | 826 | case EXIF_FORMAT_BYTE: |
501 | 1.10k | case EXIF_FORMAT_UNDEFINED: |
502 | 1.10k | vs = entry->data[0]; |
503 | 1.10k | break; |
504 | 1.62k | case EXIF_FORMAT_SHORT: |
505 | 1.62k | vs = exif_get_short(entry->data, entry->order); |
506 | 1.62k | break; |
507 | 987 | default: |
508 | 987 | vs = 0; |
509 | 987 | break; |
510 | 3.71k | } |
511 | | /* search for the tag */ |
512 | 60.5k | for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++) |
513 | 56.8k | ; |
514 | 3.71k | if (!items[i].tag) { |
515 | 209 | snprintf (v, maxlen, _("Internal error (unknown value %hi)"), vs); |
516 | 209 | break; |
517 | 209 | } |
518 | 3.50k | CF (entry->format, items[i].fmt, v, maxlen) |
519 | | /* find the value */ |
520 | 9.59k | for (j = 0; items[i].elem[j].string && |
521 | 8.62k | (items[i].elem[j].index < vs); j++); |
522 | 1.92k | if (items[i].elem[j].index != vs) { |
523 | 1.01k | snprintf (v, maxlen, _("Unknown value %hi"), vs); |
524 | 1.01k | break; |
525 | 1.01k | } |
526 | 912 | strncpy (v, _(items[i].elem[j].string), maxlen); |
527 | 912 | break; |
528 | 78 | case MNOTE_OLYMPUS_TAG_NOISEREDUCTION: |
529 | 296 | case MNOTE_SANYO_TAG_WIDERANGE: |
530 | 418 | case MNOTE_SANYO_TAG_COLORADJUSTMENTMODE: |
531 | 756 | case MNOTE_SANYO_TAG_QUICKSHOT: |
532 | 1.01k | case MNOTE_SANYO_TAG_VOICEMEMO: |
533 | 1.13k | case MNOTE_SANYO_TAG_FLICKERREDUCE: |
534 | 1.46k | case MNOTE_SANYO_TAG_OPTICALZOOM: |
535 | 1.71k | case MNOTE_SANYO_TAG_DIGITALZOOM: |
536 | 2.13k | case MNOTE_SANYO_TAG_LIGHTSOURCESPECIAL: |
537 | 2.13k | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
538 | 1.58k | CC (entry->components, 1, v, maxlen) |
539 | 1.16k | vs = exif_get_short (entry->data, entry->order); |
540 | 1.16k | switch (vs) { |
541 | 341 | case 0: |
542 | 341 | strncpy (v, _("Off"), maxlen); |
543 | 341 | break; |
544 | 335 | case 1: |
545 | 335 | strncpy (v, _("On"), maxlen); |
546 | 335 | break; |
547 | 493 | default: |
548 | 493 | sprintf (buf, _("Unknown %hu"), vs); |
549 | 493 | strncat (v, buf, maxlen - strlen (v)); |
550 | 493 | break; |
551 | 1.16k | } |
552 | 1.16k | break; |
553 | 1.16k | case MNOTE_SANYO_TAG_SELFTIMER: |
554 | 1.00k | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
555 | 789 | CC (entry->components, 1, v, maxlen) |
556 | 572 | vs = exif_get_short (entry->data, entry->order); |
557 | 572 | switch (vs) { |
558 | 202 | case 0: |
559 | 202 | strncpy (v, _("Off"), maxlen); |
560 | 202 | break; |
561 | 66 | case 1: |
562 | 66 | strncpy (v, _("On"), maxlen); |
563 | 66 | break; |
564 | 66 | case 2: |
565 | 66 | strncpy (v, _("2 sec."), maxlen); |
566 | 66 | break; |
567 | 238 | default: |
568 | 238 | sprintf (buf, _("Unknown %hu"), vs); |
569 | 238 | strncat (v, buf, maxlen - strlen (v)); |
570 | 238 | break; |
571 | 572 | } |
572 | 572 | break; |
573 | 1.70k | case MNOTE_NIKON_TAG_LENS: |
574 | 1.70k | CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen) |
575 | 1.47k | CC (entry->components, 4, v, maxlen) |
576 | 1.24k | { |
577 | 1.24k | double ao,ac; |
578 | 1.24k | unsigned long fs,fl; |
579 | 1.24k | vr = exif_get_rational (entry->data, entry->order); |
580 | 1.24k | fs = R2L(vr); |
581 | 1.24k | vr = exif_get_rational (entry->data+8, entry->order); |
582 | 1.24k | fl = R2L(vr); |
583 | 1.24k | vr = exif_get_rational (entry->data+16, entry->order); |
584 | 1.24k | ao = R2D(vr); |
585 | 1.24k | vr = exif_get_rational (entry->data+24, entry->order); |
586 | 1.24k | ac = R2D(vr); |
587 | 1.24k | snprintf (v, maxlen, "%ld-%ldmm 1:%3.1f - %3.1f",fs,fl,ao,ac); |
588 | 1.24k | } |
589 | 1.24k | break; |
590 | | |
591 | | /* Olympus */ |
592 | 2.29k | case MNOTE_OLYMPUS_TAG_MODE: |
593 | 2.29k | CF (entry->format, EXIF_FORMAT_LONG, v, maxlen) |
594 | 2.07k | CC (entry->components, 3, v, maxlen) |
595 | 1.84k | vl = exif_get_long (entry->data, entry->order); |
596 | 1.84k | switch (vl) { |
597 | 298 | case 0: |
598 | 298 | strncpy (v, _("Normal"), maxlen); |
599 | 298 | break; |
600 | 194 | case 1: |
601 | 194 | strncpy (v, _("Unknown"), maxlen); |
602 | 194 | break; |
603 | 225 | case 2: |
604 | 225 | strncpy (v, _("Fast"), maxlen); |
605 | 225 | break; |
606 | 294 | case 3: |
607 | 294 | strncpy (v, _("Panorama"), maxlen); |
608 | 294 | break; |
609 | 834 | default: |
610 | 834 | snprintf (v, maxlen, "%li", (long int) vl); |
611 | 1.84k | } |
612 | 1.84k | vl = exif_get_long (entry->data + 4, entry->order); |
613 | 1.84k | snprintf (buf, sizeof (buf), "/%li/", (long int) vl); |
614 | 1.84k | strncat (v, buf, maxlen - strlen (v)); |
615 | 1.84k | vl = exif_get_long (entry->data + 8, entry->order); |
616 | 1.84k | switch (vl) { |
617 | 194 | case 1: |
618 | 194 | strncat (v, _("Left to right"), maxlen - strlen (v)); |
619 | 194 | break; |
620 | 195 | case 2: |
621 | 195 | strncat (v, _("Right to left"), maxlen - strlen (v)); |
622 | 195 | break; |
623 | 198 | case 3: |
624 | 198 | strncat (v, _("Bottom to top"), maxlen - strlen (v)); |
625 | 198 | break; |
626 | 194 | case 4: |
627 | 194 | strncat (v, _("Top to bottom"), maxlen - strlen (v)); |
628 | 194 | break; |
629 | 1.06k | default: |
630 | 1.06k | snprintf (buf, sizeof (buf), "%li", |
631 | 1.06k | (long int) vl); |
632 | 1.06k | strncat (v, buf, maxlen - strlen (v)); |
633 | 1.84k | } |
634 | 1.84k | break; |
635 | 1.84k | case MNOTE_OLYMPUS_TAG_LENSDISTORTION: |
636 | 1.60k | if (entry->format == EXIF_FORMAT_SHORT) { |
637 | | /* Epson uses a single SHORT here */ |
638 | 490 | CC (entry->components, 1, v, maxlen) |
639 | 197 | vs = exif_get_short (entry->data, entry->order); |
640 | 197 | sprintf (buf, "%hu", vs); |
641 | 197 | strncat (v, buf, maxlen - strlen (v)); |
642 | 1.11k | } else { |
643 | | /* Others use an array of SSHORT here */ |
644 | 1.11k | CC (entry->components, 6, v, maxlen) |
645 | 889 | CF (entry->format, EXIF_FORMAT_SSHORT, v, maxlen) |
646 | 4.83k | for (i=0; i < (int)entry->components; ++i) { |
647 | 4.14k | vss = exif_get_sshort (entry->data+2*i, entry->order); |
648 | 4.14k | sprintf (buf, "%hd ", vss); |
649 | 4.14k | strncat (v, buf, maxlen - strlen (v)); |
650 | 4.14k | } |
651 | 690 | } |
652 | 887 | break; |
653 | 1.19k | case MNOTE_OLYMPUS_TAG_COLORCONTROL: |
654 | 1.19k | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
655 | 996 | CC (entry->components, 6, v, maxlen) |
656 | 5.39k | for (i=0; i < (int)entry->components; ++i) { |
657 | 4.62k | vs = exif_get_short (entry->data+2*i, entry->order); |
658 | 4.62k | sprintf (buf, "%hu ", vs); |
659 | 4.62k | strncat (v, buf, maxlen - strlen (v)); |
660 | 4.62k | } |
661 | 770 | break; |
662 | 714 | case MNOTE_OLYMPUS_TAG_VERSION: |
663 | 714 | CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen) |
664 | 502 | CC2 (entry->components, 5, 8, v, maxlen) |
665 | 216 | strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); |
666 | 216 | break; |
667 | 875 | case MNOTE_OLYMPUS_TAG_SERIALNUMBER2: |
668 | 875 | CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen) |
669 | 536 | strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); |
670 | 536 | break; |
671 | 551 | case MNOTE_OLYMPUS_TAG_INFO: |
672 | 551 | CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen) |
673 | 332 | CC2 (entry->components, 52, 60, v, maxlen) |
674 | 90 | strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); |
675 | 90 | break; |
676 | 528 | case MNOTE_OLYMPUS_TAG_ID: |
677 | 528 | CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen) |
678 | 323 | CC (entry->components, 32, v, maxlen) |
679 | 235 | strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); |
680 | 235 | break; |
681 | 0 | case MNOTE_OLYMPUS_TAG_UNKNOWN_4: |
682 | 0 | CF (entry->format, EXIF_FORMAT_LONG, v, maxlen) |
683 | 0 | CC (entry->components, 30, v, maxlen) |
684 | 0 | for (i=0; i < (int)entry->components; ++i) { |
685 | 0 | vl = exif_get_long (entry->data+4*i, entry->order); |
686 | 0 | sprintf (buf, "%lu ", (unsigned long)vl); |
687 | 0 | strncat (v, buf, maxlen - strlen (v)); |
688 | 0 | } |
689 | 0 | break; |
690 | 1.18k | case MNOTE_OLYMPUS_TAG_FOCUSDIST: |
691 | 1.18k | CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen) |
692 | 1.05k | CC (entry->components, 1, v, maxlen) |
693 | 822 | vr = exif_get_rational (entry->data, entry->order); |
694 | 822 | if (!vr.numerator || !vr.denominator) { |
695 | 474 | strncpy (v, _("Unknown"), maxlen); |
696 | 474 | } |
697 | 348 | else { |
698 | 348 | unsigned long tmp = vr.numerator / vr.denominator; |
699 | 348 | snprintf (v, maxlen, "%li mm", tmp); |
700 | 348 | } |
701 | 822 | break; |
702 | 2.37k | case MNOTE_OLYMPUS_TAG_WBALANCE: |
703 | 2.37k | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
704 | 2.15k | CC (entry->components, 2, v, maxlen) |
705 | 1.96k | vs = exif_get_short (entry->data, entry->order); |
706 | 1.96k | switch (vs) { |
707 | 194 | case 1: |
708 | 194 | strncpy (v, _("Automatic"), maxlen); |
709 | 194 | break; |
710 | 1.33k | case 2: |
711 | 1.33k | { |
712 | 1.33k | ExifShort v2 = exif_get_short (entry->data + 2, entry->order); |
713 | 1.33k | unsigned long colorTemp = 0; |
714 | 1.33k | switch (v2) { |
715 | 207 | case 2: |
716 | 207 | colorTemp = 3000; |
717 | 207 | break; |
718 | 66 | case 3: |
719 | 66 | colorTemp = 3700; |
720 | 66 | break; |
721 | 213 | case 4: |
722 | 213 | colorTemp = 4000; |
723 | 213 | break; |
724 | 66 | case 5: |
725 | 66 | colorTemp = 4500; |
726 | 66 | break; |
727 | 196 | case 6: |
728 | 196 | colorTemp = 5500; |
729 | 196 | break; |
730 | 197 | case 7: |
731 | 197 | colorTemp = 6500; |
732 | 197 | break; |
733 | 195 | case 9: |
734 | 195 | colorTemp = 7500; |
735 | 195 | break; |
736 | 1.33k | } |
737 | 1.33k | if (colorTemp) { |
738 | 1.14k | snprintf (v, maxlen, _("Manual: %liK"), colorTemp); |
739 | 1.14k | } |
740 | 199 | else { |
741 | 199 | strncpy (v, _("Manual: unknown"), maxlen); |
742 | 199 | } |
743 | | |
744 | 1.33k | } |
745 | 0 | break; |
746 | 196 | case 3: |
747 | 196 | strncpy (v, _("One-touch"), maxlen); |
748 | 196 | break; |
749 | 232 | default: |
750 | 232 | strncpy (v, _("Unknown"), maxlen); |
751 | 232 | break; |
752 | 1.96k | } |
753 | 1.96k | break; |
754 | 1.96k | case MNOTE_OLYMPUS_TAG_REDBALANCE: |
755 | 898 | case MNOTE_OLYMPUS_TAG_BLUEBALANCE: |
756 | 898 | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
757 | 568 | CC (entry->components, 2, v, maxlen) |
758 | 218 | vs = exif_get_short (entry->data, entry->order); |
759 | 218 | snprintf (v, maxlen, "%hu ", vs); |
760 | 218 | vs = exif_get_short (entry->data + 2, entry->order); |
761 | 218 | sprintf (buf, "%hu", vs); |
762 | 218 | strncat (v, buf, maxlen - strlen (v)); |
763 | 218 | break; |
764 | 215 | case MNOTE_OLYMPUS_TAG_BLACKLEVEL: |
765 | 633 | case MNOTE_NIKON_TAG_IMAGEBOUNDARY: |
766 | 633 | CC (entry->components, 4, v, maxlen) |
767 | | /* Fall through to COLORMATRIX */ |
768 | | /* fall through */ |
769 | 1.00k | case MNOTE_OLYMPUS_TAG_COLORMATRIX: |
770 | 1.00k | CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen) |
771 | 789 | if (entry->tag == MNOTE_OLYMPUS_TAG_COLORMATRIX) |
772 | 424 | CC (entry->components, 9, v, maxlen) |
773 | 3.95k | for (i=0; i < (int)entry->components; ++i) { |
774 | 3.37k | vs = exif_get_short (entry->data+2*i, entry->order); |
775 | 3.37k | sprintf (buf, "%hu ", vs); |
776 | 3.37k | strncat (v, buf, maxlen - strlen (v)); |
777 | 3.37k | } |
778 | 578 | break; |
779 | 195 | case MNOTE_NIKON1_TAG_FOCUS: |
780 | 537 | case MNOTE_NIKON_TAG_DIGITALZOOM: |
781 | 739 | case MNOTE_NIKON1_TAG_DIGITALZOOM: |
782 | 1.21k | case MNOTE_OLYMPUS_TAG_FOCALPLANEDIAGONAL: |
783 | 1.21k | CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen) |
784 | | /* Fall through to default handler for display */ |
785 | | /* fall through */ |
786 | 3.97k | default: |
787 | 3.97k | switch (entry->format) { |
788 | 556 | case EXIF_FORMAT_ASCII: |
789 | 556 | strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); |
790 | 556 | break; |
791 | 457 | case EXIF_FORMAT_SHORT: |
792 | 457 | CC (entry->components, 1, v, maxlen) |
793 | 213 | vs = exif_get_short (entry->data, entry->order); |
794 | 213 | snprintf (v, maxlen, "%hu", vs); |
795 | 213 | break; |
796 | 407 | case EXIF_FORMAT_SSHORT: |
797 | 407 | CC (entry->components, 1, v, maxlen) |
798 | 196 | vss = exif_get_sshort (entry->data, entry->order); |
799 | 196 | snprintf (v, maxlen, "%hi", vss); |
800 | 196 | break; |
801 | 150 | case EXIF_FORMAT_LONG: |
802 | 150 | CC (entry->components, 1, v, maxlen) |
803 | 69 | vl = exif_get_long (entry->data, entry->order); |
804 | 69 | snprintf (v, maxlen, "%lu", (long unsigned) vl); |
805 | 69 | break; |
806 | 270 | case EXIF_FORMAT_SLONG: |
807 | 270 | CC (entry->components, 1, v, maxlen) |
808 | 67 | vsl = exif_get_slong (entry->data, entry->order); |
809 | 67 | snprintf (v, maxlen, "%li", (long int) vsl); |
810 | 67 | break; |
811 | 780 | case EXIF_FORMAT_RATIONAL: |
812 | 780 | CC (entry->components, 1, v, maxlen) |
813 | 606 | vr = exif_get_rational (entry->data, entry->order); |
814 | 606 | if (!vr.denominator) { |
815 | 258 | strncpy (v, _("Infinite"), maxlen); |
816 | 348 | } else { |
817 | 348 | r = R2D(vr); |
818 | 348 | snprintf (v, maxlen, "%2.3f", r); |
819 | 348 | } |
820 | 606 | break; |
821 | 799 | case EXIF_FORMAT_SRATIONAL: |
822 | 799 | CC (entry->components, 1, v, maxlen) |
823 | 547 | vsr = exif_get_srational (entry->data, entry->order); |
824 | 547 | if (!vsr.denominator) { |
825 | 226 | strncpy (v, _("Infinite"), maxlen); |
826 | 321 | } else { |
827 | 321 | r = R2D(vsr); |
828 | 321 | snprintf (v, maxlen, "%2.3f", r); |
829 | 321 | } |
830 | 547 | break; |
831 | 229 | case EXIF_FORMAT_UNDEFINED: |
832 | 553 | default: |
833 | 553 | snprintf (v, maxlen, _("%i bytes unknown data: "), |
834 | 553 | entry->size); |
835 | 32.3k | for (i = 0; i < (int)entry->size; i++) { |
836 | 31.7k | sprintf (buf, "%02x", entry->data[i]); |
837 | 31.7k | strncat (v, buf, maxlen - strlen (v)); |
838 | 31.7k | } |
839 | 553 | break; |
840 | 3.97k | } |
841 | 3.97k | break; |
842 | 47.9k | } |
843 | | |
844 | 47.9k | return (v); |
845 | 47.9k | } |