Exiv2
pentaxmn_int.hpp
1 // ***************************************************************** -*- C++ -*-
2 /*
3  * Copyright (C) 2004-2021 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  */
20 #ifndef PENTAXMN_INT_HPP_
21 #define PENTAXMN_INT_HPP_
22 
23 // *****************************************************************************
24 // included header files
25 #include "tags.hpp"
26 #include "tags_int.hpp"
27 #include "types.hpp"
28 
29 // + standard includes
30 #include <iostream>
31 #include <iomanip>
32 
33 // *****************************************************************************
34 // namespace extensions
35 namespace Exiv2 {
36  namespace Internal {
37 
38 // *****************************************************************************
39 // class definitions
40 
43  public:
45  static const TagInfo* tagList();
46 
48  static std::ostream& printVersion(std::ostream& os, const Value& value, const ExifData*);
50  static std::ostream& printResolution(std::ostream& os, const Value& value, const ExifData*);
52  static std::ostream& printDate(std::ostream& os, const Value& value, const ExifData*);
54  static std::ostream& printTime(std::ostream& os, const Value& value, const ExifData*);
56  static std::ostream& printExposure(std::ostream& os, const Value& value, const ExifData*);
58  static std::ostream& printFValue(std::ostream& os, const Value& value, const ExifData*);
60  static std::ostream& printFocalLength(std::ostream& os, const Value& value, const ExifData*);
62  static std::ostream& printCompensation(std::ostream& os, const Value& value, const ExifData*);
64  static std::ostream& printTemperature(std::ostream& os, const Value& value, const ExifData*);
66  static std::ostream& printFlashCompensation(std::ostream& os, const Value& value, const ExifData*);
68  static std::ostream& printBracketing(std::ostream& os, const Value& value, const ExifData*);
70  static std::ostream& printShutterCount(std::ostream& os, const Value& value, const ExifData*);
71 
72  private:
74  static const TagInfo tagInfo_[];
75  }; // class PentaxMakerNote
76 
81  template <int N, const TagDetails (&array)[N], int count, int ignoredcount, int ignoredcountmax>
82  std::ostream& printCombiTag(std::ostream& os, const Value& value, const ExifData* metadata)
83  {
84  std::ios::fmtflags f( os.flags() );
85  if ((value.count() != count && (value.count() < (count + ignoredcount) || value.count() > (count + ignoredcountmax))) || count > 4) {
86  return printValue(os, value, metadata);
87  }
88  unsigned long l = 0;
89  for (int c = 0; c < count; ++c) {
90  if (value.toLong(c) < 0 || value.toLong(c) > 255) {
91  return printValue(os, value, metadata);
92  }
93  l += (value.toLong(c) << ((count - c - 1) * 8));
94  }
95  const TagDetails* td = find(array, l);
96  if (td) {
97  os << exvGettext(td->label_);
98  }
99  else {
100  os << exvGettext("Unknown") << " (0x"
101  << std::setw(2 * count) << std::setfill('0')
102  << std::hex << l << std::dec << ")";
103  }
104 
105  os.flags(f);
106  return os;
107  }
108 
110 #define EXV_PRINT_COMBITAG(array, count, ignoredcount) printCombiTag<EXV_COUNTOF(array), array, count, ignoredcount, ignoredcount>
111 #define EXV_PRINT_COMBITAG_MULTI(array, count, ignoredcount, ignoredcountmax) printCombiTag<EXV_COUNTOF(array), array, count, ignoredcount, ignoredcountmax>
113 
114  } // namespace Internal
115 } // namespace Exiv2
116 
117 
118 #endif // #ifndef PENTAXMN_INT_HPP_
Exiv2::Internal::pentaxFlash
const TagDetails pentaxFlash[]
Flash, tag 0x000c.
Exiv2::Internal::TagDetails
Helper structure for lookup tables for translations of numeric tag values to human readable labels.
Definition: tags_int.hpp:225
Exiv2::Internal::PentaxMakerNote::tagList
static const TagInfo * tagList()
Return read-only list of built-in Pentaxfilm tags.
Definition: pentaxmn_int.cpp:1703
Exiv2::Internal::PentaxMakerNote::printBracketing
static std::ostream & printBracketing(std::ostream &os, const Value &value, const ExifData *)
Print Pentax bracketing.
Definition: pentaxmn_int.cpp:1110
Exiv2::Internal::pentaxFocus
const TagDetails pentaxFocus[]
Focus, tag 0x000d.
Exiv2::Internal::pentaxDynamicRangeExpansion
const TagDetails pentaxDynamicRangeExpansion[]
DynamicRangeExpansion, tag 0x0069.
exif.hpp
Encoding and decoding of Exif data.
Exiv2::Value::size
virtual long size() const =0
Return the size of the value in bytes.
Exiv2::ExifData::findKey
iterator findKey(const ExifKey &key)
Find the first Exifdatum with the given key, return an iterator to it.
Definition: exif.cpp:605
Exiv2::Value
Common interface for all types of values used with metadata.
Definition: value.hpp:51
Exiv2::Internal::printLensType
std::ostream & printLensType(std::ostream &os, const Value &value, const ExifData *metadata)
A lens id and a pretty-print function for special treatment of the id.
Definition: pentaxmn_int.cpp:1407
Exiv2::ExifData::const_iterator
ExifMetadata::const_iterator const_iterator
ExifMetadata const iterator type.
Definition: exif.hpp:439
Exiv2::undefined
@ undefined
Exif UNDEFINED type, an 8-bit byte that may contain anything.
Definition: types.hpp:126
Exiv2::Value::typeId
TypeId typeId() const
Return the type identifier (Exif data format type).
Definition: value.hpp:104
Exiv2::Internal::PentaxMakerNote::printTemperature
static std::ostream & printTemperature(std::ostream &os, const Value &value, const ExifData *)
Print Pentax temperature.
Definition: pentaxmn_int.cpp:1094
Exiv2::Internal::pentaxContrast
const TagDetails pentaxContrast[]
Contrast, tag 0x0020.
Exiv2::exvGettext
const EXIV2API char * exvGettext(const char *str)
Translate a string using the gettext framework. This wrapper hides all the implementation details fro...
Definition: types.cpp:571
Exiv2::focalLength
EXIV2API ExifData::const_iterator focalLength(const ExifData &ed)
Return the focal length setting.
Definition: easyaccess.cpp:571
Exiv2::asciiString
@ asciiString
Exif ASCII type, 8-bit byte.
Definition: types.hpp:121
Exiv2::Internal::pentaxSize
const TagDetails pentaxSize[]
Size, tag 0x0009.
Exiv2::Internal::pentaxWhiteBalanceMode
const TagDetails pentaxWhiteBalanceMode[]
WhiteBalance, tag 0x001a.
Exiv2::Internal::pentaxHighISONoiseReduction
const TagDetails pentaxHighISONoiseReduction[]
HighISONoiseReduction, tag 0x0071.
Exiv2::Internal::pentaxDriveMode
const TagDetails pentaxDriveMode[]
DriveMode, combi-tag 0x0034 (4 bytes)
Exiv2::Internal::pentaxSaturation
const TagDetails pentaxSaturation[]
Saturation, tag 0x001f.
Exiv2::Value::count
virtual long count() const =0
Return the number of components of the value.
Exiv2::ExifData::end
iterator end()
End of the metadata.
Definition: exif.hpp:492
Exiv2::Internal::pentaxLensType
const TagDetails pentaxLensType[]
LensType, combi-tag 0x003f (2 unsigned long)
Exiv2::unsignedLong
@ unsignedLong
Exif LONG type, 32-bit (4-byte) unsigned integer.
Definition: types.hpp:123
Exiv2::Internal::PentaxMakerNote::printFlashCompensation
static std::ostream & printFlashCompensation(std::ostream &os, const Value &value, const ExifData *)
Print Pentax flash compensation.
Definition: pentaxmn_int.cpp:1100
Exiv2::Internal::LensInfoNotFound
Definition: pentaxmn_int.cpp:1217
Exiv2::Internal::pentaxImageProcessing
const TagDetails pentaxImageProcessing[]
ImageProcessing, combi-tag 0x0032 (4 bytes)
Exiv2::Internal::pentaxYesNo
const TagDetails pentaxYesNo[]
Generic for Yes/No switches.
Exiv2::Internal::pentaxAFPoint
const TagDetails pentaxAFPoint[]
AFPoint, tag 0x000e.
Exiv2::Internal::lensIdFct
const LensIdFct lensIdFct[]
List of lens ids which require special treatment with the medicine.
Definition: canonmn_int.cpp:2092
Exiv2::PrintFct
std::ostream &(* PrintFct)(std::ostream &, const Value &, const ExifData *pExifData)
Type for a function pointer for functions interpreting the tag value.
Definition: tags.hpp:49
Exiv2::Internal::pentaxCities
const TagDetails pentaxCities[]
City names, tags 0x0023 and 0x0024.
Exiv2::Internal::printCombiTag
std::ostream & printCombiTag(std::ostream &os, const Value &value, const ExifData *metadata)
Print function to translate Pentax "combi-values" to a description by looking up a reference table.
Definition: pentaxmn_int.hpp:82
Exiv2::Internal::PentaxMakerNote::printResolution
static std::ostream & printResolution(std::ostream &os, const Value &value, const ExifData *)
Print Pentax resolution.
Definition: pentaxmn_int.cpp:1025
Exiv2::Internal::pentaxModel
const TagDetails pentaxModel[]
CameraModel, tag 0x0005.
Exiv2::Internal::pentaxQuality
const TagDetails pentaxQuality[]
Quality, tag 0x0008.
Exiv2::Internal::pentaxAFPointFocus
const TagDetails pentaxAFPointFocus[]
AFPointInFocus, tag 0x000f.
Exiv2::Internal::LensIdFct::id_
long id_
Lens id.
Definition: canonmn_int.cpp:2085
Exiv2::Internal::LensIdFct::fct_
PrintFct fct_
Pretty-print function Comparison operator for find template.
Definition: canonmn_int.cpp:2086
Exiv2::unsignedByte
@ unsignedByte
Exif BYTE type, 8-bit unsigned integer.
Definition: types.hpp:120
Exiv2::Internal::PentaxMakerNote::printDate
static std::ostream & printDate(std::ostream &os, const Value &value, const ExifData *)
Print Pentax date.
Definition: pentaxmn_int.cpp:1036
Exiv2::Internal::pentaxImageTone
const TagDetails pentaxImageTone[]
ImageTone, tag 0x004f.
Exiv2::Internal::resolveLens0x8ff
std::ostream & resolveLens0x8ff(std::ostream &os, const Value &value, const ExifData *metadata)
resolveLens0x8ff print lens in human format
Definition: pentaxmn_int.cpp:1318
Exiv2::Internal::printValue
std::ostream & printValue(std::ostream &os, const Value &value, const ExifData *)
Default print function, using the Value output operator.
Definition: tags_int.cpp:2547
Exiv2::signedByte
@ signedByte
Exif SBYTE type, an 8-bit signed (twos-complement) integer.
Definition: types.hpp:125
Exiv2::ExifKey
Concrete keys for Exif metadata and access to Exif tag reference data.
Definition: tags.hpp:140
Exiv2::Value::toString
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:168
Exiv2::Internal::pentaxWhiteBalance
const TagDetails pentaxWhiteBalance[]
WhiteBalance, tag 0x0019.
Exiv2::Internal::PentaxMakerNote
MakerNote for Pentaxfilm cameras.
Definition: pentaxmn_int.hpp:42
Exiv2::Internal::TagDetails::label_
const char * label_
Translation of the tag value.
Definition: tags_int.hpp:227
Exiv2::Internal::pentaxPictureMode
const TagDetails pentaxPictureMode[]
PictureMode, combi-tag 0x0033 (3 bytes)
Exiv2::find
const T * find(T(&src)[N], const K &key)
Find an element that matches key in the array src.
Definition: types.hpp:497
Exiv2::Internal::LensIdFct
A lens id and a pretty-print function for special treatment of the id.
Definition: canonmn_int.cpp:2084
Exiv2::Value::toLong
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...
Exiv2::unsignedShort
@ unsignedShort
Exif SHORT type, 16-bit (2-byte) unsigned integer.
Definition: types.hpp:122
Exiv2::Internal::resolveLens0x32c
std::ostream & resolveLens0x32c(std::ostream &os, const Value &value, const ExifData *metadata)
resolveLens0x32c print lens in human format
Definition: pentaxmn_int.cpp:1236
Exiv2::Internal::pentaxLocation
const TagDetails pentaxLocation[]
Location, tag 0x0022.
Exiv2::Internal::pentaxISO
const TagDetails pentaxISO[]
ISO, tag 0x0014.
Exiv2::Internal::pentaxMeteringMode
const TagDetails pentaxMeteringMode[]
MeteringMode, tag 0x0017.
Exiv2
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
Exiv2::Internal::PentaxMakerNote::printFocalLength
static std::ostream & printFocalLength(std::ostream &os, const Value &value, const ExifData *)
Print Pentax focal length.
Definition: pentaxmn_int.cpp:1074
Exiv2::Internal::resolveLensType
std::ostream & resolveLensType(std::ostream &os, const Value &value, const ExifData *metadata)
resolveLensType print lens in human format
Definition: pentaxmn_int.cpp:1375
Exiv2::Internal::PentaxMakerNote::printFValue
static std::ostream & printFValue(std::ostream &os, const Value &value, const ExifData *)
Print Pentax F value.
Definition: pentaxmn_int.cpp:1065
Exiv2::signedLong
@ signedLong
Exif SLONG type, a 32-bit (4-byte) signed (twos-complement) integer.
Definition: types.hpp:128
Exiv2::Internal::pentaxSharpness
const TagDetails pentaxSharpness[]
Sharpness, tag 0x0021.
Exiv2::TagInfo
Tag information.
Definition: tags.hpp:74
Exiv2::Internal::PentaxMakerNote::printTime
static std::ostream & printTime(std::ostream &os, const Value &value, const ExifData *)
Print Pentax time.
Definition: pentaxmn_int.cpp:1047
Exiv2::Internal::PentaxMakerNote::printVersion
static std::ostream & printVersion(std::ostream &os, const Value &value, const ExifData *)
Print Pentax version.
Definition: pentaxmn_int.cpp:1014
Exiv2::time
@ time
IPTC time type.
Definition: types.hpp:138
Exiv2::date
@ date
IPTC date type.
Definition: types.hpp:137
Exiv2::Internal::readExiv2Config
std::string readExiv2Config(const std::string &section, const std::string &value, const std::string &def)
Read value from Exiv2 configuration file.
Definition: makernote_int.cpp:113
Exiv2::Internal::pentaxColorSpace
const TagDetails pentaxColorSpace[]
ColorSpace, tag 0x0037.
Exiv2::Internal::resolveLens0x3ff
std::ostream & resolveLens0x3ff(std::ostream &os, const Value &value, const ExifData *metadata)
resolveLens0x3ff print lens in human format
Definition: pentaxmn_int.cpp:1263
Exiv2::model
EXIV2API ExifData::const_iterator model(const ExifData &ed)
Return the camera model.
Definition: easyaccess.cpp:445
Exiv2::Internal::resolveLens0x319
std::ostream & resolveLens0x319(std::ostream &os, const Value &value, const ExifData *metadata)
resolveLens0x319 print lens in human format
Definition: pentaxmn_int.cpp:1343
Exiv2::Internal::PentaxMakerNote::printCompensation
static std::ostream & printCompensation(std::ostream &os, const Value &value, const ExifData *)
Print Pentax compensation.
Definition: pentaxmn_int.cpp:1084
Exiv2::Internal::pentaxShootingMode
const TagDetails pentaxShootingMode[]
ShootingMode, tag 0x0001.
Exiv2::Internal::PentaxMakerNote::printShutterCount
static std::ostream & printShutterCount(std::ostream &os, const Value &value, const ExifData *)
Print Pentax shutter count.
Definition: pentaxmn_int.cpp:1159
Exiv2::Internal::pentaxOffOn
const TagDetails pentaxOffOn[]
Generic for Off/On switches.
Exiv2::Internal::PentaxMakerNote::printExposure
static std::ostream & printExposure(std::ostream &os, const Value &value, const ExifData *)
Print Pentax exposure.
Definition: pentaxmn_int.cpp:1059
Exiv2::ExifData
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:434