From 3ff1bf4e131bbe6ce371cb615b3e65bff0f20c87 Mon Sep 17 00:00:00 2001 From: Andreas Huggel Date: Tue, 21 Nov 2006 15:43:11 +0000 Subject: [PATCH] Added methods to access built-in read-only taglists (Max Lapshin) --- src/canonmn.cpp | 29 +++++++++++++++++++++++++++++ src/canonmn.hpp | 12 ++++++++++++ src/fujimn.cpp | 5 +++++ src/fujimn.hpp | 2 ++ src/minoltamn.cpp | 22 +++++++++++++++++++++- src/minoltamn.hpp | 8 ++++++++ src/nikonmn.cpp | 15 +++++++++++++++ src/nikonmn.hpp | 6 ++++++ src/olympusmn.cpp | 5 +++++ src/olympusmn.hpp | 2 ++ src/panasonicmn.cpp | 5 +++++ src/panasonicmn.hpp | 2 ++ src/sigmamn.cpp | 5 +++++ src/sigmamn.hpp | 2 ++ src/sonymn.cpp | 5 +++++ src/sonymn.hpp | 2 ++ src/tags.cpp | 20 ++++++++++++++++++++ src/tags.hpp | 8 ++++++++ 18 files changed, 154 insertions(+), 1 deletion(-) diff --git a/src/canonmn.cpp b/src/canonmn.cpp index f6a07b44..8d49c029 100644 --- a/src/canonmn.cpp +++ b/src/canonmn.cpp @@ -102,6 +102,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownCanonMakerNoteTag)", "(UnknownCanonMakerNoteTag)", "Unknown CanonMakerNote tag", canonIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* CanonMakerNote::tagList() + { + return tagInfo_; + } + //! Macro, tag 0x0001 extern const TagDetails canonCsMacro[] = { { 1, "On" }, @@ -368,6 +373,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownCanonCsTag)", "(UnknownCanonCsTag)", "Unknown Canon Camera Settings 1 tag", canonCsIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* CanonMakerNote::tagListCs() + { + return tagInfoCs_; + } + //! WhiteBalance, tag 0x0007 extern const TagDetails canonSiWhiteBalance[] = { { 0, "Auto" }, @@ -449,6 +459,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownCanonSiTag)", "(UnknownCanonSiTag)", "Unknown Canon Camera Settings 2 tag", canonSiIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* CanonMakerNote::tagListSi() + { + return tagInfoSi_; + } + //! PanoramaDirection, tag 0x0005 extern const TagDetails canonPaDirection[] = { { 0, "Left to right" }, @@ -466,6 +481,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownCanonCs2Tag)", "(UnknownCanonCs2Tag)", "Unknown Canon Panorama tag", canonPaIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* CanonMakerNote::tagListPa() + { + return tagInfoPa_; + } + // Canon Custom Function Tag Info const TagInfo CanonMakerNote::tagInfoCf_[] = { TagInfo(0x0001, "NoiseReduction", "NoiseReduction", "Long exposure noise reduction", canonCfIfdId, makerTags, unsignedShort, printValue), @@ -487,6 +507,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownCanonCfTag)", "(UnknownCanonCfTag)", "Unknown Canon Custom Function tag", canonCfIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* CanonMakerNote::tagListCf() + { + return tagInfoCf_; + } + //! AFPointsUsed, tag 0x0016 extern const TagDetailsBitmask canonPiAFPointsUsed[] = { { 0x01, "right" }, @@ -523,6 +548,10 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownCanonPiTag)", "(UnknownCanonPiTag)", "Unknown Canon Picture Info tag", canonPiIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* CanonMakerNote::tagListPi() + { + return tagInfoPi_; + } int CanonMakerNote::read(const byte* buf, long len, diff --git a/src/canonmn.hpp b/src/canonmn.hpp index cc85b613..c9c413b7 100644 --- a/src/canonmn.hpp +++ b/src/canonmn.hpp @@ -127,6 +127,18 @@ namespace Exiv2 { long size() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Canon tags + static const TagInfo* tagList(); + //! Return read-only list of built-in Canon Camera Settings tags + static const TagInfo* tagListCs(); + //! Return read-only list of built-in Canon Shot Info tags + static const TagInfo* tagListSi(); + //! Return read-only list of built-in Canon Panorama tags + static const TagInfo* tagListPa(); + //! Return read-only list of built-in Canon Custom Function tags + static const TagInfo* tagListCf(); + //! Return read-only list of built-in Canon Picture Info tags + static const TagInfo* tagListPi(); //@} //! @name Print functions for Canon %MakerNote tags diff --git a/src/fujimn.cpp b/src/fujimn.cpp index 5eb97088..0e511a00 100644 --- a/src/fujimn.cpp +++ b/src/fujimn.cpp @@ -163,6 +163,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownFujiMakerNoteTag)", "(UnknownFujiMakerNoteTag)", "Unknown FujiMakerNote tag", fujiIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* FujiMakerNote::tagList() + { + return tagInfo_; + } + FujiMakerNote::FujiMakerNote(bool alloc) : IfdMakerNote(fujiIfdId, alloc) { diff --git a/src/fujimn.hpp b/src/fujimn.hpp index cd15310b..a0130606 100644 --- a/src/fujimn.hpp +++ b/src/fujimn.hpp @@ -116,6 +116,8 @@ namespace Exiv2 { int checkHeader() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Fujifilm tags + static const TagInfo* tagList(); //@} //! @cond IGNORE diff --git a/src/minoltamn.cpp b/src/minoltamn.cpp index 6bdf323a..1f54edd7 100644 --- a/src/minoltamn.cpp +++ b/src/minoltamn.cpp @@ -240,6 +240,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownMinoltaMakerNoteTag)", "(UnknownMinoltaMakerNoteTag)", "Unknown MinoltaMakerNote tag", minoltaIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* MinoltaMakerNote::tagList() + { + return tagInfo_; + } + // -- Standard Minolta camera settings --------------------------------------------------------------- //! Lookup table to translate Minolta Std camera settings exposure mode values to readable labels @@ -601,9 +606,14 @@ namespace Exiv2 { TagInfo(0x003F, "FlashMetering", "Flash Metering", "Flash metering", minoltaCsNewIfdId, makerTags, unsignedLong, EXV_PRINT_TAG(minoltaFlashMeteringStd)), // End of list marker - TagInfo(0xffff, "(UnknownMinoltaCsTag)", "(UnknownMinoltaCsTag)", "Unknown Minolta Camera Settings tag", minoltaCsNewIfdId, makerTags, invalidTypeId, printValue) + TagInfo(0xffff, "(UnknownMinoltaCsStdTag)", "(UnknownMinoltaCsStdTag)", "Unknown Minolta Camera Settings tag", minoltaCsNewIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* MinoltaMakerNote::tagListCsStd() + { + return tagInfoCsStd_; + } + // -- Minolta Dynax 7D camera settings --------------------------------------------------------------- //! Lookup table to translate Minolta Dynax 7D camera settings exposure mode values to readable labels @@ -750,6 +760,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownMinoltaCs7DTag)", "(UnknownMinoltaCs7DTag)", "Unknown Minolta Camera Settings 7D tag", minoltaCs7DIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* MinoltaMakerNote::tagListCs7D() + { + return tagInfoCs7D_; + } + // -- Minolta Dynax 5D camera settings --------------------------------------------------------------- //! Lookup table to translate Minolta Dynax 5D camera settings exposure mode values to readable labels @@ -934,6 +949,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownMinoltaCs5DTag)", "(UnknownMinoltaCs5DTag)", "Unknown Minolta Camera Settings 5D tag", minoltaCs5DIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* MinoltaMakerNote::tagListCs5D() + { + return tagInfoCs5D_; + } + // TODO : Add camera settings tags info "New2"... //! @cond IGNORE diff --git a/src/minoltamn.hpp b/src/minoltamn.hpp index 5d889039..80a83c49 100644 --- a/src/minoltamn.hpp +++ b/src/minoltamn.hpp @@ -126,6 +126,14 @@ namespace Exiv2 { long size() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Minolta tags + static const TagInfo* tagList(); + //! Return read-only list of built-in Minolta Standard Camera Settings tags + static const TagInfo* tagListCsStd(); + //! Return read-only list of built-in Minolta 7D Camera Settings tags + static const TagInfo* tagListCs7D(); + //! Return read-only list of built-in Minolta 5D Camera Settings tags + static const TagInfo* tagListCs5D(); //@} //! @name Print functions for Minolta %MakerNote tags diff --git a/src/nikonmn.cpp b/src/nikonmn.cpp index cddc6757..52c1cc0f 100644 --- a/src/nikonmn.cpp +++ b/src/nikonmn.cpp @@ -106,6 +106,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownNikon1MnTag)", "(UnknownNikon1MnTag)", "Unknown Nikon1MakerNote tag", nikon1IfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* Nikon1MakerNote::tagList() + { + return tagInfo_; + } + Nikon1MakerNote::Nikon1MakerNote(bool alloc) : IfdMakerNote(nikon1IfdId, alloc) { @@ -300,6 +305,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownNikon2MnTag)", "(UnknownNikon2MnTag)", "Unknown Nikon2MakerNote tag", nikon2IfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* Nikon2MakerNote::tagList() + { + return tagInfo_; + } + Nikon2MakerNote::Nikon2MakerNote(bool alloc) : IfdMakerNote(nikon2IfdId, alloc) { @@ -500,6 +510,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownNikon3MnTag)", "(UnknownNikon3MnTag)", "Unknown Nikon3MakerNote tag", nikon3IfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* Nikon3MakerNote::tagList() + { + return tagInfo_; + } + Nikon3MakerNote::Nikon3MakerNote(bool alloc) : IfdMakerNote(nikon3IfdId, alloc) { diff --git a/src/nikonmn.hpp b/src/nikonmn.hpp index 0c9327be..3e643139 100644 --- a/src/nikonmn.hpp +++ b/src/nikonmn.hpp @@ -114,6 +114,8 @@ namespace Exiv2 { //@{ AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Nikon1 tags + static const TagInfo* tagList(); //@} //! @name Print functions for Nikon1 %MakerNote tags @@ -184,6 +186,8 @@ namespace Exiv2 { int checkHeader() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Nikon2 tags + static const TagInfo* tagList(); //@} //! @name Print functions for Nikon2 %MakerNote tags @@ -243,6 +247,8 @@ namespace Exiv2 { int checkHeader() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Nikon3 tags + static const TagInfo* tagList(); //@} //! @name Print functions for Nikon3 %MakerNote tags diff --git a/src/olympusmn.cpp b/src/olympusmn.cpp index d15c5499..4beb4655 100644 --- a/src/olympusmn.cpp +++ b/src/olympusmn.cpp @@ -164,6 +164,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownOlympusMakerNoteTag)", "(UnknownOlympusMakerNoteTag)", "Unknown OlympusMakerNote tag", olympusIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* OlympusMakerNote::tagList() + { + return tagInfo_; + } + OlympusMakerNote::OlympusMakerNote(bool alloc) : IfdMakerNote(olympusIfdId, alloc) { diff --git a/src/olympusmn.hpp b/src/olympusmn.hpp index d92cb36b..7e279490 100644 --- a/src/olympusmn.hpp +++ b/src/olympusmn.hpp @@ -119,6 +119,8 @@ namespace Exiv2 { int checkHeader() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Olympus tags + static const TagInfo* tagList(); //@} //! @name Print functions for Olympus %MakerNote tags diff --git a/src/panasonicmn.cpp b/src/panasonicmn.cpp index ad41c299..f00014f0 100644 --- a/src/panasonicmn.cpp +++ b/src/panasonicmn.cpp @@ -181,6 +181,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownPanasonicMakerNoteTag)", "(UnknownPanasonicMakerNoteTag)", "Unknown PanasonicMakerNote tag", panasonicIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* PanasonicMakerNote::tagList() + { + return tagInfo_; + } + PanasonicMakerNote::PanasonicMakerNote(bool alloc) : IfdMakerNote(panasonicIfdId, alloc, false) { diff --git a/src/panasonicmn.hpp b/src/panasonicmn.hpp index 83c0847b..c2573d87 100644 --- a/src/panasonicmn.hpp +++ b/src/panasonicmn.hpp @@ -116,6 +116,8 @@ namespace Exiv2 { int checkHeader() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Panasonic tags + static const TagInfo* tagList(); //@} //! @name Print functions for Panasonic %MakerNote tags diff --git a/src/sigmamn.cpp b/src/sigmamn.cpp index 80169867..bfaf8a74 100644 --- a/src/sigmamn.cpp +++ b/src/sigmamn.cpp @@ -89,6 +89,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownSigmaMakerNoteTag)", "(UnknownSigmaMakerNoteTag)", "Unknown SigmaMakerNote tag", sigmaIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* SigmaMakerNote::tagList() + { + return tagInfo_; + } + SigmaMakerNote::SigmaMakerNote(bool alloc) : IfdMakerNote(sigmaIfdId, alloc) { diff --git a/src/sigmamn.hpp b/src/sigmamn.hpp index 72e3a094..bc8d28b2 100644 --- a/src/sigmamn.hpp +++ b/src/sigmamn.hpp @@ -115,6 +115,8 @@ namespace Exiv2 { int checkHeader() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Sigma tags + static const TagInfo* tagList(); //@} //! @name Print functions for Sigma (Foveon) %MakerNote tags diff --git a/src/sonymn.cpp b/src/sonymn.cpp index 2d006fd5..9696942f 100644 --- a/src/sonymn.cpp +++ b/src/sonymn.cpp @@ -71,6 +71,11 @@ namespace Exiv2 { TagInfo(0xffff, "(UnknownSonyMakerNoteTag)", "Unknown SonyMakerNote tag", "Unknown SonyMakerNote tag", sonyIfdId, makerTags, invalidTypeId, printValue) }; + const TagInfo* SonyMakerNote::tagList() + { + return tagInfo_; + } + SonyMakerNote::SonyMakerNote(bool alloc) : IfdMakerNote(sonyIfdId, alloc, false) { diff --git a/src/sonymn.hpp b/src/sonymn.hpp index b31cd86a..e2b497c7 100644 --- a/src/sonymn.hpp +++ b/src/sonymn.hpp @@ -113,6 +113,8 @@ namespace Exiv2 { int checkHeader() const; AutoPtr create(bool alloc =true) const; AutoPtr clone() const; + //! Return read-only list of built-in Sony tags + static const TagInfo* tagList(); //@} //! @cond IGNORE diff --git a/src/tags.cpp b/src/tags.cpp index d966dd87..ba9b5bb0 100644 --- a/src/tags.cpp +++ b/src/tags.cpp @@ -463,6 +463,11 @@ namespace Exiv2 { "Unknown IFD tag", ifdIdNotSet, sectionIdNotSet, invalidTypeId, printValue) }; + const TagInfo* ExifTags::ifdTagList() + { + return ifdTagInfo; + } + //! ExposureProgram, tag 0x8822 extern const TagDetails exifExposureProgram[] = { { 0, "Not defined" }, @@ -900,6 +905,11 @@ namespace Exiv2 { "Unknown Exif tag", ifdIdNotSet, sectionIdNotSet, invalidTypeId, printValue) }; + const TagInfo* ExifTags::exifTagList() + { + return exifTagInfo; + } + //! GPS latitude reference, tag 0x0001; also GPSDestLatitudeRef, tag 0x0013 extern const TagDetails exifGPSLatitudeRef[] = { { 78, "North" }, @@ -1074,6 +1084,11 @@ namespace Exiv2 { "Unknown GPSInfo tag", ifdIdNotSet, sectionIdNotSet, invalidTypeId, printValue) }; + const TagInfo* ExifTags::gpsTagList() + { + return gpsTagInfo; + } + // Exif Interoperability IFD Tags static const TagInfo iopTagInfo[] = { TagInfo(0x0001, "InteroperabilityIndex", "InteroperabilityIndex", @@ -1100,6 +1115,11 @@ namespace Exiv2 { "Unknown Exif Interoperability tag", ifdIdNotSet, sectionIdNotSet, invalidTypeId, printValue) }; + const TagInfo* ExifTags::iopTagList() + { + return iopTagInfo; + } + // Unknown Tag static const TagInfo unknownTag(0xffff, "Unknown tag", "Unknown tag", "Unknown tag", ifdIdNotSet, sectionIdNotSet, asciiString, printValue); diff --git a/src/tags.hpp b/src/tags.hpp index 3ac89118..b8d47932 100644 --- a/src/tags.hpp +++ b/src/tags.hpp @@ -272,6 +272,14 @@ namespace Exiv2 { uint16_t tag, IfdId ifdId, const Value& value); + //! Return read-only list of built-in IFD0/1 tags + static const TagInfo* ifdTagList(); + //! Return read-only list of built-in Exif IFD tags + static const TagInfo* exifTagList(); + //! Return read-only list of built-in IOP tags + static const TagInfo* iopTagList(); + //! Return read-only list of built-in GPS tags + static const TagInfo* gpsTagList(); //! Print a list of all standard Exif tags to output stream static void taglist(std::ostream& os); //! Print a list of all tags related to one makernote %IfdId