From 2f958d8a5623bb7170c1c8ff23055d2ad8b6ea63 Mon Sep 17 00:00:00 2001 From: Andreas Huggel Date: Tue, 2 Dec 2008 15:04:34 +0000 Subject: [PATCH] Added support for Olympus FE and Raw Info subdirs and tags. --- doc/templates/Makefile | 2 +- doc/templates/tags-olympus.html.in | 10 ++++ src/makernote_int.hpp | 10 ++++ src/olympusmn.cpp | 73 ++++++++++++++++++++++++++++++ src/olympusmn.hpp | 6 +++ src/tags.cpp | 10 ++++ src/tiffcomposite.cpp | 12 ++++- src/tiffimage.cpp | 40 ++++++++++++++++ src/types.hpp | 3 ++ 9 files changed, 164 insertions(+), 2 deletions(-) diff --git a/doc/templates/Makefile b/doc/templates/Makefile index 7faea236..36b59d5a 100644 --- a/doc/templates/Makefile +++ b/doc/templates/Makefile @@ -51,7 +51,7 @@ TABLES = Exif \ Minolta MinoltaCsNew MinoltaCs5D MinoltaCs7D \ Nikon1 Nikon2 Nikon3 \ Olympus OlympusCs OlympusEq OlympusRd OlympusRd2 \ - OlympusIp OlympusFi \ + OlympusIp OlympusFi OlympusFe1 OlympusRi \ Panasonic \ Pentax \ Sigma \ diff --git a/doc/templates/tags-olympus.html.in b/doc/templates/tags-olympus.html.in index a58e7023..cd271079 100644 --- a/doc/templates/tags-olympus.html.in +++ b/doc/templates/tags-olympus.html.in @@ -44,6 +44,16 @@ __OlympusIp__ __OlympusFi__
+

Olympus FE Tags

+

Click on a column header to sort the table.

+__OlympusFe1__ +
+ +

Olympus Raw Info Tags

+

Click on a column header to sort the table.

+__OlympusRi__ +
+ diff --git a/src/makernote_int.hpp b/src/makernote_int.hpp index 3f4e9f1e..5827854c 100644 --- a/src/makernote_int.hpp +++ b/src/makernote_int.hpp @@ -76,6 +76,16 @@ namespace Exiv2 { const uint16_t olymprd2 = 286; //!< Olympus raw development 2 tags const uint16_t olympip = 287; //!< Olympus image processing tags const uint16_t olympfi = 288; //!< Olympus focus info tags + const uint16_t olympfe1 = 289; //!< Olympus FE 1 tags + const uint16_t olympfe2 = 290; //!< Olympus FE 2 tags + const uint16_t olympfe3 = 291; //!< Olympus FE 3 tags + const uint16_t olympfe4 = 292; //!< Olympus FE 4 tags + const uint16_t olympfe5 = 293; //!< Olympus FE 5 tags + const uint16_t olympfe6 = 294; //!< Olympus FE 6 tags + const uint16_t olympfe7 = 295; //!< Olympus FE 7 tags + const uint16_t olympfe8 = 296; //!< Olympus FE 8 tags + const uint16_t olympfe9 = 297; //!< Olympus FE 9 tags + const uint16_t olympri = 298; //!< Olympus raw info tags } // ***************************************************************************** diff --git a/src/olympusmn.cpp b/src/olympusmn.cpp index 1fefbbdf..dfd5c012 100644 --- a/src/olympusmn.cpp +++ b/src/olympusmn.cpp @@ -939,6 +939,79 @@ namespace Exiv2 { return tagInfoFi_; } + const TagInfo OlympusMakerNote::tagInfoFe_[] = { + TagInfo(0x0100, "BodyFirmwareVersion", N_("Body Firmware Version"), N_("Body firmware version"), olympusFe1IfdId, makerTags, asciiString, printValue), + // End of list marker + TagInfo(0xffff, "(UnknownOlympusFeTag)", "(UnknownOlympusFeTag)", N_("Unknown OlympusFe tag"), olympusFe1IfdId, makerTags, invalidTypeId, printValue) + }; + + const TagInfo* OlympusMakerNote::tagListFe() + { + return tagInfoFe_; + } + + //! OlympusRi LightSource, tag 0x1000 + extern const TagDetails olympusRiLightSource[] = { + { 0, N_("Unknown") }, + { 16, N_("Shade") }, + { 17, N_("Cloudy") }, + { 18, N_("Fine Weather") }, + { 20, N_("Tungsten (incandescent)") }, + { 22, N_("Evening Sunlight") }, + { 33, N_("Daylight Fluorescent (D 5700 - 7100K)") }, + { 34, N_("Day White Fluorescent (N 4600 - 5400K)") }, + { 35, N_("Cool White Fluorescent (W 3900 - 4500K)") }, + { 36, N_("White Fluorescent (WW 3200 - 3700K)") }, + { 256, N_("One Touch White Balance") }, + { 512, N_("Custom 1-4") } + }; + + const TagInfo OlympusMakerNote::tagInfoRi_[] = { + TagInfo(0x0000, "RawInfoVersion", N_("Raw Info Version"), N_("Raw info version"), olympusRiIfdId, makerTags, undefined, printValue), + TagInfo(0x0100, "WB_RBLevelsUsed", N_("WB_RB Levels Used"), N_("WB_RB levels used"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0110, "WB_RBLevelsAuto", N_("WB_RB Levels Auto"), N_("WB_RB levels auto"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0120, "WB_RBLevelsShade", N_("WB_RB Levels Shade"), N_("WB_RB levels shade"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0121, "WB_RBLevelsCloudy", N_("WB_RB Levels Cloudy"), N_("WB_RB levels cloudy"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0122, "WB_RBLevelsFineWeather", N_("WB_RB Levels Fine Weather"), N_("WB_RB levels fine weather"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0123, "WB_RBLevelsTungsten", N_("WB_RB Levels Tungsten"), N_("WB_RB levels tungsten"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0124, "WB_RBLevelsEveningSunlight", N_("WB_RB Levels Evening Sunlight"), N_("WB_RB levels evening sunlight"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0130, "WB_RBLevelsDaylightFluor", N_("WB_RB Levels Daylight Fluor"), N_("WB_RB levels daylight fluor"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0131, "WB_RBLevelsDayWhiteFluor", N_("WB_RB Levels Day White Fluor"), N_("WB_RB levels day white fluor"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0132, "WB_RBLevelsCoolWhiteFluor", N_("WB_RB Levels Cool White Fluor"), N_("WB_RB levels cool white fluor"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0133, "WB_RBLevelsWhiteFluorescent", N_("WB_RB Levels White Fluorescent"), N_("WB_RB levels white fluorescent"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0200, "ColorMatrix2", N_("Color Matrix2"), N_("Color matrix 2"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0310, "CoringFilter", N_("Coring Filter"), N_("Coring filter"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0311, "CoringValues", N_("Coring Values"), N_("Coring values"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0600, "BlackLevel2", N_("Black Level 2"), N_("Black level 2"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0601, "YCbCrCoefficients", N_("YCbCr Coefficients"), N_("YCbCr coefficients"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0611, "ValidPixelDepth", N_("Valid Pixel Depth"), N_("Valid pixel depth"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0612, "CropLeft", N_("Crop Left"), N_("Crop left"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0613, "CropTop", N_("Crop Top"), N_("Crop top"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x0614, "CropWidth", N_("Crop Width"), N_("Crop width"), olympusRiIfdId, makerTags, unsignedLong, printValue), + TagInfo(0x0615, "CropHeight", N_("Crop Height"), N_("Crop height"), olympusRiIfdId, makerTags, unsignedLong, printValue), + TagInfo(0x1000, "LightSource", N_("Light Source"), N_("Light source"), olympusRiIfdId, makerTags, unsignedShort, EXV_PRINT_TAG(olympusRiLightSource)), + TagInfo(0x1001, "WhiteBalanceComp", N_("White Balance Comp"), N_("White balance comp"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x1010, "SaturationSetting", N_("Saturation Setting"), N_("Saturation setting"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x1011, "HueSetting", N_("Hue Setting"), N_("Hue setting"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x1012, "ContrastSetting", N_("Contrast Setting"), N_("Contrast setting"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x1013, "SharpnessSetting", N_("Sharpness Setting"), N_("Sharpness setting"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x2000, "CMExposureCompensation", N_("CM Exposure Compensation"), N_("CM exposure compensation"), olympusRiIfdId, makerTags, signedRational, printValue), + TagInfo(0x2001, "CMWhiteBalance", N_("CM White Balance"), N_("CM white balance"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x2002, "CMWhiteBalanceComp", N_("CM White Balance Comp"), N_("CM white balance comp"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x2010, "CMWhiteBalanceGrayPoint", N_("CM White Balance Gray Point"), N_("CM white balance gray point"), olympusRiIfdId, makerTags, unsignedShort, printValue), + TagInfo(0x2020, "CMSaturation", N_("CM Saturation"), N_("CM saturation"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x2021, "CMHue", N_("CM Hue"), N_("CM hue"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x2022, "CMContrast", N_("CM Contrast"), N_("CM contrast"), olympusRiIfdId, makerTags, signedShort, printValue), + TagInfo(0x2023, "CMSharpness", N_("CM Sharpness"), N_("CM sharpness"), olympusRiIfdId, makerTags, signedShort, printValue), + // End of list marker + TagInfo(0xffff, "(UnknownOlympusRiTag)", "(UnknownOlympusRiTag)", N_("Unknown OlympusRi tag"), olympusRiIfdId, makerTags, invalidTypeId, printValue) + }; + + const TagInfo* OlympusMakerNote::tagListRi() + { + return tagInfoRi_; + } + // Gradation std::ostream& OlympusMakerNote::print0x050f(std::ostream& os, const Value& value, const ExifData*) { diff --git a/src/olympusmn.hpp b/src/olympusmn.hpp index 989384f1..1f535261 100644 --- a/src/olympusmn.hpp +++ b/src/olympusmn.hpp @@ -71,6 +71,10 @@ namespace Exiv2 { static const TagInfo* tagListIp(); //! Return read-only list of built-in Olympus Focus Info tags static const TagInfo* tagListFi(); + //! Return read-only list of built-in Olympus FE tags + static const TagInfo* tagListFe(); + //! Return read-only list of built-in Olympus Raw Info tags + static const TagInfo* tagListRi(); //! @name Print functions for Olympus %MakerNote tags //@{ @@ -95,6 +99,8 @@ namespace Exiv2 { static const TagInfo tagInfoRd2_[]; static const TagInfo tagInfoIp_[]; static const TagInfo tagInfoFi_[]; + static const TagInfo tagInfoFe_[]; + static const TagInfo tagInfoRi_[]; }; // class OlympusMakerNote diff --git a/src/tags.cpp b/src/tags.cpp index ee92c7ef..69ddca77 100644 --- a/src/tags.cpp +++ b/src/tags.cpp @@ -121,6 +121,16 @@ namespace Exiv2 { { olympusRd2IfdId, "Makernote", "OlympusRd2", OlympusMakerNote::tagListRd2 }, { olympusIpIfdId, "Makernote", "OlympusIp", OlympusMakerNote::tagListIp }, { olympusFiIfdId, "Makernote", "OlympusFi", OlympusMakerNote::tagListFi }, + { olympusFe1IfdId, "Makernote", "OlympusFe1", OlympusMakerNote::tagListFe }, + { olympusFe2IfdId, "Makernote", "OlympusFe2", OlympusMakerNote::tagListFe }, + { olympusFe3IfdId, "Makernote", "OlympusFe3", OlympusMakerNote::tagListFe }, + { olympusFe4IfdId, "Makernote", "OlympusFe4", OlympusMakerNote::tagListFe }, + { olympusFe5IfdId, "Makernote", "OlympusFe5", OlympusMakerNote::tagListFe }, + { olympusFe6IfdId, "Makernote", "OlympusFe6", OlympusMakerNote::tagListFe }, + { olympusFe7IfdId, "Makernote", "OlympusFe7", OlympusMakerNote::tagListFe }, + { olympusFe8IfdId, "Makernote", "OlympusFe8", OlympusMakerNote::tagListFe }, + { olympusFe9IfdId, "Makernote", "OlympusFe9", OlympusMakerNote::tagListFe }, + { olympusRiIfdId, "Makernote", "OlympusRi", OlympusMakerNote::tagListRi }, { 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 782f2d15..6f4c3e4c 100644 --- a/src/tiffcomposite.cpp +++ b/src/tiffcomposite.cpp @@ -110,7 +110,17 @@ namespace Exiv2 { { 285, "OlympusRd" }, { 286, "OlympusRd2" }, { 287, "OlympusIp" }, - { 288, "OlympusFi" } + { 288, "OlympusFi" }, + { 289, "OlympusFe1" }, + { 290, "OlympusFe2" }, + { 291, "OlympusFe3" }, + { 292, "OlympusFe4" }, + { 293, "OlympusFe5" }, + { 294, "OlympusFe6" }, + { 295, "OlympusFe7" }, + { 296, "OlympusFe8" }, + { 297, "OlympusFe9" }, + { 298, "OlympusRi" } }; bool TiffGroupInfo::operator==(const uint16_t& group) const diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp index f4a73b69..99e0bce6 100644 --- a/src/tiffimage.cpp +++ b/src/tiffimage.cpp @@ -370,6 +370,16 @@ namespace Exiv2 { { 0x2031, Group::olymp2mn, Group::olymprd2, 0x927c, Group::exif, newTiffSubIfd }, { 0x2040, Group::olymp2mn, Group::olympip, 0x927c, Group::exif, newTiffSubIfd }, { 0x2050, Group::olymp2mn, Group::olympfi, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2100, Group::olymp2mn, Group::olympfe1, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2200, Group::olymp2mn, Group::olympfe2, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2300, Group::olymp2mn, Group::olympfe3, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2400, Group::olymp2mn, Group::olympfe4, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2500, Group::olymp2mn, Group::olympfe5, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2600, Group::olymp2mn, Group::olympfe6, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2700, Group::olymp2mn, Group::olympfe7, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2800, Group::olymp2mn, Group::olympfe8, 0x927c, Group::exif, newTiffSubIfd }, + { 0x2900, Group::olymp2mn, Group::olympfe9, 0x927c, Group::exif, newTiffSubIfd }, + { 0x3000, Group::olymp2mn, Group::olympri, 0x927c, Group::exif, newTiffSubIfd }, { Tag::next, Group::olymp2mn, Group::ignr, 0x927c, Group::exif, newTiffDirectory }, { Tag::all, Group::olymp2mn, Group::olymp2mn, 0x927c, Group::exif, newTiffEntry }, @@ -393,6 +403,36 @@ namespace Exiv2 { // Olympus2 focus info subdir { Tag::all, Group::olympfi, Group::olympfi, 0x2050, Group::olymp2mn, newTiffEntry }, + // Olympus2 FE 1 subdir + { Tag::all, Group::olympfe1, Group::olympfe1, 0x2100, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 2 subdir + { Tag::all, Group::olympfe2, Group::olympfe2, 0x2200, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 3 subdir + { Tag::all, Group::olympfe3, Group::olympfe3, 0x2300, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 4 subdir + { Tag::all, Group::olympfe4, Group::olympfe4, 0x2400, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 5 subdir + { Tag::all, Group::olympfe5, Group::olympfe5, 0x2500, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 6 subdir + { Tag::all, Group::olympfe6, Group::olympfe6, 0x2600, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 7 subdir + { Tag::all, Group::olympfe7, Group::olympfe7, 0x2700, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 8 subdir + { Tag::all, Group::olympfe8, Group::olympfe8, 0x2800, Group::olymp2mn, newTiffEntry }, + + // Olympus2 FE 9 subdir + { Tag::all, Group::olympfe9, Group::olympfe9, 0x2900, Group::olymp2mn, newTiffEntry }, + + // Olympus2 Raw Info subdir + { Tag::all, Group::olympri, Group::olympri, 0x3000, Group::olymp2mn, newTiffEntry }, + // Fujifilm makernote { Tag::next, Group::fujimn, Group::ignr, 0x927c, Group::exif, newTiffDirectory }, { Tag::all, Group::fujimn, Group::fujimn, 0x927c, Group::exif, newTiffEntry }, diff --git a/src/types.hpp b/src/types.hpp index 1896d801..d4f29aa8 100644 --- a/src/types.hpp +++ b/src/types.hpp @@ -146,6 +146,9 @@ namespace Exiv2 { nikon1IfdId, nikon2IfdId, nikon3IfdId, nikonPvIfdId, olympusIfdId, olympus2IfdId, olympusCsIfdId, olympusEqIfdId, olympusRdIfdId, olympusRd2IfdId, olympusIpIfdId, olympusFiIfdId, + olympusFe1IfdId, olympusFe2IfdId, olympusFe3IfdId, olympusFe4IfdId, + olympusFe5IfdId, olympusFe6IfdId, olympusFe7IfdId, olympusFe8IfdId, + olympusFe9IfdId, olympusRiIfdId, panasonicIfdId, pentaxIfdId, sigmaIfdId, sonyIfdId, lastIfdId };