diff --git a/src/olympusmn.cpp b/src/olympusmn.cpp index cbe37919..9171ee4c 100644 --- a/src/olympusmn.cpp +++ b/src/olympusmn.cpp @@ -1005,7 +1005,7 @@ namespace Exiv2 { TagInfo(0x0301, "FocusStepCount", N_("Focus Step Count"), N_("Focus step count"), olympusFiId, makerTags, unsignedShort, -1, printValue), TagInfo(0x0303, "FocusStepInfinity", N_("Focus Step Infinity"), N_("Focus step infinity"), olympusFiId, makerTags, unsignedShort, -1, printValue), TagInfo(0x0304, "FocusStepNear", N_("Focus Step Near"), N_("Focus step near"), olympusFiId, makerTags, unsignedShort, -1, printValue), - TagInfo(0x0305, "FocusDistance", N_("Focus Distance"), N_("Focus distance"), olympusFiId, makerTags, unsignedRational, -1, printValue), + TagInfo(0x0305, "FocusDistance", N_("Focus Distance"), N_("Focus distance"), olympusFiId, makerTags, unsignedRational, -1, print0x0305), TagInfo(0x0308, "AFPoint", N_("AF Point"), N_("AF point"), olympusFiId, makerTags, unsignedShort, -1, print0x0308), TagInfo(0x1201, "ExternalFlash", N_("External Flash"), N_("External flash"), olympusFiId, makerTags, unsignedShort, -1, EXV_PRINT_TAG(olympusOffOn)), TagInfo(0x1203, "ExternalFlashGuideNumber", N_("External Flash Guide Number"), N_("External flash guide number"), olympusFiId, makerTags, signedRational, -1, printValue), @@ -1514,6 +1514,26 @@ namespace Exiv2 { return os; } // OlympusMakerNote::print0x1209 + // Olympus FocusDistance 0x0305 + std::ostream& OlympusMakerNote::print0x0305(std::ostream& os, const Value& value, const ExifData*) { + if (value.count() != 1 || value.typeId() != unsignedRational) { + return os << value; + } + + Rational distance = value.toRational(); + if(static_cast(distance.first) == 0xffffffff) { + os << _("Infinity"); + } + else { + std::ostringstream oss; + oss.copyfmt(os); + os << std::fixed << std::setprecision(2); + os << (float)distance.first/1000 << " m"; + os.copyfmt(oss); + } + return os; + } + // Olympus FocusInfo tag 0x0308 AFPoint std::ostream& OlympusMakerNote::print0x0308(std::ostream& os, const Value& value, const ExifData* metadata) diff --git a/src/olympusmn_int.hpp b/src/olympusmn_int.hpp index 848bd5f2..568eb865 100644 --- a/src/olympusmn_int.hpp +++ b/src/olympusmn_int.hpp @@ -103,6 +103,8 @@ namespace Exiv2 { static std::ostream& print0x0529(std::ostream& os, const Value& value, const ExifData*); //! Print Olympus focus info ManualFlash static std::ostream& print0x1209(std::ostream& os, const Value& value, const ExifData*); + //! Print Olympus focus distance + static std::ostream& print0x0305(std::ostream& os, const Value& value, const ExifData*); //! Print Olympus focus info AF Point static std::ostream& print0x0308(std::ostream& os, const Value& value, const ExifData*); //! Print Olympus generic