File 90_changeset_r2998.diff of Package exiv2

Index: trunk/src/olympusmn.cpp
===================================================================
--- trunk/src/olympusmn.cpp	(revision 2997)
+++ trunk/src/olympusmn.cpp	(revision 2998)
@@ -1005,7 +1005,7 @@
         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 @@
         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<uint32_t>(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)
Index: trunk/src/olympusmn_int.hpp
===================================================================
--- trunk/src/olympusmn_int.hpp	(revision 2997)
+++ trunk/src/olympusmn_int.hpp	(revision 2998)
@@ -103,6 +103,8 @@
         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
openSUSE Build Service is sponsored by