Updated Olympus makernote, added a preliminary "tag translator"

v0.27.3
Andreas Huggel 20 years ago
parent b1e0189fa2
commit 0da34a9587

@ -24,9 +24,7 @@
Author(s): Will Stokes (wuz) <wstokes@gmail.com> Author(s): Will Stokes (wuz) <wstokes@gmail.com>
Andreas Huggel (ahu) <ahuggel@gmx.net> Andreas Huggel (ahu) <ahuggel@gmx.net>
History: 10-Mar-05, wuz: created History: 10-Mar-05, wuz: created
Credits: Olympus MakerNote implemented according to the specification Credits: See header file.
in "???" by ???.
<http://???>
*/ */
// ***************************************************************************** // *****************************************************************************
@ -67,49 +65,49 @@ namespace Exiv2 {
// Olympus Tag Info // Olympus Tag Info
const TagInfo OlympusMakerNote::tagInfo_[] = { const TagInfo OlympusMakerNote::tagInfo_[] = {
TagInfo(0x0200, "SpecialMode", "Picture taking mode (First Value: 0=normal, 2=fast, 3=panorama Second Value: sequence number Third Value: panorma direction (1=left to right, 2=right to left, 3 = bottom to top, 4=top to bottom)", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x0200, "SpecialMode", "Picture taking mode", olympusIfdId, makerTags, unsignedLong, print0x0200),
TagInfo(0x0201, "JpegQual", "JPEG quality 1=SQ 2=HQ 3=SHQ", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0201, "Quality", "Jpeg quality", olympusIfdId, makerTags, unsignedShort, print0x0201),
TagInfo(0x0202, "Macro", "Macro mode 0=normal, 1=macro", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0202, "Macro", "Macro mode", olympusIfdId, makerTags, unsignedShort, print0x0202),
TagInfo(0x0203, "0x0203", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0203, "BWMode", "Black and White Mode", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x0204, "DigiZoom", "Digital Zoom Ratio 0=normal 2=2x digital zoom", olympusIfdId, makerTags, unsignedRational, printValue), TagInfo(0x0204, "DigitalZoom", "Digital Zoom Ratio", olympusIfdId, makerTags, unsignedRational, print0x0204),
TagInfo(0x0205, "0x0205", "Unknown", olympusIfdId, makerTags, unsignedRational, printValue), TagInfo(0x0205, "FocalPlaneDiagonal", "Focal Plane Diagonal", olympusIfdId, makerTags, unsignedRational, printValue),
TagInfo(0x0206, "0x0206", "Unknown", olympusIfdId, makerTags, signedShort, printValue), TagInfo(0x0206, "0x0206", "Unknown", olympusIfdId, makerTags, signedShort, printValue),
TagInfo(0x0207, "SoftwareRelease", "Software firmware version", olympusIfdId, makerTags, asciiString, printValue), TagInfo(0x0207, "FirmwareVersion", "Software firmware version", olympusIfdId, makerTags, asciiString, printValue),
TagInfo(0x0208, "PictInfo", "ASCII format data such as [PictureInfo]", olympusIfdId, makerTags, asciiString, printValue), TagInfo(0x0208, "PictureInfo", "ASCII format data such as [PictureInfo]", olympusIfdId, makerTags, asciiString, printValue),
TagInfo(0x0209, "CameraID", "CameraID data", olympusIfdId, makerTags, undefined, printValue), TagInfo(0x0209, "CameraID", "CameraID data", olympusIfdId, makerTags, undefined, printValue),
TagInfo(0x0300, "0x0300", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0300, "PreCaptureFrames", "Pre-capture Frames", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x0301, "0x0301", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0301, "0x0301", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x0302, "0x0302", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0302, "OneTouchWB", "OneTouchWB", olympusIfdId, makerTags, unsignedShort, print0x0302),
TagInfo(0x0303, "0x0303", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0303, "0x0303", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x0304, "0x0304", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x0304, "0x0304", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x0f00, "DataDump", "Various camera settings", olympusIfdId, makerTags, undefined, print0x0f00), TagInfo(0x0f00, "DataDump", "Various camera settings", olympusIfdId, makerTags, undefined, printValue),
TagInfo(0x1000, "0x1000", "Unknown", olympusIfdId, makerTags, signedRational, printValue), TagInfo(0x1000, "0x1000", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
TagInfo(0x1001, "0x1001", "Unknown", olympusIfdId, makerTags, signedRational, printValue), TagInfo(0x1001, "0x1001", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
TagInfo(0x1002, "0x1002", "Unknown", olympusIfdId, makerTags, signedRational, printValue), TagInfo(0x1002, "0x1002", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
TagInfo(0x1003, "0x1003", "Unknown", olympusIfdId, makerTags, signedRational, printValue), TagInfo(0x1003, "0x1003", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
TagInfo(0x1004, "0x1004", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1004, "FlashMode", "Flash Mode", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1005, "0x1005", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1005, "FlashDevice", "Flash Device", olympusIfdId, makerTags, unsignedShort, print0x1005),
TagInfo(0x1006, "0x1006", "Unknown", olympusIfdId, makerTags, signedRational, printValue), TagInfo(0x1006, "Bracket", "Bracket", olympusIfdId, makerTags, signedRational, printValue),
TagInfo(0x1007, "0x1007", "Unknown", olympusIfdId, makerTags, signedShort, printValue), TagInfo(0x1007, "0x1007", "Unknown", olympusIfdId, makerTags, signedShort, printValue),
TagInfo(0x1008, "0x1008", "Unknown", olympusIfdId, makerTags, signedShort, printValue), TagInfo(0x1008, "0x1008", "Unknown", olympusIfdId, makerTags, signedShort, printValue),
TagInfo(0x1009, "0x1009", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1009, "0x1009", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x100a, "0x100a", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x100a, "0x100a", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x100b, "0x100b", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x100b, "FocusMode", "Focus Mode", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x100c, "0x100c", "Unknown", olympusIfdId, makerTags, unsignedRational, printValue), TagInfo(0x100c, "FocusDistance", "Focus Distance", olympusIfdId, makerTags, unsignedRational, printValue),
TagInfo(0x100d, "0x100d", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x100d, "Zoom", "Zoom", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x100e, "0x100e", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x100e, "MacroFocus", "MacroFocus", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x100f, "0x100f", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x100f, "SharpnessFactor", "Sharpness Factor", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1010, "0x1010", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1010, "0x1010", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1011, "0x1011", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1011, "ColorMatrix", "Color Matrix", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1012, "0x1012", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1012, "BlackLevel", "Black Level", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1013, "0x1013", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1013, "0x1013", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1014, "0x1014", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1014, "0x1014", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1015, "0x1015", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1015, "WhiteBalance", "White Balance", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1016, "0x1016", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1016, "0x1016", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1017, "0x1017", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1017, "RedBalance", "Red Balance", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1018, "0x1018", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1018, "BlueBalance", "Blue Balance", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1019, "0x1019", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1019, "0x1019", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x101a, "0x101a", "Unknown", olympusIfdId, makerTags, asciiString, printValue), TagInfo(0x101a, "SerialNumber", "Serial Number", olympusIfdId, makerTags, asciiString, printValue),
TagInfo(0x101b, "0x101b", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x101b, "0x101b", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x101c, "0x101c", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x101c, "0x101c", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x101d, "0x101d", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x101d, "0x101d", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
@ -118,24 +116,23 @@ namespace Exiv2 {
TagInfo(0x1020, "0x1020", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x1020, "0x1020", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x1021, "0x1021", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x1021, "0x1021", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x1022, "0x1022", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x1022, "0x1022", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x1023, "0x1023", "Unknown", olympusIfdId, makerTags, signedRational, printValue), TagInfo(0x1023, "FlashBias", "Flash Bias", olympusIfdId, makerTags, signedRational, printValue),
TagInfo(0x1024, "0x1024", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1024, "0x1024", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1025, "0x1025", "Unknown", olympusIfdId, makerTags, signedRational, printValue), TagInfo(0x1025, "0x1025", "Unknown", olympusIfdId, makerTags, signedRational, printValue),
TagInfo(0x1026, "0x1026", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1026, "0x1026", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1027, "0x1027", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1027, "0x1027", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1028, "0x1028", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1028, "0x1028", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1029, "0x1029", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1029, "Contrast", "Contrast", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x102a, "0x102a", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x102a, "SharpnessFactor", "Sharpness Factor", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x102b, "0x102b", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x102b, "ColorControl", "Color Control", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x102c, "0x102c", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x102c, "ValidBits", "Valid Bits", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x102d, "0x102d", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x102d, "Coring Filter", "Coring Filter", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x102e, "0x102e", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x102e, "ImageWidth", "Image Width", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x102f, "0x102f", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x102f, "ImageHeight", "Image Height", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x1030, "0x1030", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1030, "0x1030", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1031, "0x1031", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x1031, "0x1031", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x1032, "0x1032", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue), TagInfo(0x1032, "0x1032", "Unknown", olympusIfdId, makerTags, unsignedShort, printValue),
TagInfo(0x1033, "0x1033", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue), TagInfo(0x1033, "0x1033", "Unknown", olympusIfdId, makerTags, unsignedLong, printValue),
TagInfo(0x1034, "0x1034", "Unknown", olympusIfdId, makerTags, unsignedRational, printValue),
// End of list marker // End of list marker
TagInfo(0xffff, "(UnknownOlympusMakerNoteTag)", "Unknown OlympusMakerNote tag", olympusIfdId, makerTags, invalidTypeId, printValue) TagInfo(0xffff, "(UnknownOlympusMakerNoteTag)", "Unknown OlympusMakerNote tag", olympusIfdId, makerTags, invalidTypeId, printValue)
}; };
@ -204,82 +201,107 @@ namespace Exiv2 {
return new OlympusMakerNote(*this); return new OlympusMakerNote(*this);
} }
std::ostream& OlympusMakerNote::print0x0f00(std::ostream& os, std::ostream& OlympusMakerNote::print0x0200(std::ostream& os,
const Value& value) const Value& value)
{ {
if (value.typeId() != undefined) return os << value; if (value.count() != 3 || value.typeId() != unsignedLong) {
return os << value;
}
long l0 = value.toLong(0);
switch (l0) {
case 0: os << "Normal"; break;
case 2: os << "Fast"; break;
case 3: os << "Panorama"; break;
default: os << "(" << l0 << ")"; break;
}
if (l0 != 0) {
os << ", ";
long l1 = value.toLong(1);
os << "Sequence number " << l1;
}
if (l0 != 0 && l0 != 2) {
os << ", ";
long l2 = value.toLong(2);
switch (l2) {
case 1: os << "Left to Right"; break;
case 2: os << "Right to Left"; break;
case 3: os << "Bottom to Top"; break;
case 4: os << "Top to Bottom"; break;
default: os << "(" << l2 << ")"; break;
}
}
return os;
} // OlympusMakerNote::print0x0200
long count = value.count(); //! Quality
long lA, lB; const TagDetails Quality[] = {
{ 0, "(start)" },
{ 1, "Standard Quality (SQ)" },
{ 2, "High Quality (HQ)" },
{ 3, "Super High Quality (SHQ)" },
{ 6, "Raw" },
{ 0, "(end)" }
};
if (count < 11) return os; std::ostream& OlympusMakerNote::print0x0201(std::ostream& os,
lA = value.toLong(11); const Value& value)
os << std::setw(23) << "\n Function "; {
print0x0f00_011(os, lA); return TagTranslator(Quality).print(os, value);
} // OlympusMakerNote::print0x0201
if (count < 138) return os; //! Macro
lA = value.toLong(138); const TagDetails Macro[] = {
os << std::setw(23) << "\n White balance mode "; { -1, "(start)" },
print0x0f00_138(os, lA); { 0, "Off" },
{ 1, "On" },
{ 2, "Super Macro" },
{ -1, "(end)" }
};
if (count < 150) return os; std::ostream& OlympusMakerNote::print0x0202(std::ostream& os,
lA = value.toLong(150); const Value& value)
lB = value.toLong(151); {
os << std::setw(23) << "\n Sharpness "; return TagTranslator(Macro).print(os, value);
print0x0f00_150_151(os, lA, lB); } // OlympusMakerNote::print0x0202
// Meaning of any further ushorts is unknown - ignore them std::ostream& OlympusMakerNote::print0x0204(std::ostream& os,
return os; const Value& value)
{
float f = value.toFloat();
if (f == 0.0 || f == 1.0) return os << "None";
return os << std::fixed << std::setprecision(1) << f << "x";
} // OlympusMakerNote::print0x0204
} // OlympusMakerNote::print0x0f00 //! OneTouchWB
const TagDetails oneTouchWb[] = {
{ -1, "(start)" },
{ 0, "Off" },
{ 1, "On" },
{ 2, "On (Preset)" },
{ -1, "(end)" }
};
std::ostream& OlympusMakerNote::print0x0f00_011(std::ostream& os, long l) std::ostream& OlympusMakerNote::print0x0302(std::ostream& os,
const Value& value)
{ {
switch (l) { return TagTranslator(oneTouchWb).print(os, value);
case 0: os << "Off"; break; } // OlympusMakerNote::print0x0302
case 1: os << "Black and White"; break;
case 2: os << "Sepia"; break;
case 3: os << "White Board"; break;
case 4: os << "Black Board"; break;
default: os << "Unknown (" << l << ")";
}
return os;
}
std::ostream& OlympusMakerNote::print0x0f00_138(std::ostream& os, long l) //! FlashDevice
{ const TagDetails flashDevice[] = {
switch (l) { { -1, "(start)" },
case 0: os << "Auto"; break; { 0, "None" },
case 16: os << "Daylight"; break; { 1, "Internal" },
case 32: os << "Tungsten"; break; { 4, "External" },
case 48: os << "Fluorescent"; break; { 4, "Internal + External" },
case 64: os << "Shade"; break; { -1, "(end)" }
default: os << "Unknown (" << l << ")"; };
}
return os;
}
std::ostream& OlympusMakerNote::print0x0f00_150_151(std::ostream& os, std::ostream& OlympusMakerNote::print0x1005(std::ostream& os,
long l150, long l151) const Value& value)
{ {
if( l150 == 24 && l151 == 6 ) { return TagTranslator(flashDevice).print(os, value);
os << "Soft"; } // OlympusMakerNote::print0x1005
}
else if ((l150 == 32 && l151 == 12) ||
(l150 == 30 && l151 == 11) ||
(l150 == 24 && l151 == 8)) {
os << "Normal";
}
else if ((l150 == 40 && l151 == 16) ||
(l150 == 38 && l151 == 15) ||
(l150 == 32 && l151 == 12)) {
os << "Hard";
}
else {
os << "Unknown";
}
return os;
}
// ***************************************************************************** // *****************************************************************************
// free functions // free functions

@ -123,15 +123,18 @@ namespace Exiv2 {
//! @name Print functions for Olympus %MakerNote tags //! @name Print functions for Olympus %MakerNote tags
//@{ //@{
//! Print various camera settings (uses print0x0f00_XXX functions) //! Print 'Special Mode'
static std::ostream& print0x0f00(std::ostream& os, const Value& value); static std::ostream& print0x0200(std::ostream& os, const Value& value);
//! Print Jpeg quality
//! Function static std::ostream& print0x0201(std::ostream& os, const Value& value);
static std::ostream& print0x0f00_011(std::ostream& os, long l); //! Print Macro mode
//! White Balance static std::ostream& print0x0202(std::ostream& os, const Value& value);
static std::ostream& print0x0f00_138(std::ostream& os, long l); //! Print Digital Zoom Factor
//! Sharpness static std::ostream& print0x0204(std::ostream& os, const Value& value);
static std::ostream& print0x0f00_150_151(std::ostream& os, long l1, long l2); //! Print OneTouchWB
static std::ostream& print0x0302(std::ostream& os, const Value& value);
//! Print FlashDevice
static std::ostream& print0x1005(std::ostream& os, const Value& value);
//@} //@}
//! @cond IGNORE //! @cond IGNORE

@ -272,6 +272,24 @@ namespace Exiv2 {
// Unknown Tag // Unknown Tag
static const TagInfo unknownTag(0xffff, "Unknown tag", "Unknown tag", ifdIdNotSet, sectionIdNotSet, asciiString, printValue); static const TagInfo unknownTag(0xffff, "Unknown tag", "Unknown tag", ifdIdNotSet, sectionIdNotSet, asciiString, printValue);
std::ostream& TagTranslator::print(std::ostream& os, const Value& value) const
{
if (!pTagDetails_) return os << value;
long l = value.toLong();
long e = pTagDetails_[0].val_;
int i = 1;
for (; pTagDetails_[i].val_ != l && pTagDetails_[i].val_ != e; ++i) {}
if (pTagDetails_[i].val_ == l) {
os << pTagDetails_[i].label_;
}
else {
os << "(" << l << ")";
}
return os;
} // TagTranslator::print
// Tag lookup lists with tag names, desc and where they (preferably) belong to; // Tag lookup lists with tag names, desc and where they (preferably) belong to;
// this is an array with pointers to one list per IFD. The IfdId is used as the // this is an array with pointers to one list per IFD. The IfdId is used as the
// index into the array. // index into the array.

@ -109,6 +109,38 @@ namespace Exiv2 {
PrintFct printFct_; //!< Pointer to tag print function PrintFct printFct_; //!< Pointer to tag print function
}; // struct TagInfo }; // struct TagInfo
/*!
@brief Helper structure for lookup tables for translations of numeric
tag values to human readable labels.
*/
struct TagDetails {
long val_; //!< Tag value
char* label_; //!< Translation of the tag value
}; // struct TagDetails
/*!
@brief Translation from numeric values from a lookup list to human
readable labels
*/
class TagTranslator {
public:
//! @name Creators
//@{
//! Default constructor.
explicit TagTranslator(const TagDetails* pTagDetails)
: pTagDetails_(pTagDetails) {}
// No d'tor: Do not delete the list.
//@}
//! @name Accessors
//@{
//! Translate the tag value and write it out to the provided stream
std::ostream& print(std::ostream& os, const Value& value) const;
//@}
private:
const TagDetails* pTagDetails_;
}; // class TagTranslator
//! Container for Exif tag information. Implemented as a static class. //! Container for Exif tag information. Implemented as a static class.
class ExifTags { class ExifTags {
//! Prevent construction: not implemented. //! Prevent construction: not implemented.

Loading…
Cancel
Save