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

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:46:09 UTC 2017


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

The following commit has been merged in the master branch:
commit 77ae982cd40f4d036f3b934f8d110cc646f0c723
Author: Robin Mills <robin at clanmills.com>
Date:   Mon Dec 28 10:47:43 2015 +0000

    #1145.  Thank You, Michael for providing the test files.  I will extract the metadata from your files and add it to the test suite after you have tested this code.
---
 src/minoltamn.cpp | 265 ++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 207 insertions(+), 58 deletions(-)

diff --git a/src/minoltamn.cpp b/src/minoltamn.cpp
index 6ea8d18..f1e9659 100644
--- a/src/minoltamn.cpp
+++ b/src/minoltamn.cpp
@@ -1654,9 +1654,9 @@ namespace Exiv2 {
                  "Sigma 30mm F1.4 DG EX | "
                  "Sigma 24mm F1.8 EX DG ASP Macro" },
         { 27,    "Minolta AF 85mm F1.4 G (D)" },
-        { 28,    "Minolta/Sony AF 100mm F2.8 Macro (D) | "
-                 "Tamron SP AF 90mm F2.8 Di Macro | "
-                 "Tamron SP AF 180mm F3.5 SP Di LD [IF] Macro" },
+        {0x1c,   "Minolta/Sony AF 100mm F2.8 Macro (D) | "                               // 1
+                 "Tamron SP AF 90mm F2.8 Di Macro | "                                    // 2
+                 "Tamron SP AF 180mm F3.5 SP Di LD [IF] Macro" },                        // 3
         { 29,    "Minolta/Sony AF 75-300mm F4.5-5.6 (D) " },
         { 30,    "Minolta AF 28-80mm F3.5-5.6 (D) | "
                  "Sigma AF 10-20mm F4-5.6 EX DC | "
@@ -1674,8 +1674,8 @@ namespace Exiv2 {
         { 39,    "Minolta AF 28-75mm F2.8 (D)" },
         { 40,    "Minolta/Sony AF DT 18-70mm F3.5-5.6 (D) | "
                  "Sony AF DT 18-200mm F3.5-6.3" },
-        { 41,    "Minolta/Sony AF DT 11-18mm F4.5-5.6 (D) | "
-                 "Tamron SP AF 11-18mm F4.5-5.6 Di II LD Aspherical IF" },
+        {0x29,   "Minolta/Sony AF DT 11-18mm F4.5-5.6 (D) | "                            // 1
+                 "Tamron SP AF 11-18mm F4.5-5.6 Di II LD Aspherical IF" },               // 2
         { 42,    "Minolta/Sony AF DT 18-200mm F3.5-6.3 (D)" },
         { 43,    "Sony 35mm F1.4 G (SAL35F14G)" },
         { 44,    "Sony 50mm F1.4 (SAL50F14)" },
@@ -1688,9 +1688,10 @@ namespace Exiv2 {
         { 50,    "Sony AF DT 18-250mm F3.5-6.3 (SAL18250)" },
         { 51,    "Sony AF DT 16-105mm F3.5-5.6 (SAL16105)" },
 //      { 51,    "Sony AF DT 55-200mm F4-5.5" }, // Anomaly? - unconfirmed.
-        { 52,    "Sony 70-300mm F4.5-5.6 G SSM (SAL70300G) | "
-                 "Sony 70-300mm F4.5-5.6 G SSM II (SAL70300G2) | "
-                 "Tamron SP 70-300mm F4-5.6 Di USD" },
+        {0x34,   "Sony 70-300mm F4.5-5.6 G SSM (SAL70300G) | "                           // 1
+                 "Sony 70-300mm F4.5-5.6 G SSM II (SAL70300G2) | "                       // 2
+                 "Tamron SP 70-300mm F4-5.6 Di USD | "                                   // 3
+                 "Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical"},                    // 4
         { 53,    "Sony AF 70-400mm F4.5-5.6 G SSM (SAL70400G)" },
         { 54,    "Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM (SAL1635Z) | "
                  "Carl Zeiss Vario-Sonnar T* 16-35mm F2.8 ZA SSM II (SAL1635Z2)" },
@@ -1713,27 +1714,27 @@ namespace Exiv2 {
         { 68,    "Sony DT 55-300mm F4.5-5.6 SAM (SAL55300)" },
         { 69,    "Sony 70-400mm F4-5.6 G SSM II (SAL70400G2)" },
         { 70,    "Sony Carl Zeiss Planar T* 50mm F1.4 ZA SSM (SALF0F14Z)" },
-        { 128,   "Sigma 70-200mm F2.8 APO EX DG MACRO | "
-                 "Tamron AF 18-200mm F3.5-6.3 XR Di II LD Aspherical [IF] Macro | "
-                 "Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro | "
-                 "Tamron 80-300mm F3.5-6.3 | "
-                 "Tamron AF 28-200mm F3.8-5.6 XR Di Aspherical [IF] MACRO | "
-                 "Tamron SP AF 17-35mm F2.8-4 Di LD Aspherical IF | "
-                 "Sigma AF 50-150mm F2.8 EX DC APO HSM II | "
-                 "Sigma 10-20mm F3.5 EX DC HSM | "
-                 "Sigma 70-200mm F2.8 II EX DG APO MACRO HSM | "
-                 "Sigma 10mm F2.8 EX DC HSM Fisheye | "
-                 "Sigma 50mm F1.4 EX DG HSM | "
-                 "Sigma 85mm F1.4 EX DG HSM | "
-                 "Sigma 24-70mm F2.8 IF EX DG HSM | "
-                 "Sigma 18-250mm F3.5-6.3 DC OS HSM | "
-                 "Sigma 17-50mm F2.8 EX DC HSM | "
-                 "Sigma 17-70mm F2.8-4 DC Macro HSM | "
-                 "Sigma 150mm F2.8 EX DG OS HSM APO Macro | "
-                 "Sigma 150-500mm F5-6.3 APO DG OS HSM | "
-                 "Tamron AF 28-105mm F4-5.6 [IF] | "
-                 "Sigma 35mm F1.4 DG HSM | "
-                 "Sigma 18-35mm F1.8 DC HSM" },
+        {0x80,   "Sigma 70-200mm F2.8 APO EX DG MACRO | "                                // 1
+                 "Tamron AF 18-200mm F3.5-6.3 XR Di II LD Aspherical [IF] Macro | "      // 2
+                 "Tamron AF 28-300mm F3.5-6.3 XR Di LD Aspherical [IF] Macro | "         // 3
+                 "Tamron 80-300mm F3.5-6.3 | "                                           // 4
+                 "Tamron AF 28-200mm F3.8-5.6 XR Di Aspherical [IF] MACRO | "            // 5
+                 "Tamron SP AF 17-35mm F2.8-4 Di LD Aspherical IF | "                    // 6
+                 "Sigma AF 50-150mm F2.8 EX DC APO HSM II | "                            // 7
+                 "Sigma 10-20mm F3.5 EX DC HSM | "                                       // 8
+                 "Sigma 70-200mm F2.8 II EX DG APO MACRO HSM | "                         // 9
+                 "Sigma 10mm F2.8 EX DC HSM Fisheye | "                                  // 10
+                 "Sigma 50mm F1.4 EX DG HSM | "                                          // 11
+                 "Sigma 85mm F1.4 EX DG HSM | "                                          // 12
+                 "Sigma 24-70mm F2.8 IF EX DG HSM | "                                    // 13
+                 "Sigma 18-250mm F3.5-6.3 DC OS HSM | "                                  // 14
+                 "Sigma 17-50mm F2.8 EX DC HSM | "                                       // 15
+                 "Sigma 17-70mm F2.8-4 DC Macro HSM | "                                  // 16
+                 "Sigma 150mm F2.8 EX DG OS HSM APO Macro | "                            // 17
+                 "Sigma 150-500mm F5-6.3 APO DG OS HSM | "                               // 18
+                 "Tamron AF 28-105mm F4-5.6 [IF] | "                                     // 19
+                 "Sigma 35mm F1.4 DG HSM | "                                             // 20
+                 "Sigma 18-35mm F1.8 DC HSM" },                                          // 21
         { 129,   "Tamron 200-400mm F5.6 LD | "
                  "Tamron 70-300mm F4-5.6 LD" },
         { 131,   "Tamron 20-40mm F2.7-3.5 SP Aspherical IF" },
@@ -1751,15 +1752,15 @@ namespace Exiv2 {
         { 213,   "Tamron 16-300mm F3.5-6.3 Di II PZD" },
         { 214,   "Tamron Tamron SP 150-600mm F5-6.3 Di USD" },
         { 224,   "Tamron SP 90mm F2.8 Di Macro 1:1 USD" },
-        { 255,   "Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical | "
-                 "Tamron AF 18-250mm F3.5-6.3 XR Di II LD | "
-                 "Tamron AF 55-200mm F4-5.6 Di II LD Macro | "
-                 "Tamron AF 70-300mm F4-5.6 Di LD Macro 1:2 | "
-                 "Tamron SP AF 200-500mm F5.0-6.3 Di LD IF | "
-                 "Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical IF | "
-                 "Tamron SP AF 70-200mm F2.8 Di LD IF Macro | "
-                 "Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical IF | "
-                 "Tamron AF 90-300mm F4.5-5.6 Telemacro" },
+        {0xff,   "Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical | "                   // 1
+                 "Tamron AF 18-250mm F3.5-6.3 XR Di II LD | "                            // 2
+                 "Tamron AF 55-200mm F4-5.6 Di II LD Macro | "                           // 3
+                 "Tamron AF 70-300mm F4-5.6 Di LD Macro 1:2 | "                          // 4
+                 "Tamron SP AF 200-500mm F5.0-6.3 Di LD IF | "                           // 5
+                 "Tamron SP AF 10-24mm F3.5-4.5 Di II LD Aspherical IF | "               // 6
+                 "Tamron SP AF 70-200mm F2.8 Di LD IF Macro | "                          // 7
+                 "Tamron SP AF 28-75mm F2.8 XR Di LD Aspherical IF | "                   // 8
+                 "Tamron AF 90-300mm F4.5-5.6 Telemacro"},                               // 9
         { 25500, "Minolta AF 50mm F1.7" },
         { 25501, "Minolta AF 50mm F1.7" },
         { 25510, "Minolta AF 35-70mm F4" },
@@ -1931,15 +1932,10 @@ namespace Exiv2 {
 
     // ----------------------------------------------------------------------
     // #1145 begin - respect lenses with shared LensID
-    static std::string getKey(const std::string& key,const ExifData* metadata)
-    {
-		return metadata->findKey(ExifKey(key)) != metadata->end()
-			 ? metadata->findKey(ExifKey(key))->toString()
-			 : ""
-			 ;
-    }
 
-	// this code has been debugged on the Mac, however it's not in service because:
+#if 0
+	// resolveLensTypeUsingExiftool has been debugged on the Mac
+	// It's not in service because:
 	// 1 we don't know the path to the file being processed
 	// 2 can't work for a remote file as exiftool doesn't handle remote IO
 	// 3 almost certainly throws an ugly ugly dos box on the screen in Windows
@@ -1966,21 +1962,170 @@ namespace Exiv2 {
 #endif
     	return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
     }
+#endif
+
+    static std::string getKeyString(const std::string& key,const ExifData* metadata)
+    {
+		std::string result;
+		if ( metadata->findKey(ExifKey(key)) != metadata->end() ) {
+			result = metadata->findKey(ExifKey(key))->toString();
+		}
+		return result;
+    }
+
+    static long getKeyLong(const std::string& key,const ExifData* metadata,int which=0);
+    static long getKeyLong(const std::string& key,const ExifData* metadata,int which)
+    {
+		long result = -1;
+		if ( metadata->findKey(ExifKey(key)) != metadata->end() ) {
+			result = (long) metadata->findKey(ExifKey(key))->toFloat(which);
+		}
+		return result;
+    }
+
+    // http://stackoverflow.com/questions/1798112/removing-leading-and-trailing-spaces-from-a-string
+	// trim from left
+	inline std::string& ltrim(std::string& s, const char* t = " 	



")
+	{
+		s.erase(0, s.find_first_not_of(t));
+		return s;
+	}
+
+	// trim from right
+	inline std::string& rtrim(std::string& s, const char* t = " 	



")
+	{
+		s.erase(s.find_last_not_of(t) + 1);
+		return s;
+	}
+
+	// trim from left & right
+	inline std::string& trim(std::string& s, const char* t = " 	



")
+	{
+		return ltrim(rtrim(s, t), t);
+	}
+
+	// http://www.sbin.org/doc/HOWTO/C++Programming-HOWTO-7.html
+	static void tokenize(const std::string& str,
+						  std::vector<std::string>& tokens,
+						  const std::string& delimiters = " ")
+	{
+		// Skip delimiters at beginning.
+		std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
+		// Find first "non-delimiter".
+		std::string::size_type pos     = str.find_first_of(delimiters, lastPos);
+
+		while (std::string::npos != pos || std::string::npos != lastPos)
+		{
+			// Found a token, add it to the vector.
+			tokens.push_back(str.substr(lastPos, pos - lastPos));
+			// Skip delimiters.  Note the "not_of"
+			lastPos = str.find_first_not_of(delimiters, pos);
+			// Find next "non-delimiter"
+			pos = str.find_first_of(delimiters, lastPos);
+		}
+	}
+
+    static bool inRange(long value,long min,long max)
+    {
+    	return min <= value && value <= max;
+    }
+
+	static std::ostream& resolvedLens(std::ostream& os,long lensID,long index)
+	{
+	    const TagDetails* td = find(minoltaSonyLensID, lensID);
+        std::vector<std::string> tokens;
+        tokenize(td[0].label_,tokens,"|");
+        return os << exvGettext(trim(tokens[index-1]).c_str());
+    }
 
-    static std::ostream& resolveLensTypeTamron(std::ostream& os, const Value& value,
+    static std::ostream& resolveLens0x1c(std::ostream& os, const Value& value,
                                                  const ExifData* metadata)
     {
         try {
-            long lensID = value.toLong();
+			long lensID = 0x1c;
+			long index  = 0;
+
+			std::string model   = getKeyString("Exif.Image.Model"    ,metadata);
+			std::string lens    = getKeyString("Exif.Photo.LensModel",metadata);
+
+			if ( model == "SLT-A77V" && lens == "100mm F2.8 Macro" ) index=2;
+
+            if ( index > 0 ) return resolvedLens(os,lensID,index);
+        } catch (...) {}
+        return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
+    }
+
+    static std::ostream& resolveLens0x29(std::ostream& os, const Value& value,
+                                                 const ExifData* metadata)
+    {
+        try {
+			long lensID = 0x29;
+			long index  = 0;
+
+			std::string model   = getKeyString("Exif.Image.Model"    ,metadata);
+			std::string lens    = getKeyString("Exif.Photo.LensModel",metadata);
+
+			if ( model == "SLT-A77V" && lens == "DT 11-18mm F4.5-5.6" ) index=2;
+
+            if ( index > 0 ) return resolvedLens(os,lensID,index);
+        } catch (...) {}
+        return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
+    }
+
+    static std::ostream& resolveLens0x34(std::ostream& os, const Value& value,
+                                                 const ExifData* metadata)
+    {
+        try {
+			long lensID = 0x34;
+			long index  = 0;
+
+			std::string model       = getKeyString("Exif.Image.Model"            ,metadata);
+			std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
+			long        focalLength = getKeyLong  ("Exif.Photo.FocalLength"      ,metadata);
+			std::string F2_8        = "760/256" ;
+
+			if ( model == "SLT-A77V" && maxAperture == F2_8           ) index=4;
+			if ( model == "SLT-A77V" && inRange(focalLength,70,300)   ) index=3;
+
+            if ( index > 0 ) return resolvedLens(os,lensID,index);
+        } catch (...) {}
+        return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
+    }
+
+    static std::ostream& resolveLens0x80(std::ostream& os, const Value& value,
+                                                 const ExifData* metadata)
+    {
+        try {
+			long lensID = 0x80;
+			long index  = 0;
+
+			std::string model       = getKeyString("Exif.Image.Model"    ,metadata);
+			std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
+			long        focalLength = getKeyLong  ("Exif.Photo.FocalLength"      ,metadata);
+			std::string F4          = "1024/256";
+
+			if ( model == "SLT-A77V" && maxAperture == F4  && inRange(focalLength,18,200) ) index=2;
+
+            if ( index > 0 ) return resolvedLens(os,lensID,index);
+        } catch (...) {}
+        return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
+    }
+
+    static std::ostream& resolveLens0xff(std::ostream& os, const Value& value,
+                                                 const ExifData* metadata)
+    {
+        try {
+            long lensID = 0xff;
+            long index  = 0   ;
+
+			std::string model       = getKeyString("Exif.Image.Model"            ,metadata);
+			long        focalLength = getKeyLong  ("Exif.Photo.FocalLength"      ,metadata);
+			std::string maxAperture = getKeyString("Exif.Photo.MaxApertureValue" ,metadata);
+			std::string F2_8        = "760/256" ;
 
-            if ( lensID == 0xff ) {
-				std::string modelID     = getKey("Exif.Sony1.SonyModelID"      ,metadata);
-				std::string maxAperture = getKey("Exif.Photo.MaxApertureValue" ,metadata);
+			if ( model == "SLT-A77V" && maxAperture == F2_8 && inRange(focalLength,17,50) ) index = 1 ;
 
-				if ( modelID == "287" && maxAperture == "760/256" ) {  // "SLT-A77 / SLT-A77V" && F2.8
-					return os << "Tamron SP AF 17-50mm F2.8 XR Di II LD Aspherical";
-				}
-			}
+            if ( index > 0 ) return resolvedLens(os,lensID,index);
         } catch (...) {}
         return EXV_PRINT_TAG(minoltaSonyLensID)(os, value, metadata);
     }
@@ -1994,8 +2139,12 @@ namespace Exiv2 {
 
     //! List of lens ids which require special treatment from printMinoltaSonyLensID
     const LensIdFct lensIdFct[] = {
-       {   0x00ff, resolveLensTypeTamron },
-       {   0xf0ff, resolveLensTypeUsingExiftool }, // was used for debugging
+       {   0x001c, resolveLens0x1c },
+       {   0x0029, resolveLens0x29 },
+       {   0x0034, resolveLens0x34 },
+       {   0x0080, resolveLens0x80 },
+       {   0x00ff, resolveLens0xff },
+//     {   0x00ff, resolveLensTypeUsingExiftool }, // was used for debugging
     };
     // #1145 end - respect lenses with shared LensID
     // ----------------------------------------------------------------------
@@ -2005,7 +2154,7 @@ namespace Exiv2 {
         // #1145 - respect lenses with shared LensID
         unsigned long    index = value.toLong();
         const LensIdFct* lif   = find(lensIdFct,index);
-        if ( lif && metadata && index != 0xf0ff ) {
+        if ( lif && metadata ) {
         	if ( lif->fct_ )
         	    return lif->fct_(os, value, metadata);
         }

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list