[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:49 UTC 2017


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

The following commit has been merged in the master branch:
commit 97e7905a8b90fcbd5e8c440ad7d55bf8ffe007e5
Author: Robin Mills <robin at clanmills.com>
Date:   Tue Aug 30 16:33:57 2016 +0000

    #1060  Thank you to Thomas B for working on this and providing the patch.
---
 src/easyaccess.cpp        |  70 ++++++++++-
 test/Makefile             |   3 +-
 test/data/iso65k-test.out | 297 ++++++++++++++++++++++++++++++++++++++++++++++
 test/iso65k-test.sh       | 181 ++++++++++++++++++++++++++++
 4 files changed, 547 insertions(+), 4 deletions(-)

diff --git a/src/easyaccess.cpp b/src/easyaccess.cpp
index 623ac40..2fdef25 100644
--- a/src/easyaccess.cpp
+++ b/src/easyaccess.cpp
@@ -112,21 +112,85 @@ namespace Exiv2 {
             "Exif.Casio2.ISOSpeed"
         };
 
+        struct SensKeyNameList {
+            int count;
+            const char* keys[3];
+        };
+
+        // covers Exif.Phot.SensitivityType values 1-7. Note that SOS, REI and
+        // ISO do differ in their meaning. Values coming first in a list (and
+        // existing as a tag) are picked up first and used as the "ISO" value.
+        static const SensKeyNameList sensitivityKey[] = {
+            { 1, { "Exif.Photo.StandardOutputSensitivity" }},
+            { 1, { "Exif.Photo.RecommendedExposureIndex" }},
+            { 1, { "Exif.Photo.ISOSpeed" }},
+            { 2, { "Exif.Photo.RecommendedExposureIndex", "Exif.Photo.StandardOutputSensitivity" }},
+            { 2, { "Exif.Photo.ISOSpeed", "Exif.Photo.StandardOutputSensitivity" }},
+            { 2, { "Exif.Photo.ISOSpeed", "Exif.Photo.RecommendedExposureIndex" }},
+            { 3, { "Exif.Photo.ISOSpeed", "Exif.Photo.RecommendedExposureIndex", "Exif.Photo.StandardOutputSensitivity" }}
+        };
+
+        static const char* sensitivityType[] = {
+            "Exif.Photo.SensitivityType"
+        };
+
         // Find the first ISO value which is not "0"
         const int cnt = EXV_COUNTOF(keys);
         ExifData::const_iterator md = ed.end();
+        long iso_val = -1;
         for (int idx = 0; idx < cnt; ) {
             md = findMetadatum(ed, keys + idx, cnt - idx);
             if (md == ed.end()) break;
             std::ostringstream os;
             md->write(os, &ed);
             bool ok = false;
-            long v = parseLong(os.str(), ok);
-            if (ok && v != 0) break;
+            iso_val = parseLong(os.str(), ok);
+            if (ok && iso_val > 0) break;
             while (strcmp(keys[idx++], md->key().c_str()) != 0 && idx < cnt) {}
             md = ed.end();
         }
 
+        // there is either a possible ISO "overflow" or no legacy
+        // ISO tag at all. Check for SensitivityType tag and the referenced
+        // ISO value (see EXIF 2.3 Annex G)
+        long iso_tmp_val = -1;
+        while (iso_tmp_val == -1 && (iso_val == 65535 || md == ed.end())) {
+            ExifData::const_iterator md_st = ed.end();
+            md_st = findMetadatum(ed, sensitivityType, 1);
+            // no SensitivityType? exit with existing data
+            if (md_st == ed.end())
+                break;
+            // otherwise pick up actual value and grab value accordingly
+            const char *st_key = 0; // nullptr
+            std::ostringstream os;
+            md_st->write(os, &ed);
+            bool ok = false;
+            long st_val = parseLong(os.str(), ok);
+            // SensivityType out of range or cannot be parsed properly
+            if (!ok || st_val < 1 || st_val > 7)
+                break;
+            // pick up list of ISO tags, and check for at least one of
+            // them available.
+            const SensKeyNameList *sensKeys = &sensitivityKey[st_val - 1];
+            md_st = ed.end();
+            for (int idx = 0; idx < sensKeys->count; md_st = ed.end()) {
+                md_st = findMetadatum(ed, const_cast<const char**>(sensKeys->keys), sensKeys->count);
+                if (md_st == ed.end())
+                    break;
+                std::ostringstream os_iso;
+                md_st->write(os_iso, &ed);
+                ok = false;
+                iso_tmp_val = parseLong(os_iso.str(), ok);
+                // something wrong with the value
+                if (ok || iso_tmp_val > 0) {
+                    md = md_st;
+                    break;
+                }
+                while (strcmp(sensKeys->keys[idx++], md_st->key().c_str()) != 0 && idx < cnt) {}
+            }
+            break;
+        }
+
         return md;
     }
 
@@ -266,7 +330,7 @@ namespace Exiv2 {
     {
         static const char* keys[] = {
             // Exif.Canon.LensModel only reports focal length.
-            // Try Exif.CanonCs.LensType first. 
+            // Try Exif.CanonCs.LensType first.
             "Exif.CanonCs.LensType",
             "Exif.Photo.LensModel",
             "Exif.NikonLd1.LensIDNumber",
diff --git a/test/Makefile b/test/Makefile
index 8957db9..b7cb05b 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -78,7 +78,8 @@ TESTS  = addmoddel.sh         \
          write-test.sh        \
          write2-test.sh       \
          xmpparser-test.sh    \
-         conversions.sh
+         conversions.sh       \
+         iso65k-test.sh
 
 # video tests
 TESTV  = video-test.sh
diff --git a/test/data/iso65k-test.out b/test/data/iso65k-test.out
new file mode 100644
index 0000000..dbb8fe0
--- /dev/null
+++ b/test/data/iso65k-test.out
@@ -0,0 +1,297 @@
+------> iso65k test 0001 <-------
+File name       : exiv2-iso65k-0001.jpg
+File size       : 4799 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 60001
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0002 <-------
+File name       : exiv2-iso65k-0002.jpg
+File size       : 4823 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 60002
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0003 <-------
+File name       : exiv2-iso65k-0003.jpg
+File size       : 4799 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 65534
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0004 <-------
+File name       : exiv2-iso65k-0004.jpg
+File size       : 4799 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 65535
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0005 <-------
+File name       : exiv2-iso65k-0005.jpg
+File size       : 4811 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 65535
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0006 <-------
+File name       : exiv2-iso65k-0006.jpg
+File size       : 4811 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 65535
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0007 <-------
+File name       : exiv2-iso65k-0007.jpg
+File size       : 4811 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 65535
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0008 <-------
+File name       : exiv2-iso65k-0008.jpg
+File size       : 4823 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 65530
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0009 <-------
+File name       : exiv2-iso65k-0009.jpg
+File size       : 4823 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 65536
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0010 <-------
+File name       : exiv2-iso65k-0010.jpg
+File size       : 4811 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 60010
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
+------> iso65k test 0011 <-------
+File name       : exiv2-iso65k-0011.jpg
+File size       : 4811 Bytes
+MIME type       : image/jpeg
+Image size      : 150 x 91
+Camera make     : 
+Camera model    : 
+Image timestamp : 
+Image number    : 
+Exposure time   : 
+Aperture        : 
+Exposure bias   : 
+Flash           : 
+Flash bias      : 
+Focal length    : 
+Subject distance: 
+ISO speed       : 100011
+Exposure mode   : 
+Metering mode   : 
+Macro mode      : 
+Image quality   : 
+Exif Resolution : 
+White balance   : 
+Thumbnail       : None
+Copyright       : 
+Exif comment    : 
+
diff --git a/test/iso65k-test.sh b/test/iso65k-test.sh
new file mode 100755
index 0000000..03bc049
--- /dev/null
+++ b/test/iso65k-test.sh
@@ -0,0 +1,181 @@
+#!/bin/bash
+# test for ISOs which follow Annex G of EXIF 2.3 spec, i.e. ISOs,
+# which cannot be represented by Exif.Photo.ISOSpeedRatings due to
+# being larger than 65k
+
+# All tests use the summary view as a result-check, because it uses
+# the isoSpeed() "easyaccess" function, which handles the higher ISO
+# readout.
+#
+# Tests getting executed:
+# 
+
+source ./functions.source
+
+(	cd "$testdir"
+
+	num=0001
+	# Checks for old way of ISO readout based on the 16bit value
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to something <65k
+	# output:
+	# - value of Exif.Photo.ISOSpeedRatings
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 60001'            $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0002
+	# Old ISO is read out first, so if it doesn't indicate that
+	# some higher ISO is used, the 16bit value should be returned,
+	# ignoring the other tags (for now)
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to something <65k
+	# - Exif.Photo.SensitivityType being set to "REI"
+	# - Exif.Photo.RecommendedExposureIndex being set to != ISOSpeedRatings
+	# output:
+	# - value of Exif.Photo.ISOSpeedRatings
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 60002'            $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
+	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 444444'  $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0003
+	# Corner case check (highest ISO value not indicating possible
+	# 16bit overflow in ISO)
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to 65534
+	# output:
+	# - value of Exif.Photo.ISOSpeedRatings
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65534'            $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0004
+	# Corner case check (ISO value indicating possible overflow,
+	# but no additional informations available)
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to 65535
+	# - Exif.Photo.SensitivityType NOT SET
+	# output:
+	# - value of Exif.Photo.ISOSpeedRatings
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0005
+	# possible ISO value overflow, but additional information not valid
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to 65535
+	# - Exif.Photo.SensitivityType being set to 0
+	# output:
+	# - value of Exif.Photo.ISOSpeedRatings
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 0'                $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0006
+	# possible ISO value overflow, but additional information not valid
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to 65535
+	# - Exif.Photo.SensitivityType being set to 8
+	# output:
+	# - value of Exif.Photo.ISOSpeedRatings
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 8'                $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0007
+	# possible ISO value overflow, but additional information partially valid
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to 65535
+	# - Exif.Photo.SensitivityType being set to 2 ("REI")
+	# - Exif.Photo.RecommendedExposureIndex NOT SET
+	# output:
+	# - value of Exif.Photo.ISOSpeedRatings
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0008
+	# ISO value overflow, REI contains same value as 16bit ISO, though
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to 65535
+	# - Exif.Photo.SensitivityType being set to 2 ("REI")
+	# - Exif.Photo.RecommendedExposureIndex set to 65530
+	# output:
+	# - value of Exif.Photo.RecommendedExposureIndex
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
+	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 65530'   $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0009
+	# ISO value overflow, REI contains 16bit ISO value +1
+	# input:
+	# - Exif.Photo.ISOSpeedRatings being set to 65535
+	# - Exif.Photo.SensitivityType being set to 2 ("REI")
+	# - Exif.Photo.RecommendedExposureIndex set to 65536
+	# output:
+	# - value of Exif.Photo.RecommendedExposureIndex
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
+	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 65536'   $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0010
+	# old ISO not set
+	# input:
+	# - Exif.Photo.ISOSpeedRatings is NOT SET
+	# - Exif.Photo.SensitivityType being set to 2 ("REI")
+	# - Exif.Photo.RecommendedExposureIndex set to <65k
+	# output:
+	# - value of Exif.Photo.RecommendedExposureIndex
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
+	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 60010'   $filename
+	runTest exiv2 -ps                                                 $filename
+
+	num=0011
+	# old ISO not set
+	# input:
+	# - Exif.Photo.ISOSpeedRatings is NOT SET
+	# - Exif.Photo.SensitivityType being set to 2 ("REI")
+	# - Exif.Photo.RecommendedExposureIndex set to >65k
+	# output:
+	# - value of Exif.Photo.RecommendedExposureIndex
+	echo '------>' iso65k test $num '<-------' >&2
+	filename=exiv2-iso65k-$num.jpg
+	copyTestFile exiv2-empty.jpg $filename
+	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
+	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 100011'  $filename
+	runTest exiv2 -ps                                                 $filename
+
+) > $testdir/iso65k-test.out 2>&1
+
+reportTest

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list