Exiv2
tags_int.hpp
Go to the documentation of this file.
1 // ***************************************************************** -*- C++ -*-
2 /*
3  * Copyright (C) 2004-2018 Exiv2 authors
4  * This program is part of the Exiv2 distribution.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program 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
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19  */
28 #ifndef TAGS_INT_HPP_
29 #define TAGS_INT_HPP_
30 
31 // *****************************************************************************
32 // included header files
33 #include "types.hpp"
34 #include "tags.hpp"
35 #include "value.hpp"
36 
37 // + standard includes
38 #include <string>
39 #include <iostream>
40 #include <memory>
41 
42 // *****************************************************************************
43 // namespace extensions
44 
45 namespace Exiv2 {
46  class ExifData;
47 
48  namespace Internal {
49 
50 // *****************************************************************************
51 // class definitions
52 
54  enum IfdId {
55  ifdIdNotSet,
56  ifd0Id,
57  ifd1Id,
58  ifd2Id,
59  ifd3Id,
60  exifId,
61  gpsId,
62  iopId,
63  mpfId,
64  subImage1Id,
65  subImage2Id,
66  subImage3Id,
67  subImage4Id,
68  subImage5Id,
69  subImage6Id,
70  subImage7Id,
71  subImage8Id,
72  subImage9Id,
73  subThumb1Id,
74  panaRawId,
75  mnId,
76  canonId,
77  canonCsId,
78  canonSiId,
79  canonCfId,
80  canonPiId,
81  canonPaId,
82  canonTiId,
83  canonFiId,
84  canonPrId,
85  casioId,
86  casio2Id,
87  fujiId,
88  minoltaId,
89  minoltaCs5DId,
90  minoltaCs7DId,
91  minoltaCsOldId,
92  minoltaCsNewId,
93  nikon1Id,
94  nikon2Id,
95  nikon3Id,
96  nikonPvId,
97  nikonVrId,
98  nikonPcId,
99  nikonWtId,
100  nikonIiId,
101  nikonAfId,
102  nikonAf2Id,
103  nikonAFTId,
104  nikonFiId,
105  nikonMeId,
106  nikonFl1Id,
107  nikonFl2Id,
108  nikonFl3Id,
109  nikonSi1Id,
110  nikonSi2Id,
111  nikonSi3Id,
112  nikonSi4Id,
113  nikonSi5Id,
114  nikonSi6Id,
115  nikonLd1Id,
116  nikonLd2Id,
117  nikonLd3Id,
118  nikonCb1Id,
119  nikonCb2Id,
120  nikonCb2aId,
121  nikonCb2bId,
122  nikonCb3Id,
123  nikonCb4Id,
124  olympusId,
125  olympus2Id,
126  olympusCsId,
127  olympusEqId,
128  olympusRdId,
129  olympusRd2Id,
130  olympusIpId,
131  olympusFiId,
132  olympusFe1Id,
133  olympusFe2Id,
134  olympusFe3Id,
135  olympusFe4Id,
136  olympusFe5Id,
137  olympusFe6Id,
138  olympusFe7Id,
139  olympusFe8Id,
140  olympusFe9Id,
141  olympusRiId,
142  panasonicId,
143  pentaxId,
144  pentaxDngId,
145  samsung2Id,
146  samsungPvId,
147  samsungPwId,
148  sigmaId,
149  sony1Id,
150  sony2Id,
151  sonyMltId,
152  sony1CsId,
153  sony1Cs2Id,
154  sony2CsId,
155  sony2Cs2Id,
156  sony1MltCs7DId,
157  sony1MltCsOldId,
158  sony1MltCsNewId,
159  sony1MltCsA100Id,
160  lastId,
161  ignoreId = lastId
162  };
163 
168  enum SectionId { sectionIdNotSet,
169  imgStruct, recOffset, imgCharacter, otherTags, exifFormat,
170  exifVersion, imgConfig, userInfo, relatedFile, dateTime,
171  captureCond, gpsTags, iopTags, mpfTags, makerTags, dngTags, panaRaw,
172  tiffEp, tiffPm6, adobeOpi,
173  lastSectionId };
174 
176  struct SectionInfo {
178  const char* name_;
179  const char* desc_;
180  };
181 
186  struct TagDetails {
187  int64_t val_;
188  const char* label_;
189 
191  bool operator==(long key) const { return val_ == key; }
192  }; // struct TagDetails
193 
199  uint32_t mask_;
200  const char* label_;
201  }; // struct TagDetailsBitmask
202 
207  struct TagVocabulary {
208  const char* voc_;
209  const char* label_;
210 
218  bool operator==(const std::string& key) const;
219  }; // struct TagDetails
220 
225  template <int N, const TagDetails (&array)[N]>
226  std::ostream& printTag(std::ostream& os, const Value& value, const ExifData*)
227  {
228  const TagDetails* td = find(array, value.toLong());
229  if (td) {
230  os << exvGettext(td->label_);
231  }
232  else {
233  os << "(" << value << ")";
234  }
235  return os;
236  }
237 
239 #define EXV_PRINT_TAG(array) printTag<EXV_COUNTOF(array), array>
240 
245  template <int N, const TagDetailsBitmask (&array)[N]>
246  std::ostream& printTagBitmask(std::ostream& os, const Value& value, const ExifData*)
247  {
248  const uint32_t val = static_cast<uint32_t>(value.toLong());
249  if (val == 0 && N > 0) {
250  const TagDetailsBitmask* td = *(&array);
251  if (td->mask_ == 0) return os << exvGettext(td->label_);
252  }
253  bool sep = false;
254  for (int i = 0; i < N; ++i) {
255  // *& acrobatics is a workaround for a MSVC 7.1 bug
256  const TagDetailsBitmask* td = *(&array) + i;
257 
258  if (val & td->mask_) {
259  if (sep) {
260  os << ", " << exvGettext(td->label_);
261  }
262  else {
263  os << exvGettext(td->label_);
264  sep = true;
265  }
266  }
267  }
268  return os;
269  }
270 
272 #define EXV_PRINT_TAG_BITMASK(array) printTagBitmask<EXV_COUNTOF(array), array>
273 
278  template <int N, const TagVocabulary (&array)[N]>
279  std::ostream& printTagVocabulary(std::ostream& os, const Value& value, const ExifData*)
280  {
281  const TagVocabulary* td = find(array, value.toString());
282  if (td) {
283  os << exvGettext(td->label_);
284  }
285  else {
286  os << "(" << value << ")";
287  }
288  return os;
289  }
290 
292 #define EXV_PRINT_VOCABULARY(array) printTagVocabulary<EXV_COUNTOF(array), array>
293 
294 // *****************************************************************************
295 // free functions
296 
298  const TagInfo* ifdTagList();
300  const TagInfo* exifTagList();
302  const TagInfo* iopTagList();
304  const TagInfo* gpsTagList();
306  const TagInfo* mnTagList();
308  const TagInfo* mpfTagList();
309 
310  const GroupInfo* groupList();
311  const TagInfo* tagList(const std::string& groupName);
312 
316  const char* ifdName(IfdId ifdId);
318  const char* groupName(IfdId ifdId);
319 
321  bool isMakerIfd(IfdId ifdId);
323  bool isExifIfd(IfdId ifdId);
324 
326  void taglist(std::ostream& os, IfdId ifdId);
328  const TagInfo* tagList(IfdId ifdId);
330  const TagInfo* tagInfo(uint16_t tag, IfdId ifdId);
332  const TagInfo* tagInfo(const std::string& tagName, IfdId ifdId);
340  uint16_t tagNumber(const std::string& tagName, IfdId ifdId);
341 
343 
344  std::ostream& printValue(std::ostream& os, const Value& value, const ExifData*);
347  std::ostream& printLong(std::ostream& os, const Value& value, const ExifData*);
349  std::ostream& printFloat(std::ostream& os, const Value& value, const ExifData*);
351  std::ostream& printDegrees(std::ostream& os, const Value& value, const ExifData*);
353  std::ostream& printUcs2(std::ostream& os, const Value& value, const ExifData*);
355  std::ostream& printExifUnit(std::ostream& os, const Value& value, const ExifData*);
357  std::ostream& print0x0000(std::ostream& os, const Value& value, const ExifData*);
359  std::ostream& print0x0005(std::ostream& os, const Value& value, const ExifData*);
361  std::ostream& print0x0006(std::ostream& os, const Value& value, const ExifData*);
363  std::ostream& print0x0007(std::ostream& os, const Value& value, const ExifData*);
365  std::ostream& print0x0009(std::ostream& os, const Value& value, const ExifData*);
367  std::ostream& print0x000a(std::ostream& os, const Value& value, const ExifData*);
369  std::ostream& print0x000c(std::ostream& os, const Value& value, const ExifData*);
371  std::ostream& print0x0019(std::ostream& os, const Value& value, const ExifData*);
373  std::ostream& print0x001e(std::ostream& os, const Value& value, const ExifData*);
375  std::ostream& print0x0112(std::ostream& os, const Value& value, const ExifData*);
377  std::ostream& print0x0213(std::ostream& os, const Value& value, const ExifData*);
379  std::ostream& print0x8298(std::ostream& os, const Value& value, const ExifData*);
381  std::ostream& print0x829a(std::ostream& os, const Value& value, const ExifData*);
383  std::ostream& print0x829d(std::ostream& os, const Value& value, const ExifData*);
385  std::ostream& print0x8822(std::ostream& os, const Value& value, const ExifData*);
387  std::ostream& print0x8827(std::ostream& os, const Value& value, const ExifData*);
389  std::ostream& print0x9101(std::ostream& os, const Value& value, const ExifData*);
391  std::ostream& print0x9201(std::ostream& os, const Value& value, const ExifData*);
393  std::ostream& print0x9202(std::ostream& os, const Value& value, const ExifData*);
395  std::ostream& print0x9204(std::ostream& os, const Value& value, const ExifData*);
397  std::ostream& print0x9206(std::ostream& os, const Value& value, const ExifData*);
399  std::ostream& print0x9207(std::ostream& os, const Value& value, const ExifData*);
401  std::ostream& print0x9208(std::ostream& os, const Value& value, const ExifData*);
403  std::ostream& print0x920a(std::ostream& os, const Value& value, const ExifData*);
405  std::ostream& print0x9286(std::ostream& os, const Value& value, const ExifData*);
407  std::ostream& print0xa001(std::ostream& os, const Value& value, const ExifData*);
409  std::ostream& print0xa217(std::ostream& os, const Value& value, const ExifData*);
411  std::ostream& print0xa300(std::ostream& os, const Value& value, const ExifData*);
413  std::ostream& print0xa301(std::ostream& os, const Value& value, const ExifData*);
415  std::ostream& print0xa401(std::ostream& os, const Value& value, const ExifData*);
417  std::ostream& print0xa402(std::ostream& os, const Value& value, const ExifData*);
419  std::ostream& print0xa403(std::ostream& os, const Value& value, const ExifData*);
421  std::ostream& print0xa404(std::ostream& os, const Value& value, const ExifData*);
423  std::ostream& print0xa405(std::ostream& os, const Value& value, const ExifData*);
425  std::ostream& print0xa406(std::ostream& os, const Value& value, const ExifData*);
427  std::ostream& print0xa407(std::ostream& os, const Value& value, const ExifData*);
429  std::ostream& print0xa409(std::ostream& os, const Value& value, const ExifData*);
431  std::ostream& print0xa40c(std::ostream& os, const Value& value, const ExifData*);
433  std::ostream& printGPSDirRef(std::ostream& os, const Value& value, const ExifData*);
435  std::ostream& printNormalSoftHard(std::ostream& os, const Value& value, const ExifData*);
437  std::ostream& printExifVersion(std::ostream& os, const Value& value, const ExifData*);
439  std::ostream& printXmpVersion(std::ostream& os, const Value& value, const ExifData*);
441  std::ostream& printXmpDate(std::ostream& os, const Value& value, const ExifData*);
443 
445  float fnumber(float apertureValue);
446 
448  URational exposureTime(float shutterSpeedValue);
449 
450 }} // namespace Internal, Exiv2
451 
452 #endif // #ifndef TAGS_INT_HPP_
const char * desc_
Section description.
Definition: tags_int.hpp:179
const char * ifdName(IfdId ifdId)
Return the name of the IFD.
Definition: tags_int.cpp:2146
std::ostream & print0x0009(std::ostream &os, const Value &value, const ExifData *metadata)
Print GPS status.
Definition: tags_int.cpp:2346
uint16_t tagNumber(const std::string &tagName, IfdId ifdId)
Return the tag number for one combination of IFD id and tagName. If the tagName is not known...
Definition: tags_int.cpp:2183
Helper structure for lookup tables for translations of numeric tag values to human readable labels...
Definition: tags_int.hpp:186
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:434
const TagInfo * iopTagList()
Return read-only list of built-in IOP tags.
Definition: tags_int.cpp:2032
std::ostream & print0xa300(std::ostream &os, const Value &value, const ExifData *metadata)
Print file source.
Definition: tags_int.cpp:2676
uint32_t mask_
Bitmask value.
Definition: tags_int.hpp:199
const char * label_
Description of the tag value.
Definition: tags_int.hpp:200
std::ostream & printValue(std::ostream &os, const Value &value, const ExifData *)
Default print function, using the Value output operator.
Definition: tags_int.cpp:2160
std::ostream & printTagVocabulary(std::ostream &os, const Value &value, const ExifData *)
Generic pretty-print function to translate a controlled vocabulary value (string) to a description by...
Definition: tags_int.hpp:279
int64_t val_
Tag value.
Definition: tags_int.hpp:187
std::ostream & print0xa403(std::ostream &os, const Value &value, const ExifData *metadata)
Print white balance.
Definition: tags_int.cpp:2720
std::ostream & print0xa404(std::ostream &os, const Value &value, const ExifData *)
Print digital zoom ratio.
Definition: tags_int.cpp:2725
IfdId groupId(const std::string &groupName)
Return the group id for a group name.
Definition: tags_int.cpp:2138
std::ostream & print0xa406(std::ostream &os, const Value &value, const ExifData *metadata)
Print scene capture type.
Definition: tags_int.cpp:2764
std::ostream & print0x0007(std::ostream &os, const Value &value, const ExifData *)
Print GPS timestamp.
Definition: tags_int.cpp:2310
const char * label_
Translation of the tag value.
Definition: tags_int.hpp:188
std::ostream & print0x9101(std::ostream &os, const Value &value, const ExifData *)
Print components configuration specific to compressed data.
Definition: tags_int.cpp:2470
const TagInfo * tagInfo(uint16_t tag, IfdId ifdId)
Return the tag info for tag and ifdId.
Definition: tags_int.cpp:2113
const TagInfo * tagList(IfdId ifdId)
Return the tag list for ifdId.
Definition: tags_int.cpp:2106
std::ostream & print0x8827(std::ostream &os, const Value &value, const ExifData *)
Print ISO speed ratings.
Definition: tags_int.cpp:2465
std::ostream & print0xa402(std::ostream &os, const Value &value, const ExifData *metadata)
Print exposure mode.
Definition: tags_int.cpp:2709
std::ostream & printFloat(std::ostream &os, const Value &value, const ExifData *)
Print a Rational or URational value in floating point format.
Definition: tags_int.cpp:2201
The details of a section.
Definition: tags_int.hpp:176
std::ostream & printDegrees(std::ostream &os, const Value &value, const ExifData *)
Print a longitude or latitude value.
Definition: tags_int.cpp:2208
std::ostream & print0x0000(std::ostream &os, const Value &value, const ExifData *)
Print GPS version.
Definition: tags_int.cpp:2275
std::ostream & print0x9286(std::ostream &os, const Value &value, const ExifData *)
Print the user comment.
Definition: tags_int.cpp:2629
const char * name_
Section name (one word)
Definition: tags_int.hpp:178
Type definitions for Exiv2 and related functionality.
std::ostream & print0x9208(std::ostream &os, const Value &value, const ExifData *metadata)
Print light source.
Definition: tags_int.cpp:2605
std::ostream & print0x9206(std::ostream &os, const Value &value, const ExifData *)
Print the subject distance.
Definition: tags_int.cpp:2537
std::ostream & print0x8298(std::ostream &os, const Value &value, const ExifData *)
Print the copyright.
Definition: tags_int.cpp:2386
std::ostream & print0xa401(std::ostream &os, const Value &value, const ExifData *metadata)
Print custom rendered.
Definition: tags_int.cpp:2697
std::ostream & printTag(std::ostream &os, const Value &value, const ExifData *)
Generic pretty-print function to translate a long value to a description by looking up a reference ta...
Definition: tags_int.hpp:226
URational exposureTime(float shutterSpeedValue)
Calculate the exposure time from an APEX shutter speed value.
Definition: tags_int.cpp:2170
const T * find(T(&src)[N], const K &key)
Find an element that matches key in the array src.
Definition: types.hpp:508
std::ostream & print0xa301(std::ostream &os, const Value &value, const ExifData *metadata)
Print scene type.
Definition: tags_int.cpp:2686
bool operator==(const std::string &key) const
Comparison operator for use with the find template.
Definition: tags.cpp:98
std::ostream & print0x001e(std::ostream &os, const Value &value, const ExifData *metadata)
Print GPS differential correction.
Definition: tags_int.cpp:2366
std::ostream & print0x9207(std::ostream &os, const Value &value, const ExifData *metadata)
Print metering mode.
Definition: tags_int.cpp:2575
std::ostream & print0xa217(std::ostream &os, const Value &value, const ExifData *metadata)
Print sensing method.
Definition: tags_int.cpp:2664
std::ostream & printTagBitmask(std::ostream &os, const Value &value, const ExifData *)
Generic print function to translate a long value to a description by looking up bitmasks in a referen...
Definition: tags_int.hpp:246
Exif tag and type information.
EXIV2API const char * exvGettext(const char *str)
Translate a string using the gettext framework. This wrapper hides all the implementation details fro...
Definition: types.cpp:576
Helper structure for lookup tables for translations of bitmask values to human readable labels...
Definition: tags_int.hpp:198
std::ostream & printUcs2(std::ostream &os, const Value &value, const ExifData *)
Print function converting from UCS-2LE to UTF-8.
Definition: tags_int.cpp:2244
std::ostream & print0x0005(std::ostream &os, const Value &value, const ExifData *metadata)
Print GPS altitude ref.
Definition: tags_int.cpp:2290
const TagInfo * mnTagList()
Return read-only list of built-in Exiv2 Makernote info tags.
Definition: tags_int.cpp:2051
bool operator==(long key) const
Comparison operator for use with the find template.
Definition: tags_int.hpp:191
std::ostream & print0x9202(std::ostream &os, const Value &value, const ExifData *)
Print f-number converted from APEX aperture value.
Definition: tags_int.cpp:2501
std::ostream & print0x0112(std::ostream &os, const Value &value, const ExifData *metadata)
Print orientation.
Definition: tags_int.cpp:2371
std::ostream & printExifUnit(std::ostream &os, const Value &value, const ExifData *metadata)
Print function for Exif units.
Definition: tags_int.cpp:2270
std::ostream & print0xa409(std::ostream &os, const Value &value, const ExifData *metadata)
Print saturation.
Definition: tags_int.cpp:2790
std::ostream & print0x0019(std::ostream &os, const Value &value, const ExifData *metadata)
Print GPS destination distance ref.
Definition: tags_int.cpp:2361
const TagInfo * ifdTagList()
Return read-only list of built-in IFD0/1 tags.
Definition: tags_int.cpp:1426
std::ostream & print0x0213(std::ostream &os, const Value &value, const ExifData *metadata)
Print YCbCrPositioning.
Definition: tags_int.cpp:2381
std::ostream & print0x829d(std::ostream &os, const Value &value, const ExifData *)
Print the f-number.
Definition: tags_int.cpp:2429
std::pair< uint32_t, uint32_t > URational
8 byte unsigned rational type.
Definition: types.hpp:108
const char * voc_
Vocabulary string.
Definition: tags_int.hpp:208
const char * groupName(IfdId ifdId)
Return the group name for a group id.
Definition: tags_int.cpp:2153
std::ostream & print0x829a(std::ostream &os, const Value &value, const ExifData *)
Print the exposure time.
Definition: tags_int.cpp:2406
SectionId
Section identifiers to logically group tags. A section consists of nothing more than a name...
Definition: tags_int.hpp:168
const TagInfo * mpfTagList()
Return read-only list of built-in mfp Tags http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/MPF...
Definition: tags_int.cpp:1999
std::ostream & printLong(std::ostream &os, const Value &value, const ExifData *)
Print the value converted to a long.
Definition: tags_int.cpp:2194
IPTC string type.
Definition: types.hpp:147
std::ostream & print0x0006(std::ostream &os, const Value &value, const ExifData *)
Print GPS altitude.
Definition: tags_int.cpp:2295
Common interface for all types of values used with metadata.
Definition: value.hpp:60
std::ostream & printGPSDirRef(std::ostream &os, const Value &value, const ExifData *metadata)
Print GPS direction ref.
Definition: tags_int.cpp:2815
std::ostream & print0xa407(std::ostream &os, const Value &value, const ExifData *metadata)
Print gain control.
Definition: tags_int.cpp:2778
Helper structure for lookup tables for translations of controlled vocabulary strings to their descrip...
Definition: tags_int.hpp:207
std::ostream & print0xa001(std::ostream &os, const Value &value, const ExifData *metadata)
Print color space.
Definition: tags_int.cpp:2648
const TagInfo * exifTagList()
Return read-only list of built-in Exif IFD tags.
Definition: tags_int.cpp:1755
std::ostream & print0x8822(std::ostream &os, const Value &value, const ExifData *metadata)
Print exposure program.
Definition: tags_int.cpp:2460
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
float fnumber(float apertureValue)
Calculate F number from an APEX aperture value.
Definition: tags_int.cpp:2165
std::ostream & print0x000c(std::ostream &os, const Value &value, const ExifData *metadata)
Print GPS speed ref.
Definition: tags_int.cpp:2356
std::ostream & print0x000a(std::ostream &os, const Value &value, const ExifData *metadata)
Print GPS measurement mode.
Definition: tags_int.cpp:2351
std::ostream & print0x9204(std::ostream &os, const Value &value, const ExifData *)
Print the exposure bias value.
Definition: tags_int.cpp:2516
bool isMakerIfd(IfdId ifdId)
Return true if ifdId is a makernote IFD id. (Note: returns false for makerIfd)
Definition: tags_int.cpp:2058
std::ostream & printXmpVersion(std::ostream &os, const Value &value, const ExifData *)
Print any version encoded in the ASCII string majormajorminorminor.
Definition: tags_int.cpp:2847
SectionId sectionId_
Section id.
Definition: tags_int.hpp:177
void taglist(std::ostream &os, IfdId ifdId)
Print the list of tags for ifdId to the output stream os.
Definition: tags_int.cpp:2096
std::ostream & printNormalSoftHard(std::ostream &os, const Value &value, const ExifData *metadata)
Print contrast, sharpness (normal, soft, hard)
Definition: tags_int.cpp:2827
std::string toString() const
Return the value as a string. Implemented in terms of write(std::ostream& os) const of the concrete c...
Definition: value.cpp:175
const char * label_
Description of the vocabulary string.
Definition: tags_int.hpp:209
virtual long toLong(long n=0) const =0
Convert the n-th component of the value to a long. The behaviour of this method may be undefined if t...
std::ostream & printExifVersion(std::ostream &os, const Value &value, const ExifData *)
Print any version packed in 4 Bytes format : major major minor minor.
Definition: tags_int.cpp:2832
std::ostream & print0x920a(std::ostream &os, const Value &value, const ExifData *)
Print the actual focal length of the lens.
Definition: tags_int.cpp:2610
const TagInfo * gpsTagList()
Return read-only list of built-in GPS tags.
Definition: tags_int.cpp:1929
IfdId
Type to specify the IFD to which a metadata belongs.
Definition: tags_int.hpp:54
std::ostream & printXmpDate(std::ostream &os, const Value &value, const ExifData *)
Print a date following the format YYYY-MM-DDTHH:MM:SSZ.
Definition: tags_int.cpp:2856
std::ostream & print0xa40c(std::ostream &os, const Value &value, const ExifData *metadata)
Print subject distance range.
Definition: tags_int.cpp:2804
bool isExifIfd(IfdId ifdId)
Return true if ifdId is an Exif IFD id.
Definition: tags_int.cpp:2068
std::ostream & print0x9201(std::ostream &os, const Value &value, const ExifData *)
Print exposure time converted from APEX shutter speed value.
Definition: tags_int.cpp:2488
Value interface and concrete subclasses.
std::ostream & print0xa405(std::ostream &os, const Value &value, const ExifData *)
Print 35mm equivalent focal length.
Definition: tags_int.cpp:2743