diff --git a/src/makernote_int.hpp b/src/makernote_int.hpp index 825c4f89..b72924a1 100644 --- a/src/makernote_int.hpp +++ b/src/makernote_int.hpp @@ -70,6 +70,7 @@ namespace Exiv2 { const uint16_t nikonpv = 280; //!< Nikon preview sub-IFD const uint16_t olymp1mn = 281; //!< Olympus makernote const uint16_t olymp2mn = 282; //!< Olympus II makernote + const uint16_t olympcs = 283; //!< Olympus camera settings } // ***************************************************************************** diff --git a/src/olympusmn.cpp b/src/olympusmn.cpp index dedb1635..e69b6f92 100644 --- a/src/olympusmn.cpp +++ b/src/olympusmn.cpp @@ -57,6 +57,12 @@ namespace Exiv2 { { 1, N_("On") } }; + //! NoYes, multiple tags + extern const TagDetails olympusNoYes[] = { + { 0, N_("No") }, + { 1, N_("Yes") } + }; + //! Quality, tag 0x0201 extern const TagDetails olympusQuality[] = { { 1, N_("Standard Quality (SQ)") }, @@ -403,6 +409,35 @@ namespace Exiv2 { return tagInfo_; } + //! ExposureMode, tag 0x0200 + extern const TagDetails olympusExposureMode[] = { + { 1, N_("Manual") }, + { 2, N_("Program") }, + { 3, N_("Aperture-priority AE") }, + { 4, N_("Shutter speed priority AE") }, + { 5, N_("Program-shift") } + }; + + const TagInfo OlympusMakerNote::tagInfoCs_[] = { + TagInfo(0x0000, "CameraSettingsVersion", N_("Camera Settings Version"), N_("Camera settings version"), olympusCsIfdId, makerTags, undefined, printValue), + TagInfo(0x0100, "PreviewImageValid", N_("PreviewImage Valid"), N_("Preview image valid"), olympusCsIfdId, makerTags, unsignedLong, EXV_PRINT_TAG(olympusNoYes)), + TagInfo(0x0101, "PreviewImageStart", N_("PreviewImage Start"), N_("Preview image start"), olympusCsIfdId, makerTags, unsignedLong, printValue), + TagInfo(0x0102, "PreviewImageLength", N_("PreviewImage Length"), N_("Preview image length"), olympusCsIfdId, makerTags, unsignedLong, printValue), + TagInfo(0x0200, "ExposureMode", N_("Exposure Mode"), N_("Exposure mode"), olympusCsIfdId, makerTags, unsignedShort, EXV_PRINT_TAG(olympusExposureMode)), + TagInfo(0x0201, "AELock", N_("AE Lock"), N_("Auto exposure lock"), olympusCsIfdId, makerTags, unsignedShort, EXV_PRINT_TAG(olympusOffOn)), + // Todo: add remaining tags... + + // End of list marker + TagInfo(0xffff, "(UnknownOlympusCsTag)", "(UnknownOlympusCsTag)", + N_("Unknown OlympusCs tag"), + olympusCsIfdId, makerTags, invalidTypeId, printValue) + }; + + const TagInfo* OlympusMakerNote::tagListCs() + { + return tagInfoCs_; + } + std::ostream& OlympusMakerNote::print0x0200(std::ostream& os, const Value& value, const ExifData*) { if (value.count() != 3 || value.typeId() != unsignedLong) { diff --git a/src/olympusmn.hpp b/src/olympusmn.hpp index e7966af3..069c3b10 100644 --- a/src/olympusmn.hpp +++ b/src/olympusmn.hpp @@ -59,6 +59,8 @@ namespace Exiv2 { public: //! Return read-only list of built-in Olympus tags static const TagInfo* tagList(); + //! Return read-only list of built-in Olympus Camera Settings tags + static const TagInfo* tagListCs(); //! @name Print functions for Olympus %MakerNote tags //@{ @@ -73,6 +75,7 @@ namespace Exiv2 { private: //! Tag information static const TagInfo tagInfo_[]; + static const TagInfo tagInfoCs_[]; }; // class OlympusMakerNote diff --git a/src/tags.cpp b/src/tags.cpp index 4f2ec541..7182049b 100644 --- a/src/tags.cpp +++ b/src/tags.cpp @@ -110,6 +110,8 @@ namespace Exiv2 { { nikon3IfdId, "Makernote", "Nikon3", Nikon3MakerNote::tagList }, { nikonPvIfdId, "Makernote", "NikonPreview", ExifTags::ifdTagList }, { olympusIfdId, "Makernote", "Olympus", OlympusMakerNote::tagList }, + { olympus2IfdId, "Makernote", "Olympus2", OlympusMakerNote::tagList }, + { olympusCsIfdId, "Makernote", "OlympusCs", OlympusMakerNote::tagListCs }, { panasonicIfdId, "Makernote", "Panasonic", PanasonicMakerNote::tagList }, { pentaxIfdId, "Makernote", "Pentax", PentaxMakerNote::tagList }, { sigmaIfdId, "Makernote", "Sigma", SigmaMakerNote::tagList }, diff --git a/src/tiffcomposite.cpp b/src/tiffcomposite.cpp index d3861def..e0d86f69 100644 --- a/src/tiffcomposite.cpp +++ b/src/tiffcomposite.cpp @@ -65,7 +65,8 @@ namespace Exiv2 { }; // Todo: This mapping table probably belongs somewhere else - move it - //! List of groups and their names + // Note: Names must be unique! + //! List of groups and their names. extern const TiffGroupInfo tiffGroupInfo[] = { { 1, "Image" }, { 2, "Thumbnail" }, @@ -77,7 +78,7 @@ namespace Exiv2 { { 8, "SubImage2" }, { 9, "SubImage3" }, { 10, "SubImage4" }, - // { 257, "Olympus" }, + // 257 not needed (olympmn) { 258, "Fujifilm" }, { 259, "Canon" }, { 260, "CanonCs" }, @@ -91,7 +92,7 @@ namespace Exiv2 { { 268, "Sigma" }, // 269 not needed (sonymn) { 270, "Sony" }, - { 271, "Sony" }, + { 271, "Sony" }, // Todo: Need second Sony group! { 272, "Minolta" }, { 273, "MinoltaCsOld" }, { 274, "MinoltaCsNew" }, @@ -102,7 +103,8 @@ namespace Exiv2 { { 279, "Pentax" }, { 280, "NikonPreview" }, { 281, "Olympus" }, - { 282, "Olympus" } + { 282, "Olympus2" }, + { 283, "OlympusCs" } }; bool TiffGroupInfo::operator==(const uint16_t& group) const diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp index 0d73f2d3..cc5324f5 100644 --- a/src/tiffimage.cpp +++ b/src/tiffimage.cpp @@ -371,10 +371,10 @@ namespace Exiv2 { { Tag::next, Group::olymp1mn, Group::ignr, 0x927c, Group::exif, newTiffDirectory }, { Tag::all, Group::olymp1mn, Group::olymp1mn, 0x927c, Group::exif, newTiffEntry }, - // Olympus makernote - some Olympus cameras use Minolta structures - // Todo: Adding such tags will not work (maybe result in a Minolta makernote), need separate groups + // Olympus2 makernote { 0x0001, Group::olymp2mn, Group::minocso, 0x927c, Group::exif, newTiffArrayEntry }, { 0x0003, Group::olymp2mn, Group::minocsn, 0x927c, Group::exif, newTiffArrayEntry }, + { 0x2020, Group::olymp2mn, Group::olympcs, 0x927c, Group::exif, newTiffSubIfd }, { Tag::next, Group::olymp2mn, Group::ignr, 0x927c, Group::exif, newTiffDirectory }, { Tag::all, Group::olymp2mn, Group::olymp2mn, 0x927c, Group::exif, newTiffEntry }, diff --git a/src/types.hpp b/src/types.hpp index 89698d14..fc99730f 100644 --- a/src/types.hpp +++ b/src/types.hpp @@ -142,7 +142,8 @@ namespace Exiv2 { minoltaIfdId, minoltaCs5DIfdId, minoltaCs7DIfdId, minoltaCsOldIfdId, minoltaCsNewIfdId, nikon1IfdId, nikon2IfdId, nikon3IfdId, nikonPvIfdId, - olympusIfdId, panasonicIfdId, pentaxIfdId, sigmaIfdId, sonyIfdId, + olympusIfdId, olympus2IfdId, olympusCsIfdId, + panasonicIfdId, pentaxIfdId, sigmaIfdId, sonyIfdId, lastIfdId }; //! Container for binary data