36#define CF(format,target,v,maxlen) \
38 if (format != target) { \
39 snprintf (v, maxlen, \
40 _("Invalid format '%s', " \
42 exif_format_get_name (format), \
43 exif_format_get_name (target)); \
48#define CC(number,target,v,maxlen) \
50 if (number != target) { \
51 snprintf (v, maxlen, \
52 _("Invalid number of components (%i, " \
53 "expected %i)."), (int) number, (int) target); \
57#define CC2(number,t1,t2,v,maxlen) \
59 if ((number != t1) && (number != t2)) { \
60 snprintf (v, maxlen, \
61 _("Invalid number of components (%i, " \
62 "expected %i or %i)."), (int) number, \
63 (int) t1, (int) t2); \
75#ifndef NO_VERBOSE_TAG_DATA
77 { 0, 2,
N_(
"Normal")},
78 { 2, 1,
N_(
"Economy")},
79 { 2, 2,
N_(
"Normal")},
82 { 2, 5,
N_(
"Superfine")},
86 { 3, 3,
N_(
"Red-eye reduction")},
87 { 3, 4,
N_(
"Slow synchro")},
88 { 3, 5,
N_(
"Auto, red-eye reduction")},
89 { 3, 6,
N_(
"On, red-eye reduction")},
90 { 3, 16,
N_(
"External flash")},
91 { 4, 0,
N_(
"Single")},
92 { 4, 1,
N_(
"Continuous")},
94 { 4, 3,
N_(
"Continuous, speed priority")},
95 { 4, 4,
N_(
"Continuous, low")},
96 { 4, 5,
N_(
"Continuous, high")},
97 { 6, 0,
N_(
"One-shot AF")},
98 { 6, 1,
N_(
"AI servo AF")},
99 { 6, 2,
N_(
"AI focus AF")},
100 { 6, 3,
N_(
"Manual focus")},
101 { 6, 4,
N_(
"Single")},
102 { 6, 5,
N_(
"Continuous")},
103 { 6, 6,
N_(
"Manual focus")},
104 { 6, 16,
N_(
"Pan focus")},
106 { 8, 2,
N_(
"CRW+THM")},
107 { 8, 3,
N_(
"AVI+THM")},
109 { 8, 5,
N_(
"TIF+JPEG")},
111 { 8, 7,
N_(
"CR2+JPEG")},
112 { 9, 0,
N_(
"Large")},
113 { 9, 1,
N_(
"Medium")},
114 { 9, 2,
N_(
"Small")},
115 { 9, 5,
N_(
"Medium 1")},
116 { 9, 6,
N_(
"Medium 2")},
117 { 9, 7,
N_(
"Medium 3")},
118 { 9, 8,
N_(
"Postcard")},
119 { 9, 9,
N_(
"Widescreen")},
120 {10, 0,
N_(
"Full auto")},
121 {10, 1,
N_(
"Manual")},
122 {10, 2,
N_(
"Landscape")},
123 {10, 3,
N_(
"Fast shutter")},
124 {10, 4,
N_(
"Slow shutter")},
125 {10, 5,
N_(
"Night")},
126 {10, 6,
N_(
"Grayscale")},
127 {10, 7,
N_(
"Sepia")},
128 {10, 8,
N_(
"Portrait")},
129 {10, 9,
N_(
"Sports")},
130 {10, 10,
N_(
"Macro")},
131 {10, 11,
N_(
"Black & white")},
132 {10, 12,
N_(
"Pan focus")},
133 {10, 13,
N_(
"Vivid")},
134 {10, 14,
N_(
"Neutral")},
135 {10, 15,
N_(
"Flash off")},
136 {10, 16,
N_(
"Long shutter")},
137 {10, 17,
N_(
"Super macro")},
138 {10, 18,
N_(
"Foliage")},
139 {10, 19,
N_(
"Indoor")},
140 {10, 20,
N_(
"Fireworks")},
141 {10, 21,
N_(
"Beach")},
142 {10, 22,
N_(
"Underwater")},
143 {10, 23,
N_(
"Snow")},
144 {10, 24,
N_(
"Kids & pets")},
145 {10, 25,
N_(
"Night snapshot")},
146 {10, 26,
N_(
"Digital macro")},
147 {10, 27,
N_(
"My colors")},
148 {10, 28,
N_(
"Still image")},
149 {10, 30,
N_(
"Color accent")},
150 {10, 31,
N_(
"Color swap")},
151 {10, 32,
N_(
"Aquarium")},
152 {10, 33,
N_(
"ISO 3200")},
156 {11, 3,
N_(
"Other")},
157 {12, 0x0000,
N_(
"Normal")},
158 {12, 0x0001,
N_(
"High")},
159 {12, 0xffff,
N_(
"Low")},
160 {13, 0x0000,
N_(
"Normal")},
161 {13, 0x0001,
N_(
"High")},
162 {13, 0xffff,
N_(
"Low")},
163 {14, 0x0000,
N_(
"Normal")},
164 {14, 0x0001,
N_(
"High")},
165 {14, 0xffff,
N_(
"Low")},
166 {15, 14,
N_(
"Auto high")},
167 {15, 15,
N_(
"Auto")},
173 {16, 0,
N_(
"Default")},
175 {16, 2,
N_(
"Average")},
176 {16, 3,
N_(
"Evaluative")},
177 {16, 4,
N_(
"Partial")},
178 {16, 5,
N_(
"Center-weighted average")},
179 {17, 0,
N_(
"Manual")},
181 {17, 2,
N_(
"Not known")},
182 {17, 3,
N_(
"Macro")},
183 {17, 4,
N_(
"Very close")},
184 {17, 5,
N_(
"Close")},
185 {17, 6,
N_(
"Middle range")},
186 {17, 7,
N_(
"Far range")},
187 {17, 8,
N_(
"Pan focus")},
188 {17, 9,
N_(
"Super macro")},
189 {17, 10,
N_(
"Infinity")},
190 {18, 0x2005,
N_(
"Manual AF point selection")},
191 {18, 0x3000,
N_(
"None (MF)")},
192 {18, 0x3001,
N_(
"Auto-selected")},
193 {18, 0x3002,
N_(
"Right")},
194 {18, 0x3003,
N_(
"Center")},
195 {18, 0x3004,
N_(
"Left")},
196 {18, 0x4001,
N_(
"Auto AF point selection")},
197 {19, 0,
N_(
"Easy shooting")},
198 {19, 1,
N_(
"Program")},
199 {19, 2,
N_(
"Tv-priority")},
200 {19, 3,
N_(
"Av-priority")},
201 {19, 4,
N_(
"Manual")},
202 {19, 5,
N_(
"A-DEP")},
203 {19, 6,
N_(
"M-DEP")},
204 {21, 1,
N_(
"Canon EF 50mm f/1.8")},
205 {21, 2,
N_(
"Canon EF 28mm f/2.8")},
206 {21, 4,
N_(
"Sigma UC Zoom 35-135mm f/4-5.6")},
207 {21, 6,
N_(
"Tokina AF193-2 19-35mm f/3.5-4.5")},
208 {21, 7,
N_(
"Canon EF 100-300mm F5.6L")},
209 {21, 10,
N_(
"Sigma 50mm f/2.8 EX or 28mm f/1.8")},
210 {21, 11,
N_(
"Canon EF 35mm f/2")},
211 {21, 13,
N_(
"Canon EF 15mm f/2.8")},
212 {21, 21,
N_(
"Canon EF 80-200mm f/2.8L")},
213 {21, 22,
N_(
"Tokina AT-X280AF PRO 28-80mm F2.8 Aspherical")},
214 {21, 26,
N_(
"Cosina 100mm f/3.5 Macro AF")},
215 {21, 28,
N_(
"Tamron AF Aspherical 28-200mm f/3.8-5.6")},
216 {21, 29,
N_(
"Canon EF 50mm f/1.8 MkII")},
217 {21, 31,
N_(
"Tamron SP AF 300mm f/2.8 LD IF")},
218 {21, 32,
N_(
"Canon EF 24mm f/2.8 or Sigma 15mm f/2.8 EX Fisheye")},
219 {21, 37,
N_(
"Canon EF 35-80mm f/4-5.6")},
220 {21, 39,
N_(
"Canon EF 75-300mm f/4-5.6")},
221 {21, 40,
N_(
"Canon EF 28-80mm f/3.5-5.6")},
222 {21, 43,
N_(
"Canon EF 28-105mm f/4-5.6")},
223 {21, 45,
N_(
"Canon EF-S 18-55mm f/3.5-5.6")},
224 {21, 52,
N_(
"Canon EF-S 18-55mm f/3.5-5.6 IS II")},
225 {21, 124,
N_(
"Canon MP-E 65mm f/2.8 1-5x Macro Photo")},
226 {21, 125,
N_(
"Canon TS-E 24mm f/3.5L")},
227 {21, 126,
N_(
"Canon TS-E 45mm f/2.8")},
228 {21, 127,
N_(
"Canon TS-E 90mm f/2.8")},
229 {21, 130,
N_(
"Canon EF 50mm f/1.0L")},
230 {21, 131,
N_(
"Sigma 17-35mm f2.8-4 EX Aspherical HSM")},
231 {21, 134,
N_(
"Canon EF 600mm f/4L IS")},
232 {21, 135,
N_(
"Canon EF 200mm f/1.8L")},
233 {21, 136,
N_(
"Canon EF 300mm f/2.8L")},
234 {21, 137,
N_(
"Canon EF 85mm f/1.2L")},
235 {21, 139,
N_(
"Canon EF 400mm f/2.8L")},
236 {21, 141,
N_(
"Canon EF 500mm f/4.5L")},
237 {21, 142,
N_(
"Canon EF 300mm f/2.8L IS")},
238 {21, 143,
N_(
"Canon EF 500mm f/4L IS")},
239 {21, 149,
N_(
"Canon EF 100mm f/2")},
240 {21, 150,
N_(
"Sigma 20mm EX f/1.8")},
241 {21, 151,
N_(
"Canon EF 200mm f/2.8L")},
242 {21, 152,
N_(
"Sigma 10-20mm F4-5.6 or 12-24mm f/4.5-5.6 or 14mm f/2.8")},
243 {21, 153,
N_(
"Canon EF 35-350mm f/3.5-5.6L")},
244 {21, 155,
N_(
"Canon EF 85mm f/1.8 USM")},
245 {21, 156,
N_(
"Canon EF 28-105mm f/3.5-4.5 USM")},
246 {21, 160,
N_(
"Canon EF 20-35mm f/3.5-4.5 USM")},
247 {21, 161,
N_(
"Canon EF 28-70mm f/2.8L or Sigma 24-70mm EX f/2.8")},
248 {21, 165,
N_(
"Canon EF 70-200mm f/2.8 L")},
249 {21, 166,
N_(
"Canon EF 70-200mm f/2.8 L + x1.4")},
250 {21, 167,
N_(
"Canon EF 70-200mm f/2.8 L + x2")},
251 {21, 168,
N_(
"Canon EF 28mm f/1.8 USM")},
252 {21, 169,
N_(
"Sigma 15-30mm f/3.5-4.5 EX DG Aspherical")},
253 {21, 170,
N_(
"Canon EF 200mm f/2.8L II")},
254 {21, 173,
N_(
"Canon EF 180mm Macro f/3.5L or Sigma 180mm EX HSM Macro f/3.5")},
255 {21, 174,
N_(
"Canon EF 135mm f/2L")},
256 {21, 176,
N_(
"Canon EF 24-85mm f/3.5-4.5 USM")},
257 {21, 177,
N_(
"Canon EF 300mm f/4L IS")},
258 {21, 178,
N_(
"Canon EF 28-135mm f/3.5-5.6 IS")},
259 {21, 180,
N_(
"Canon EF 35mm f/1.4L")},
260 {21, 181,
N_(
"Canon EF 100-400mm f/4.5-5.6L IS + x1.4")},
261 {21, 182,
N_(
"Canon EF 100-400mm f/4.5-5.6L IS + x2")},
262 {21, 183,
N_(
"Canon EF 100-400mm f/4.5-5.6L IS")},
263 {21, 184,
N_(
"Canon EF 400mm f/2.8L + x2")},
264 {21, 186,
N_(
"Canon EF 70-200mm f/4L")},
265 {21, 190,
N_(
"Canon EF 100mm f/2.8 Macro")},
266 {21, 191,
N_(
"Canon EF 400mm f/4 DO IS")},
267 {21, 197,
N_(
"Canon EF 75-300mm f/4-5.6 IS")},
268 {21, 198,
N_(
"Canon EF 50mm f/1.4")},
269 {21, 202,
N_(
"Canon EF 28-80 f/3.5-5.6 USM IV")},
270 {21, 211,
N_(
"Canon EF 28-200mm f/3.5-5.6")},
271 {21, 213,
N_(
"Canon EF 90-300mm f/4.5-5.6")},
272 {21, 214,
N_(
"Canon EF-S 18-55mm f/3.5-4.5 USM")},
273 {21, 224,
N_(
"Canon EF 70-200mm f/2.8L IS USM")},
274 {21, 225,
N_(
"Canon EF 70-200mm f/2.8L IS USM + x1.4")},
275 {21, 226,
N_(
"Canon EF 70-200mm f/2.8L IS USM + x2")},
276 {21, 229,
N_(
"Canon EF 16-35mm f/2.8L")},
277 {21, 230,
N_(
"Canon EF 24-70mm f/2.8L")},
278 {21, 231,
N_(
"Canon EF 17-40mm f/4L")},
279 {21, 232,
N_(
"Canon EF 70-300mm f/4.5-5.6 DO IS USM")},
280 {21, 234,
N_(
"Canon EF-S 17-85mm f4-5.6 IS USM")},
281 {21, 235,
N_(
"Canon EF-S10-22mm F3.5-4.5 USM")},
282 {21, 236,
N_(
"Canon EF-S60mm F2.8 Macro USM")},
283 {21, 237,
N_(
"Canon EF 24-105mm f/4L IS")},
284 {21, 238,
N_(
"Canon EF 70-300mm F4-5.6 IS USM")},
285 {21, 241,
N_(
"Canon EF 50mm F1.2L USM")},
286 {21, 242,
N_(
"Canon EF 70-200mm f/4L IS USM")},
287 {21, 251,
N_(
"Canon EF 70-200mm f/2.8L IS II USM")},
288 {28, 0,
N_(
"Manual")},
290 {28, 2,
N_(
"A-TTL")},
291 {28, 3,
N_(
"E-TTL")},
292 {28, 4,
N_(
"FP sync enabled")},
293 {28, 7,
N_(
"2nd-curtain sync used")},
294 {28, 11,
N_(
"FP sync used")},
295 {28, 13,
N_(
"Internal")},
296 {28, 14,
N_(
"External")},
297 {31, 0,
N_(
"Single")},
298 {31, 1,
N_(
"Continuous")},
299 {32, 0,
N_(
"Normal AE")},
300 {32, 1,
N_(
"Exposure compensation")},
301 {32, 2,
N_(
"AE lock")},
302 {32, 3,
N_(
"AE lock + exposure compensation")},
303 {32, 4,
N_(
"No AE")},
306 {33, 2,
N_(
"On, shot only")},
308 {39, 1,
N_(
"Vivid")},
309 {39, 2,
N_(
"Neutral")},
310 {39, 3,
N_(
"Smooth")},
311 {39, 4,
N_(
"Sepia")},
312 {39, 5,
N_(
"Black & white")},
313 {39, 6,
N_(
"Custom")},
314 {39, 100,
N_(
"My color data")},
316 {40, 0x0500,
N_(
"Full")},
317 {40, 0x0502,
N_(
"2/3")},
318 {40, 0x0504,
N_(
"1/3")},
323#ifndef NO_VERBOSE_TAG_DATA
330#ifndef NO_VERBOSE_TAG_DATA
332 { 6, 1,
N_(
"Sunny")},
333 { 6, 2,
N_(
"Cloudy")},
334 { 6, 3,
N_(
"Tungsten")},
335 { 6, 4,
N_(
"Fluorescent")},
336 { 6, 5,
N_(
"Flash")},
337 { 6, 6,
N_(
"Custom")},
338 { 6, 7,
N_(
"Black & white")},
339 { 6, 8,
N_(
"Shade")},
340 { 6, 9,
N_(
"Manual temperature (Kelvin)")},
341 { 6, 10,
N_(
"PC set 1")},
342 { 6, 11,
N_(
"PC set 2")},
343 { 6, 12,
N_(
"PC set 3")},
344 { 6, 14,
N_(
"Daylight fluorescent")},
345 { 6, 15,
N_(
"Custom 1")},
346 { 6, 16,
N_(
"Custom 2")},
347 { 6, 17,
N_(
"Underwater")},
349 { 7, 1,
N_(
"Night scene")},
352 { 13, 0x3000,
N_(
"None (MF)")},
353 { 13, 0x3001,
N_(
"Right")},
354 { 13, 0x3002,
N_(
"Center")},
355 { 13, 0x3003,
N_(
"Center-right")},
356 { 13, 0x3004,
N_(
"Left")},
357 { 13, 0x3005,
N_(
"Left-right")},
358 { 13, 0x3006,
N_(
"Left-center")},
359 { 13, 0x3007,
N_(
"All")},
361 { 15, 1,
N_(
"On (shot 1)")},
362 { 15, 2,
N_(
"On (shot 2)")},
363 { 15, 3,
N_(
"On (shot 3)")},
364 { 15, 0xffff,
N_(
"On")},
365 { 25, 248,
N_(
"EOS high-end")},
366 { 25, 250,
N_(
"Compact")},
367 { 25, 252,
N_(
"EOS mid-range")},
368 { 26, 0,
N_(
"None")},
369 { 26, 1,
N_(
"Rotate 90 CW")},
370 { 26, 2,
N_(
"Rotate 180")},
371 { 26, 3,
N_(
"Rotate 270 CW")},
372 { 26, 0xffff,
N_(
"Rotated by software")},
376 { 32, 0x0014,
N_(
"1/3")},
377 { 32, 0x008c,
N_(
"2/3")},
378 { 32, 0x07d0,
N_(
"Full")},
383#ifndef NO_VERBOSE_TAG_DATA
384 {0, 0,
N_(
"Left to right")},
385 {0, 1,
N_(
"Right to left")},
386 {0, 2,
N_(
"Bottom to top")},
387 {0, 3,
N_(
"Top to bottom")},
388 {0, 4,
N_(
"2x2 matrix (clockwise)")},
393#ifndef NO_VERBOSE_TAG_DATA
394 {0, 0,
N_(
"Standard")},
395 {0, 1,
N_(
"Manual")},
396 {0, 2,
N_(
"Custom")},
398 {2, 1,
N_(
"Lowest")},
400 {2, 3,
N_(
"Standard")},
402 {2, 5,
N_(
"Highest")},
404 {7, 1,
N_(
"Daylight")},
405 {7, 2,
N_(
"Cloudy")},
406 {7, 3,
N_(
"Tungsten")},
407 {7, 4,
N_(
"Fluorescent")},
409 {7, 6,
N_(
"Custom")},
410 {7, 7,
N_(
"Black & white")},
412 {7, 9,
N_(
"Manual temperature (Kelvin)")},
413 {7, 10,
N_(
"PC set 1")},
414 {7, 11,
N_(
"PC set 2")},
415 {7, 12,
N_(
"PC set 3")},
416 {7, 14,
N_(
"Daylight fluorescent")},
417 {7, 15,
N_(
"Custom 1")},
418 {7, 16,
N_(
"Custom 2")},
419 {7, 17,
N_(
"Underwater")},
420 {9, 0x00,
N_(
"None")},
421 {9, 0x01,
N_(
"Standard")},
422 {9, 0x02,
N_(
"Set 1")},
423 {9, 0x03,
N_(
"Set 2")},
424 {9, 0x04,
N_(
"Set 3")},
425 {9, 0x21,
N_(
"User def. 1")},
426 {9, 0x22,
N_(
"User def. 2")},
427 {9, 0x23,
N_(
"User def. 3")},
428 {9, 0x41,
N_(
"External 1")},
429 {9, 0x42,
N_(
"External 2")},
430 {9, 0x43,
N_(
"External 3")},
431 {9, 0x81,
N_(
"Standard")},
432 {9, 0x82,
N_(
"Portrait")},
433 {9, 0x83,
N_(
"Landscape")},
434 {9, 0x84,
N_(
"Neutral")},
435 {9, 0x85,
N_(
"Faithful")},
436 {9, 0x86,
N_(
"Monochrome")},
443 unsigned int t,
ExifShort vs,
char *val,
unsigned int maxlen)
448 for (j = 0;
table[j].name && ((
table[j].subtag < t) ||
459 snprintf (val, maxlen,
"0x%04x", vs);
465 unsigned int t,
ExifShort vs,
char *val,
unsigned int maxlen)
470 for (j = 0;
table[j].name && (
table[j].subtag <= t); j++) {
476 unsigned int i, bit, lastbit = 0;
482 for (i = j;
table[i].name && (
table[i].subtag == t); i++) {
483 bit =
table[i].value;
484 if ((vs >> bit) & 1) {
489 for (i = j;
table[i].name && (
table[i].subtag == t); i++) {
490 bit =
table[i].value;
491 if ((vs >> bit) & 1) {
492 strncat(val,
_(
table[i].
name), maxlen - strlen (val));
494 strncat (val,
_(
", "), maxlen - strlen (val));
499 snprintf (val, maxlen,
"0x%04x", vs);
508 if (!entry)
return 0;
510 switch (entry->
tag) {
522 return MIN (entry->
size - 2, val) / 2;
535 return pow (2, x / 2.);
541 return 1.0 / pow (2, x);
547 return 3.125 * pow (2, x);
570 memset (val, 0, maxlen);
573 switch (entry->
tag) {
577 if (
size < 2)
return NULL;
579 if (t >= n)
return NULL;
583 if (
size < 2 + t*2 + 2)
return NULL;
588 strncpy(val,
_(
"Off"), maxlen);
591 snprintf (val, maxlen,
_(
"%i (ms)"), vs * 100);
594 if (((vs & 0xC000) == 0x4000) && (vs != 0x7FFF)) {
596 snprintf (val, maxlen,
"%i", vs & ~0x4000);
605 snprintf (val, maxlen,
"%u", vs);
615 snprintf (val, maxlen,
"%.2f", vs / 10.0);
619 snprintf (val, maxlen,
"%u", vs);
628 if (
size < t*2 + 2)
return NULL;
632 snprintf (val, maxlen,
"%u", vs);
636 snprintf (val, maxlen,
_(
"%.2f mm"), vs * 25.4 / 1000);
645 if (
size < 2)
return NULL;
647 if (t >= n)
return NULL;
649 if (
size < 2 + t*2 + 2)
return NULL;
653 snprintf (val, maxlen,
"%.3f", pow (2, vss / 32.0));
662 snprintf (val, maxlen,
_(
"%.2f EV"), vss / 32.0);
672 snprintf (val, maxlen,
_(
"1/%.0f"), 1.0 / d);
674 snprintf (val, maxlen,
"%.0f", d);
677 snprintf (val, maxlen,
"%u", vss);
680 snprintf (val, maxlen,
"%.2f", vss / 32.0);
684 snprintf (val, maxlen,
_(
"%u mm"), vss);
688 strncpy(val,
_(
"Off"), maxlen);
691 snprintf (val, maxlen,
_(
"%i (ms)"), vss * 100);
700 if (
size < t*2 + 2)
return NULL;
711 strncpy (val, (
char *)data,
MIN (entry->
size, maxlen));
717 strncpy (val, (
char *)data,
MIN (entry->
size, maxlen));
723 if (
size < 4)
return NULL;
725 snprintf (val, maxlen,
"%03lu-%04lu",
726 (
unsigned long) vl/10000,
727 (
unsigned long) vl%10000);
733 if (
size < 4)
return NULL;
735 snprintf (val, maxlen,
"%04X-%05d", (
int)vl>>16,(
int)vl&0xffff);
740 if (
size < 2)
return NULL;
742 if (t >= n)
return NULL;
744 if (
size < 2 + t*2 + 2)
return NULL;
746 snprintf (buf,
sizeof (buf),
"%u", vs);
747 strncat (val, buf, maxlen - strlen (val));
752 if (
size < 2)
return NULL;
754 if (t >= n)
return NULL;
756 if (
size < 2 + t*2 + 2)
return NULL;
765 size_t i, len = strlen(val);
770 snprintf (val+len, maxlen-len,
"%hu ", vs);
779 size_t i, len = strlen(val);
784 snprintf (val+len, maxlen-len,
"%hi ", vss);
792 size_t i, len = strlen(val);
797 snprintf (val+len, maxlen-len,
"%lu ", (
long unsigned) vl);
805 size_t i, len = strlen(val);
810 snprintf (val+len, maxlen-len,
"%li ", (
long int) vsl);
817 strncpy (val, (
char *)data,
MIN (entry->
size, maxlen));
820 snprintf (val, maxlen,
_(
"%i bytes unknown data"),
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.
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.
static const struct @0 table[]
static double apex_value_to_iso_speed(double x)
static double apex_value_to_aperture(double x)
#define CC(number, target, v, maxlen)
char * mnote_canon_entry_get_value(const MnoteCanonEntry *entry, unsigned int t, char *val, unsigned int maxlen)
static double apex_value_to_shutter_speed(double x)
static const struct canon_entry_table_t entries_settings_2[]
static const struct canon_entry_table_t entries_settings_1[]
static const struct canon_entry_table_t color_information[]
static void canon_search_table_value(const struct canon_entry_table_t table[], unsigned int t, ExifShort vs, char *val, unsigned int maxlen)
static const struct canon_entry_table_t entries_focal_length[]
unsigned int mnote_canon_entry_count_values(const MnoteCanonEntry *entry)
#define CF(format, target, v, maxlen)
static void canon_search_table_bitfield(const struct canon_entry_table_t table[], unsigned int t, ExifShort vs, char *val, unsigned int maxlen)
static const struct canon_entry_table_t entries_panorama[]
@ MNOTE_CANON_TAG_PANORAMA
@ MNOTE_CANON_TAG_SETTINGS_1
@ MNOTE_CANON_TAG_SETTINGS_2
@ MNOTE_CANON_TAG_IMAGE_NUMBER
@ MNOTE_CANON_TAG_COLOR_INFORMATION
@ MNOTE_CANON_TAG_IMAGE_TYPE
@ MNOTE_CANON_TAG_CUSTOM_FUNCS
@ MNOTE_CANON_TAG_FIRMWARE
@ MNOTE_CANON_TAG_SERIAL_NUMBER
@ MNOTE_CANON_TAG_FOCAL_LENGTH