[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:45:48 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=cb48ead

The following commit has been merged in the master branch:
commit cb48ead0071f8e391e29a908fb1864d3b997ec28
Author: Robin Mills <robin at clanmills.com>
Date:   Wed Sep 30 08:21:37 2015 +0000

    #1122  Thank You, Steve for the patch.
---
 src/canonmn.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 56 insertions(+), 13 deletions(-)

diff --git a/src/canonmn.cpp b/src/canonmn.cpp
index b33edfd..9050b89 100644
--- a/src/canonmn.cpp
+++ b/src/canonmn.cpp
@@ -66,6 +66,9 @@ namespace Exiv2 {
     std::ostream& printCsLensByFocalLength(std::ostream& os,
                                            const Value& value,
                                            const ExifData* metadata);
+    std::ostream& printCsLensByFocalLengthTC(std::ostream& os,
+                                           const Value& value,
+                                           const ExifData* metadata);
 
     //! ModelId, tag 0x0010
     extern const TagDetails canonModelId[] = {
@@ -803,6 +806,7 @@ namespace Exiv2 {
         { 173, "Canon EF 180mm Macro f/3.5L"                                }, // 0
         { 173, "Sigma 180mm EX HSM Macro f/3.5"                             }, // 1
         { 173, "Sigma APO Macro 150mm f/3.5 EX DG IF HSM"                   }, // 2
+        { 173, "Sigma 150-500mm f/5-6.3 APO DG OS HSM + 2x"                 }, // 3
         { 174, "Canon EF 135mm f/2L"                                        }, // 0
         { 174, "Sigma 70-200mm f/2.8 EX DG APO OS HSM"                      }, // 1
         { 174, "Sigma 50-500mm f/4.5-6.3 APO DG OS HSM"                     }, // 2
@@ -963,7 +967,7 @@ namespace Exiv2 {
         { 161, printCsLensByFocalLength },
         { 169, printCsLensByFocalLength },
         { 172, printCsLensByFocalLength }, // not tested
-        { 173, printCsLensByFocalLength }, // works partly
+        { 173, printCsLensByFocalLengthTC }, // works partly
         { 174, printCsLensByFocalLength }, // not tested
         { 180, printCsLensByFocalLength },
         { 183, printCsLensByFocalLength }, // not tested
@@ -1561,7 +1565,9 @@ namespace Exiv2 {
     //! Helper structure
     struct LensTypeAndFocalLengthAndMaxAperture {
         long        lensType_;                  //!< Lens type
-        std::string focalLength_;               //!< Focal length
+        float       focalLengthMin_;            //!< Mininum focal length
+        float       focalLengthMax_;            //!< Maximum focal length
+        std::string focalLength_;               //!< Focal length as a string
         std::string maxAperture_;               //!< Aperture
     };
 
@@ -1577,25 +1583,32 @@ namespace Exiv2 {
     {
         ExifKey key("Exif.CanonCs.Lens");
         ExifData::const_iterator pos = metadata->findKey(key);
+        ltfl.focalLengthMin_ = 0.0;
+        ltfl.focalLengthMax_ = 0.0;
         if (   pos != metadata->end()
             && pos->value().count() >= 3
             && pos->value().typeId() == unsignedShort) {
             float fu = pos->value().toFloat(2);
             if (fu != 0.0) {
-                float len1 = pos->value().toLong(0) / fu;
-                float len2 = pos->value().toLong(1) / fu;
-                std::ostringstream oss;
-                oss << std::fixed << std::setprecision(0);
-                if (len1 == len2) {
-                    oss << len1 << "mm";
-                } else {
-                    oss << len2 << "-" << len1 << "mm";
-                }
-                ltfl.focalLength_ = oss.str();
+                ltfl.focalLengthMin_ = pos->value().toLong(1) / fu;
+                ltfl.focalLengthMax_ = pos->value().toLong(0) / fu;
             }
         }
     }
 
+    void convertFocalLength(LensTypeAndFocalLengthAndMaxAperture& ltfl,
+                            double divisor)
+    {
+        std::ostringstream oss;
+        oss << std::fixed << std::setprecision(0);
+        if (ltfl.focalLengthMin_ == ltfl.focalLengthMax_) {
+            oss << (ltfl.focalLengthMin_ / divisor) << "mm";
+        } else {
+            oss << (ltfl.focalLengthMin_ / divisor) << "-" << (ltfl.focalLengthMax_ / divisor) << "mm";
+        }
+        ltfl.focalLength_ = oss.str();
+    }
+
     std::ostream& printCsLensByFocalLengthAndMaxAperture(std::ostream& os,
                                            const Value& value,
                                            const ExifData* metadata)
@@ -1607,7 +1620,8 @@ namespace Exiv2 {
         ltfl.lensType_ = value.toLong();
 
         extractLensFocalLength(ltfl, metadata);
-        if (ltfl.focalLength_.empty()) return os << value;
+        if (ltfl.focalLengthMax_ == 0.0) return os << value;
+        convertFocalLength(ltfl, 1.0);
 
         ExifKey key("Exif.CanonCs.MaxAperture");
         ExifData::const_iterator pos = metadata->findKey(key);
@@ -1642,6 +1656,9 @@ namespace Exiv2 {
         ltfl.lensType_ = value.toLong();
 
         extractLensFocalLength(ltfl, metadata);
+        if (ltfl.focalLengthMax_ == 0.0) return os << value;
+        convertFocalLength(ltfl, 1.0);
+
         if (ltfl.focalLength_.empty()) return os << value;
 
         const TagDetails* td = find(canonCsLensType, ltfl);
@@ -1649,6 +1666,32 @@ namespace Exiv2 {
         return os << td->label_;
     }
 
+    std::ostream& printCsLensByFocalLengthTC(std::ostream& os,
+                                             const Value& value,
+                                             const ExifData* metadata)
+    {
+        if (   !metadata || value.typeId() != unsignedShort
+            || value.count() == 0) return os << value;
+
+        LensTypeAndFocalLengthAndMaxAperture ltfl;
+        ltfl.lensType_ = value.toLong();
+
+        extractLensFocalLength(ltfl, metadata);
+        if (ltfl.focalLengthMax_ == 0.0) return os << value;
+        convertFocalLength(ltfl, 1.0); // just lens
+        const TagDetails* td = find(canonCsLensType, ltfl);
+        if (!td) {
+            convertFocalLength(ltfl, 1.4); // lens + 1.4x TC
+            td = find(canonCsLensType, ltfl);
+            if (!td) {
+                convertFocalLength(ltfl, 2.0); // lens + 2x TC
+                td = find(canonCsLensType, ltfl);
+                if (!td) return os << value;
+            }
+        }
+        return os << td->label_;
+    }
+
     std::ostream& CanonMakerNote::printCsLensType(std::ostream& os,
                                                   const Value& value,
                                                   const ExifData* metadata)

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list