3 * Copyright © 2002 Lutz Müller <lutz@users.sourceforge.net>
4 * Copyright © 2003 Matthieu Castet <mat-c@users.sourceforge.net>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
23 #include "mnote-canon-entry.h"
29 #include <libexif/exif-format.h>
30 #include <libexif/exif-utils.h>
31 #include <libexif/i18n.h>
36 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
38 #define CF(format,target,v,maxlen) \
40 if (format != target) { \
41 snprintf (v, maxlen, \
42 _("Invalid format '%s', " \
44 exif_format_get_name (format), \
45 exif_format_get_name (target)); \
50 #define CC(number,target,v,maxlen) \
52 if (number != target) { \
53 snprintf (v, maxlen, \
54 _("Invalid number of components (%i, " \
55 "expected %i)."), (int) number, (int) target); \
59 #define CC2(number,t1,t2,v,maxlen) \
61 if ((number != t1) && (number != t2)) { \
62 snprintf (v, maxlen, \
63 _("Invalid number of components (%i, " \
64 "expected %i or %i)."), (int) number, \
65 (int) t1, (int) t2); \
71 mnote_canon_entry_get_value (const MnoteCanonEntry *entry, char *val, unsigned int maxlen)
77 unsigned char *data = entry->data;
79 if (!entry) return NULL;
81 memset (val, 0, maxlen);
85 case MNOTE_CANON_TAG_SETTINGS_1:
86 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
87 n = exif_get_short (data, entry->order) / 2;
89 CC (entry->components, n, val, maxlen);
90 for (i = 1; i < n; i++) {
91 vs = exif_get_short (data, entry->order);
95 strncpy (val, _("Macro mode : "), maxlen);
98 strncat (val, _("Macro"), maxlen - strlen(val));
101 strncat (val, _("Normal"), maxlen - strlen(val));
104 snprintf (buf, sizeof (buf), _("%i???"), vs);
105 strncat (val, buf, maxlen - strlen(val));
110 snprintf (buf, sizeof (buf),
111 _(" / Self Timer : %i (ms)"), vs*100);
112 strncat (val, buf, maxlen - strlen(val));
116 strncat (val, _(" / Flash mode : "), maxlen - strlen(val));
119 strncat (val, _("Flash not fired"), maxlen - strlen(val));
122 strncat (val, _("auto"), maxlen - strlen(val));
125 strncat (val, _("on"), maxlen - strlen(val));
128 strncat (val, _("red eyes reduction"), maxlen - strlen(val));
131 strncat (val, _("slow synchro"), maxlen - strlen(val));
134 strncat (val, _("auto + red eyes reduction"), maxlen - strlen(val));
137 strncat (val, _("on + red eyes reduction"), maxlen - strlen(val));
140 strncat (val, _("external"), maxlen - strlen(val));
143 snprintf (buf, sizeof (buf), _("%i???"), vs);
144 strncat (val, buf, maxlen - strlen(val));
148 strncat (val, _(" / Continuous drive mode : "), maxlen - strlen(val));
151 strncat (val, _("single or timer"), maxlen - strlen(val));
154 strncat (val, _("continuous"), maxlen - strlen(val));
157 snprintf (buf, sizeof (buf), _("%i???"), vs);
158 strncat (val, buf, maxlen - strlen(val));
162 strncat (val, _(" / Focus mode : "), maxlen - strlen(val));
165 strncat (val, _("One-Shot"), maxlen - strlen(val));
168 strncat (val, _("AI Servo"), maxlen - strlen(val));
171 strncat (val, _("AI Focus"), maxlen - strlen(val));
174 strncat (val, _("MF"), maxlen - strlen(val));
177 strncat (val, _("Single"), maxlen - strlen(val));
180 strncat (val, _("Continuous"), maxlen - strlen(val));
183 strncat (val, _("MF"), maxlen - strlen(val));
186 snprintf (buf, sizeof (buf), _("%i???"), vs);
187 strncat (val, buf, maxlen - strlen(val));
191 strncat (val, _(" / Image size : "), maxlen - strlen(val));
194 strncat (val, _("Large"), maxlen - strlen(val));
197 strncat (val, _("Medium"), maxlen - strlen(val));
200 strncat (val, _("Small"), maxlen - strlen(val));
203 snprintf (buf, sizeof (buf), _("%i???"), vs);
204 strncat (val, buf, maxlen - strlen(val));
208 strncat (val, _(" / Easy shooting mode : "), maxlen - strlen(val));
211 strncat (val, _("Full Auto"), maxlen - strlen(val));
214 strncat (val, _("Manual"), maxlen - strlen(val));
217 strncat (val, _("Landscape"), maxlen - strlen(val));
220 strncat (val, _("Fast Shutter"), maxlen - strlen(val));
223 strncat (val, _("Slow Shutter"), maxlen - strlen(val));
226 strncat (val, _("Night"), maxlen - strlen(val));
229 strncat (val, _("Black & White"), maxlen - strlen(val));
232 strncat (val, _("Sepia"), maxlen - strlen(val));
235 strncat (val, _("Portrait"), maxlen - strlen(val));
238 strncat (val, _("Sports"), maxlen - strlen(val));
241 strncat (val, _("Macro / Close-Up"), maxlen - strlen(val));
244 strncat (val, _("Pan Focus"), maxlen - strlen(val));
247 snprintf (buf, sizeof (buf), _("%i???"), vs);
248 strncat (val, buf, maxlen - strlen(val));
252 strncat (val, _(" / Contrast : "), maxlen - strlen(val));
255 strncat (val, _("Low"), maxlen - strlen(val));
258 strncat (val, _("Normal"), maxlen - strlen(val));
261 strncat (val, _("High"), maxlen - strlen(val));
264 snprintf (buf, sizeof (buf), _("%i???"), vs);
265 strncat (val, buf, maxlen - strlen(val));
269 strncat (val, _(" / Saturation : "), maxlen - strlen(val));
272 strncat (val, _("Low"), maxlen - strlen(val));
275 strncat (val, _("Normal"), maxlen - strlen(val));
278 strncat (val, _("High"), maxlen - strlen(val));
281 snprintf (buf, sizeof (buf), _("%i???"), vs);
282 strncat (val, buf, maxlen - strlen(val));
286 strncat (val, _(" / Sharpness : "), maxlen - strlen(val));
289 strncat (val, _("Low"), maxlen - strlen(val));
292 strncat (val, _("Normal"), maxlen - strlen(val));
295 strncat (val, _("High"), maxlen - strlen(val));
298 snprintf (buf, sizeof (buf), _("%i???"), vs);
299 strncat (val, buf, maxlen - strlen(val));
304 strncat (val, _(" / ISO : "), maxlen - strlen(val));
307 strncat (val, _("auto"), maxlen - strlen(val));
310 strncat (val, _("50"), maxlen - strlen(val));
313 strncat (val, _("100"), maxlen - strlen(val));
316 strncat (val, _("200"), maxlen - strlen(val));
319 strncat (val, _("400"), maxlen - strlen(val));
322 snprintf (buf, sizeof (buf), _("%i???"), vs);
323 strncat (val, buf, maxlen - strlen(val));
328 strncat (val, _(" / Metering mode : "), maxlen - strlen(val));
331 strncat (val, _("Evaluative"), maxlen - strlen(val));
334 strncat (val, _("Partial"), maxlen - strlen(val));
337 strncat (val, _("Center-weighted"), maxlen - strlen(val));
340 snprintf (buf, sizeof (buf), _("%i???"), vs);
341 strncat (val, buf, maxlen - strlen(val));
345 strncat (val, _(" / AF point selected : "), maxlen - strlen(val));
348 strncat (val, _("none (MF)"), maxlen - strlen(val));
351 strncat (val, _("auto-selected"), maxlen - strlen(val));
354 strncat (val, _("right"), maxlen - strlen(val));
357 strncat (val, _("center"), maxlen - strlen(val));
360 strncat (val, _("left"), maxlen - strlen(val));
363 snprintf (buf, sizeof (buf), _("0x%x???"), vs);
364 strncat (val, buf, maxlen - strlen(val));
368 strncat (val, _(" / Exposure mode : "), maxlen - strlen(val));
371 strncat (val, _("Easy shooting"), maxlen - strlen(val));
374 strncat (val, _("Program"), maxlen - strlen(val));
377 strncat (val, _("Tv-priority"), maxlen - strlen(val));
380 strncat (val, _("Av-priority"), maxlen - strlen(val));
383 strncat (val, _("Manual"), maxlen - strlen(val));
386 strncat (val, _("A-DEP"), maxlen - strlen(val));
389 snprintf (buf, sizeof (buf), _("%i???"), vs);
390 strncat (val, buf, maxlen - strlen(val));
394 snprintf (buf, sizeof (buf), _(" / long focal length of lens (in focal units) : %u"), vs);
395 strncat (val, buf, maxlen - strlen(val));
398 snprintf (buf, sizeof (buf), _(" / short focal length of lens (in focal units) : %u"), vs);
399 strncat (val, buf, maxlen - strlen(val));
402 snprintf (buf, sizeof (buf), _(" / focal units per mm : %u"), vs);
403 strncat (val, buf, maxlen - strlen(val));
406 strncat (val, _(" / Flash details : "), maxlen - strlen(val));
408 strncat (val, _("External E-TTL"), maxlen - strlen(val));
410 strncat (val, _("Internal flash"), maxlen - strlen(val));
412 strncat (val, _("FP sync used"), maxlen - strlen(val));
414 strncat (val, _("FP sync enabled"), maxlen - strlen(val));
416 printf ("Value29=0x%08x\n", vs);
420 strncat (val, _(" / Focus mode2 : "), maxlen - strlen(val));
423 strncat (val, _("Single"), maxlen - strlen(val));
426 strncat (val, _("Continuous"), maxlen - strlen(val));
429 snprintf (buf, sizeof (buf), _("%i???"), vs);
430 strncat (val, buf, maxlen - strlen(val));
435 printf ("Value%d=%d\n", i, vs);
442 case MNOTE_CANON_TAG_SETTINGS_2:
443 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
444 n = exif_get_short (data, entry->order)/2;
446 CC (entry->components, n, val, maxlen);
448 printf ("Setting2 size %d %d\n",n,entry->size);
452 vs = exif_get_short (data, entry->order);
456 strncpy (val, _("White balance : "), maxlen - strlen(val));
459 strncat (val, _("Auto"), maxlen - strlen(val));
462 strncat (val, _("Sunny"), maxlen - strlen(val));
465 strncat (val, _("Cloudy"), maxlen - strlen(val));
468 strncat (val, _("Tungsten"), maxlen - strlen(val));
471 strncat (val, _("Flourescent"), maxlen - strlen(val));
474 strncat (val, _("Flash"), maxlen - strlen(val));
477 strncat (val, _("Custom"), maxlen - strlen(val));
480 snprintf (buf, sizeof (buf), _("%i???"), vs);
481 strncat (val, buf, maxlen - strlen(val));
485 snprintf (buf, sizeof (buf), _(" / Sequence number : %u"), vs);
486 strncat (val, buf, maxlen - strlen(val));
491 strncat (val, _(" / AF point used : "), maxlen - strlen(val));
493 strncat (val, _("Right"), maxlen - strlen(val));
495 strncat (val, _("Center"), maxlen - strlen(val));
497 strncat (val, _("Left"), maxlen - strlen(val));
498 snprintf (buf, sizeof (buf), _(" (%u available focus point)"), vs>>12);
499 strncat (val, buf, maxlen - strlen(val));
502 printf ("0x%08x\n", vs);
506 snprintf (buf, sizeof (buf), _(" / Flash bias : %.2f EV"), vs/32.0);
507 strncat (val, buf, maxlen - strlen(val));
511 snprintf (buf, sizeof (buf), _(" / Subject Distance (mm) : %u"), vs);
512 strncat (val, buf, maxlen - strlen(val));
516 printf ("Value%d=%d\n", i, vs);
523 case MNOTE_CANON_TAG_IMAGE_TYPE:
524 case MNOTE_CANON_TAG_OWNER:
525 CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen);
526 CC (entry->components, 32, val, maxlen);
527 strncpy (val, (char *)data, MIN (entry->size, maxlen));
530 case MNOTE_CANON_TAG_FIRMWARE:
531 CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen);
532 CC2 (entry->components, 24, 32, val, maxlen);
533 strncpy (val, (char *)data, MIN (entry->size, maxlen));
536 case MNOTE_CANON_TAG_IMAGE_NUMBER:
537 CF (entry->format, EXIF_FORMAT_LONG, val, maxlen);
538 CC (entry->components, 1, val, maxlen);
539 vl = exif_get_long (data, entry->order);
540 snprintf (val, maxlen, "%03lu-%04lu",
541 (unsigned long) vl/10000,
542 (unsigned long) vl%10000);
545 case MNOTE_CANON_TAG_SERIAL_NUMBER:
546 CF (entry->format, EXIF_FORMAT_LONG, val, maxlen);
547 CC (entry->components, 1, val, maxlen);
548 vl = exif_get_long (data, entry->order);
549 snprintf (val, maxlen, "%04X-%05d", (int)vl>>16,(int)vl&0xffff);
552 case MNOTE_CANON_TAG_CUSTOM_FUNCS:
553 CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
554 n = exif_get_short (data, entry->order)/2;
556 CC (entry->components, n, val, maxlen);
558 printf ("Custom Function size %d %d\n",n,entry->size);
562 vs = exif_get_short (data, entry->order);
564 snprintf (buf, sizeof(buf), _("C.F%d : %u"), i, vs);
565 strncat (val, buf, maxlen - strlen(val));
571 if (entry->format == EXIF_FORMAT_SHORT)
572 for(i=0;i<entry->components;i++) {
573 vs = exif_get_short (data, entry->order);
575 printf ("Value%d=%d\n", i, vs);
577 else if (entry->format == EXIF_FORMAT_LONG)
578 for(i=0;i<entry->components;i++) {
579 vl = exif_get_long (data, entry->order);
581 printf ("Value%d=%d\n", i, vs);
583 else if (entry->format == EXIF_FORMAT_ASCII)
584 strncpy (val, data, MIN (entry->size, maxlen));