35#define CF(format,target,v,maxlen) \
37 if (format != target) { \
38 snprintf (v, maxlen, \
39 _("Invalid format '%s', " \
41 exif_format_get_name (format), \
42 exif_format_get_name (target)); \
47#define CF2(format,target1,target2,v,maxlen) \
49 if ((format != target1) && (format != target2)) { \
50 snprintf (v, maxlen, \
51 _("Invalid format '%s', " \
52 "expected '%s' or '%s'."), \
53 exif_format_get_name (format), \
54 exif_format_get_name (target1), \
55 exif_format_get_name (target2)); \
60#define CC(number,target,v,maxlen) \
62 if (number != target) { \
63 snprintf (v, maxlen, \
64 _("Invalid number of components (%i, " \
65 "expected %i)."), (int) number, (int) target); \
70#define CC2(number,t1,t2,v,maxlen) \
72 if ((number < t1) || (number > t2)) { \
73 snprintf (v, maxlen, \
74 _("Invalid number of components (%i, " \
75 "expected %i or %i)."), (int) number, \
76 (int) t1, (int) t2); \
81#define R2L(n) ((n).denominator ? (unsigned long)(n).numerator/(n).denominator : 0L)
82#define R2D(n) ((n).denominator ? (double)(n).numerator/(n).denominator : 0.0)
92#ifndef NO_VERBOSE_TAG_DATA
94 { {0,
N_(
"AF non D lens")},
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")},
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")},
108 { {1,
N_(
"VGA basic")},
109 {2,
N_(
"VGA normal")},
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")},
120 {2,
N_(
"Monochrome")},
126 {3,
N_(
"Contrast+")},
127 {4,
N_(
"Contrast-")},
139 {3,
N_(
"Incandescence")},
140 {4,
N_(
"Fluorescence")},
142 {6,
N_(
"SpeedLight")},
145 { {0,
N_(
"No fisheye")},
146 {1,
N_(
"Fisheye on")},
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")},
176 {2,
N_(
"Super macro")},
185 {2,
N_(
"On (Preset)")},
189 {1,
N_(
"Red-eye reduction")},
197 {5,
N_(
"Internal + external")},
226 { {0,
N_(
"Interlaced")},
227 {1,
N_(
"Progressive")},
234 {3,
N_(
"Adjust exposure")},
237 { {1,
N_(
"Spot focus")},
238 {2,
N_(
"Normal focus")},
241 { {0,
N_(
"Record while down")},
242 {1,
N_(
"Press start, press stop")},
265 { {0,
N_(
"5 frames/sec")},
266 {1,
N_(
"10 frames/sec")},
267 {2,
N_(
"15 frames/sec")},
268 {3,
N_(
"20 frames/sec")},
271 { 0, 0, { { 0, NULL } } }
292 memset (v, 0, maxlen);
298 if ((!entry->
data) && (entry->
size > 0))
301 switch (entry->
tag) {
308 if ((vl & 0xF0F0F0F0) == 0x30303030) {
309 memcpy (v, entry->
data,
MIN (maxlen, 4));
311 snprintf (v, maxlen,
"%04lx", (
long unsigned int) vl);
319 snprintf (v, maxlen,
"ISO %hd", vs);
326 snprintf (v, maxlen,
"ISO2 %hd", vs);
350 snprintf (v, maxlen,
"%lu", (
long unsigned int) vl );
358 h = (vl>>24)&0xff; m = (vl>>16)&0xff; l = (vl>>8)&0xff;
359 snprintf (v, maxlen,
"%.1f", l?(
double)h*((
double)m/(
double)l):0 );
367 snprintf (v, maxlen,
"%.1f", ((
long unsigned int) vl>>24)/6.0 );
377 snprintf (v, maxlen,
"%hd", vs);
386 snprintf (v, maxlen,
_(
"Red Correction %f, blue Correction %f"), r,b);
393 strncpy (v,
_(
"No manual focus selection"), maxlen);
396 snprintf (v, maxlen,
_(
"%2.2f meters"), r);
406 snprintf (v, maxlen,
"%2.2f x %2.2f um", r, b);
416 snprintf (v, maxlen,
"%hd", vs);
421 switch ( *( entry->
data+1) ) {
422 case 0: strncpy (v,
_(
"AF position: center"), maxlen);
break;
423 case 1: strncpy (v,
_(
"AF position: top"), maxlen);
break;
424 case 2: strncpy (v,
_(
"AF position: bottom"), maxlen);
break;
425 case 3: strncpy (v,
_(
"AF position: left"), maxlen);
break;
426 case 4: strncpy (v,
_(
"AF position: right"), maxlen);
break;
427 case 5: strncpy (v,
_(
"AF position: upper-left"), maxlen);
break;
428 case 6: strncpy (v,
_(
"AF position: upper-right"), maxlen);
break;
429 case 7: strncpy (v,
_(
"AF position: lower-left"), maxlen);
break;
430 case 8: strncpy (v,
_(
"AF position: lower-right"), maxlen);
break;
431 case 9: strncpy (v,
_(
"AF position: far left"), maxlen);
break;
432 case 10: strncpy (v,
_(
"AF position: far right"), maxlen);
break;
433 default: strncpy (v,
_(
"Unknown AF position"), maxlen);
441 for (i = 0; (
items[i].tag &&
items[i].tag != entry->
tag); i++)
444 snprintf (v, maxlen,
_(
"Internal error (unknown value %hi)"), vs);
449 for (j = 0;
items[i].elem[j].string &&
450 (
items[i].elem[j].index < vs); j++);
452 snprintf (v, maxlen,
_(
"Unknown value %hi"), vs);
455 strncpy (v,
_(
items[i].
elem[j].
string), maxlen);
462 strncpy (v,
_(
"None"), maxlen);
465 snprintf (v, maxlen,
"%2.2f", r);
512 for (i = 0; (
items[i].tag &&
items[i].tag != entry->
tag); i++)
515 snprintf (v, maxlen,
_(
"Internal error (unknown value %hi)"), vs);
520 for (j = 0;
items[i].elem[j].string &&
521 (
items[i].elem[j].index < vs); j++);
523 snprintf (v, maxlen,
_(
"Unknown value %hi"), vs);
526 strncpy (v,
_(
items[i].
elem[j].
string), maxlen);
542 strncpy (v,
_(
"Off"), maxlen);
545 strncpy (v,
_(
"On"), maxlen);
548 sprintf (buf,
_(
"Unknown %hu"), vs);
549 strncat (v, buf, maxlen - strlen (v));
559 strncpy (v,
_(
"Off"), maxlen);
562 strncpy (v,
_(
"On"), maxlen);
565 strncpy (v,
_(
"2 sec."), maxlen);
568 sprintf (buf,
_(
"Unknown %hu"), vs);
569 strncat (v, buf, maxlen - strlen (v));
587 snprintf (v, maxlen,
"%ld-%ldmm 1:%3.1f - %3.1f",fs,fl,ao,ac);
598 strncpy (v,
_(
"Normal"), maxlen);
601 strncpy (v,
_(
"Unknown"), maxlen);
604 strncpy (v,
_(
"Fast"), maxlen);
607 strncpy (v,
_(
"Panorama"), maxlen);
610 snprintf (v, maxlen,
"%li", (
long int) vl);
613 snprintf (buf,
sizeof (buf),
"/%li/", (
long int) vl);
614 strncat (v, buf, maxlen - strlen (v));
618 strncat (v,
_(
"Left to right"), maxlen - strlen (v));
621 strncat (v,
_(
"Right to left"), maxlen - strlen (v));
624 strncat (v,
_(
"Bottom to top"), maxlen - strlen (v));
627 strncat (v,
_(
"Top to bottom"), maxlen - strlen (v));
630 snprintf (buf,
sizeof (buf),
"%li",
632 strncat (v, buf, maxlen - strlen (v));
640 sprintf (buf,
"%hu", vs);
641 strncat (v, buf, maxlen - strlen (v));
648 sprintf (buf,
"%hd ", vss);
649 strncat (v, buf, maxlen - strlen (v));
658 sprintf (buf,
"%hu ", vs);
659 strncat (v, buf, maxlen - strlen (v));
665 strncpy (v, (
char *)entry->
data,
MIN (maxlen, entry->
size));
669 strncpy (v, (
char *)entry->
data,
MIN (maxlen, entry->
size));
674 strncpy (v, (
char *)entry->
data,
MIN (maxlen, entry->
size));
679 strncpy (v, (
char *)entry->
data,
MIN (maxlen, entry->
size));
686 sprintf (buf,
"%lu ", (
unsigned long)vl);
687 strncat (v, buf, maxlen - strlen (v));
695 strncpy (v,
_(
"Unknown"), maxlen);
699 snprintf (v, maxlen,
"%li mm", tmp);
708 strncpy (v,
_(
"Automatic"), maxlen);
713 unsigned long colorTemp = 0;
738 snprintf (v, maxlen,
_(
"Manual: %liK"), colorTemp);
741 strncpy (v,
_(
"Manual: unknown"), maxlen);
747 strncpy (v,
_(
"One-touch"), maxlen);
750 strncpy (v,
_(
"Unknown"), maxlen);
759 snprintf (v, maxlen,
"%hu ", vs);
761 sprintf (buf,
"%hu", vs);
762 strncat (v, buf, maxlen - strlen (v));
775 sprintf (buf,
"%hu ", vs);
776 strncat (v, buf, maxlen - strlen (v));
789 strncpy (v, (
char *)entry->
data,
MIN (maxlen, entry->
size));
794 snprintf (v, maxlen,
"%hu", vs);
799 snprintf (v, maxlen,
"%hi", vss);
804 snprintf (v, maxlen,
"%lu", (
long unsigned) vl);
809 snprintf (v, maxlen,
"%li", (
long int) vsl);
815 strncpy (v,
_(
"Infinite"), maxlen);
818 snprintf (v, maxlen,
"%2.3f", r);
825 strncpy (v,
_(
"Infinite"), maxlen);
828 snprintf (v, maxlen,
"%2.3f", r);
833 snprintf (v, maxlen,
_(
"%i bytes unknown data: "),
835 for (i = 0; i < (int)entry->
size; i++) {
836 sprintf (buf,
"%02x", entry->
data[i]);
837 strncat (v, buf, maxlen - strlen (v));
@ EXIF_BYTE_ORDER_INTEL
Little-endian byte order.
ExifRational exif_get_rational(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifRational value from memory.
ExifLong exif_get_long(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifLong value from memory.
ExifShort exif_get_short(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifShort value from memory.
ExifSLong exif_get_slong(const unsigned char *b, ExifByteOrder order)
Retrieve an ExifSLong value from memory.
ExifSShort exif_get_sshort(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifSShort value from memory.
ExifSRational exif_get_srational(const unsigned char *buf, ExifByteOrder order)
Retrieve an ExifSRational value from memory.
EXIF data manipulation functions and types.
uint32_t ExifLong
EXIF Unsigned Long data type.
int32_t ExifSLong
EXIF Signed Long data type.
uint16_t ExifShort
EXIF Unsigned Short data type.
int16_t ExifSShort
EXIF Signed Short data type.
#define CC(number, target, v, maxlen)
char * mnote_olympus_entry_get_value(MnoteOlympusEntry *entry, char *v, unsigned int maxlen)
static const struct @13 items[]
#define CF(format, target, v, maxlen)
#define CC2(number, t1, t2, v, maxlen)
#define CF2(format, target1, target2, v, maxlen)
@ MNOTE_NIKON1_TAG_WHITEBALANCE
@ MNOTE_SANYO_TAG_FLICKERREDUCE
@ MNOTE_NIKON_TAG_IMAGEADJUSTMENT
@ MNOTE_OLYMPUS_TAG_REDBALANCE
@ MNOTE_OLYMPUS_TAG_FOCALPLANEDIAGONAL
@ MNOTE_EPSON_TAG_SOFTWARE
@ MNOTE_OLYMPUS_TAG_FOCUSRANGE
@ MNOTE_OLYMPUS_TAG_EXTERNALFLASHBOUNCE
@ MNOTE_SANYO_TAG_FOCUSMODE
@ MNOTE_SANYO_TAG_QUICKSHOT
@ MNOTE_NIKON_TAG_TOTALPICTURES
@ MNOTE_SANYO_TAG_CCDSENSITIVITY
@ MNOTE_NIKON_TAG_SATURATION2
@ MNOTE_OLYMPUS_TAG_ONETOUCHWB
@ MNOTE_OLYMPUS_TAG_FLASHDEVICE
@ MNOTE_OLYMPUS_TAG_CONTRAST
@ MNOTE_OLYMPUS_TAG_FLASHMODE
@ MNOTE_SANYO_TAG_COLORADJUSTMENTMODE
@ MNOTE_NIKON1_TAG_CCDSENSITIVITY
@ MNOTE_NIKON_TAG_WHITEBALANCERB
@ MNOTE_NIKON1_TAG_IMAGEADJUSTMENT
@ MNOTE_OLYMPUS_TAG_LENSTEMPERATURE
@ MNOTE_NIKON_TAG_ISOSELECTION
@ MNOTE_OLYMPUS_TAG_VERSION
@ MNOTE_NIKON_TAG_SATURATION
@ MNOTE_OLYMPUS_TAG_SHARPNESS
@ MNOTE_NIKON_TAG_COLORMODE
@ MNOTE_SANYO_TAG_SELFTIMER
@ MNOTE_OLYMPUS_TAG_SENSORTEMPERATURE
@ MNOTE_OLYMPUS_TAG_NOISEREDUCTION
@ MNOTE_NIKON_TAG_SENSORPIXELSIZE
@ MNOTE_OLYMPUS_TAG_BWMODE
@ MNOTE_NIKON_TAG_EXPOSUREDIFF
@ MNOTE_OLYMPUS_TAG_QUALITY
@ MNOTE_SANYO_TAG_WIDERANGE
@ MNOTE_OLYMPUS_TAG_MACRO
@ MNOTE_OLYMPUS_TAG_CCDSCANMODE
@ MNOTE_OLYMPUS_TAG_UNKNOWN_4
@ MNOTE_NIKON_TAG_MANUALFOCUSDISTANCE
@ MNOTE_OLYMPUS_TAG_PREVIEWIMAGEVALID
@ MNOTE_OLYMPUS_TAG_COLORMATRIX
@ MNOTE_OLYMPUS_TAG_SERIALNUMBER2
@ MNOTE_NIKON1_TAG_COLORMODE
@ MNOTE_EPSON_TAG_IMAGE_WIDTH
@ MNOTE_NIKON_TAG_FLASHMODE
@ MNOTE_NIKON1_TAG_DIGITALZOOM
@ MNOTE_OLYMPUS_TAG_BLACKLEVEL
@ MNOTE_OLYMPUS_TAG_FOCUSDIST
@ MNOTE_NIKON_TAG_FLASHEXPCOMPENSATION
@ MNOTE_NIKON_TAG_FIRMWARE
@ MNOTE_NIKON1_TAG_CONVERTER
@ MNOTE_SANYO_TAG_VOICEMEMO
@ MNOTE_SANYO_TAG_DIGITALZOOM
@ MNOTE_NIKON_TAG_ADAPTER
@ MNOTE_OLYMPUS_TAG_WBALANCE
@ MNOTE_NIKON_TAG_WHITEBALANCE
@ MNOTE_NIKON_TAG_FLASHEXPOSUREBRACKETVAL
@ MNOTE_OLYMPUS_TAG_MANFOCUS
@ MNOTE_NIKON_TAG_LENSTYPE
@ MNOTE_NIKON_TAG_FLASHUSED
@ MNOTE_OLYMPUS_TAG_BLUEBALANCE
@ MNOTE_NIKON_TAG_QUALITY
@ MNOTE_NIKON_TAG_AFFOCUSPOSITION
@ MNOTE_NIKON_TAG_LENS_FSTOPS
@ MNOTE_SANYO_TAG_RESAVED
@ MNOTE_SANYO_TAG_SEQUENTIALSHOT
@ MNOTE_NIKON_TAG_SHARPENING
@ MNOTE_EPSON_TAG_IMAGE_HEIGHT
@ MNOTE_OLYMPUS_TAG_DIGIZOOM
@ MNOTE_SANYO_TAG_RECORDSHUTTERRELEASE
@ MNOTE_SANYO_TAG_SCENESELECT
@ MNOTE_NIKON_TAG_DIGITALZOOM
@ MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL
@ MNOTE_NIKON_TAG_BRACKETING
@ MNOTE_OLYMPUS_TAG_LENSDISTORTION
@ MNOTE_NIKON_TAG_FOCUSMODE
@ MNOTE_NIKON1_TAG_QUALITY
@ MNOTE_NIKON_TAG_FLASHSETTING
@ MNOTE_NIKON_TAG_IMAGEBOUNDARY
@ MNOTE_SANYO_TAG_OPTICALZOOM
@ MNOTE_NIKON_TAG_COLORMODE1
@ MNOTE_OLYMPUS_TAG_COLORCONTROL
@ MNOTE_SANYO_TAG_LIGHTSOURCESPECIAL
@ MNOTE_NIKON_TAG_WHITEBALANCEFINE
enum _MnoteOlympusTag MnoteOlympusTag
EXIF Unsigned Rational data type.
EXIF Signed Rational data type.