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

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:41:28 UTC 2017


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

The following commit has been merged in the master branch:
commit ffc3fd8ab91b0204fe6b7d683561e956e3b316d3
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Thu Apr 22 02:37:04 2010 +0000

    #611: Completed Sony[12] Camera Settings complex array.
---
 src/makernote.cpp     | 31 +++++++++++++++++++-----
 src/makernote_int.hpp | 16 +++++++++++--
 src/tags.cpp          |  1 +
 src/tiffcomposite.cpp |  5 ++--
 src/tiffimage.cpp     | 65 +++++++++++++++++++++++++++++++++++----------------
 src/types.hpp         |  1 +
 6 files changed, 89 insertions(+), 30 deletions(-)

diff --git a/src/makernote.cpp b/src/makernote.cpp
index 56ffafa..c373f6e 100644
--- a/src/makernote.cpp
+++ b/src/makernote.cpp
@@ -48,6 +48,9 @@ EXIV2_RCSID("@(#) $Id$")
 
 // *****************************************************************************
 namespace {
+    // Todo: Can be generalized further - get any tag as a string/long/...
+    //! Get the model name from tag Exif.Image.Model
+    std::string getExifModel(Exiv2::Internal::TiffComponent* const pRoot);
     //! Nikon en/decryption function
     void ncrypt(Exiv2::byte* pData, uint32_t size, uint32_t count, uint32_t serial);
 }
@@ -862,12 +865,8 @@ namespace Exiv2 {
         bool ok(false);
         uint32_t serial = stringTo<uint32_t>(te->pValue()->toString(), ok);
         if (!ok) {
-            // Find Exif.Image.Model
-            finder.init(0x0110, Group::ifd0);
-            pRoot->accept(finder);
-            te = dynamic_cast<TiffEntryBase*>(finder.result());
-            if (!te || !te->pValue() || te->pValue()->count() == 0) return buf;
-            std::string model = te->pValue()->toString();
+            std::string model = getExifModel(pRoot);
+            if (model.empty()) return buf;
             if (model.find("D50") != std::string::npos) {
                 serial = 0x22;
             }
@@ -881,11 +880,31 @@ namespace Exiv2 {
         return buf;
     }
 
+    int sonyCsSelector(uint16_t /*tag*/, const byte* /*pData*/, uint32_t /*size*/, TiffComponent* const pRoot)
+    {
+        std::string model = getExifModel(pRoot);
+        if (model.empty()) return -1;
+        int idx = 0;
+        if (   model.find("DSLR-A330") != std::string::npos
+            || model.find("DSLR-A380") != std::string::npos) {
+            idx = 1;
+        }
+        return idx;
+    }
 }}                                      // namespace Internal, Exiv2
 
 // *****************************************************************************
 // local definitions
 namespace {
+    std::string getExifModel(Exiv2::Internal::TiffComponent* const pRoot)
+    {
+        Exiv2::Internal::TiffFinder finder(0x0110, Exiv2::Internal::Group::ifd0); // Exif.Image.Model
+        pRoot->accept(finder);
+        Exiv2::Internal::TiffEntryBase* te = dynamic_cast<Exiv2::Internal::TiffEntryBase*>(finder.result());
+        if (!te || !te->pValue() || te->pValue()->count() == 0) return std::string();
+        return te->pValue()->toString();
+    }
+
     void ncrypt(Exiv2::byte* pData, uint32_t size, uint32_t count, uint32_t serial)
     {
         static const Exiv2::byte xlat[2][256] = {
diff --git a/src/makernote_int.hpp b/src/makernote_int.hpp
index bfc7ea5..a2f2625 100644
--- a/src/makernote_int.hpp
+++ b/src/makernote_int.hpp
@@ -111,12 +111,13 @@ namespace Exiv2 {
         const uint16_t canonfi   = 320; //!< Canon File Info
         const uint16_t sonymltmn = 330; //!< Sony Minolta Makernotes
         const uint16_t sony1cs   = 331; //!< Sony Camera Settings (in Sony1 makernote)
-        const uint16_t sony2cs   = 332; //!< Sony Camera Settings (in Sony2 makernote)
+        const uint16_t sony1cs2  = 332; //!< Sony Camera Settings 2 (in Sony1 makernote)
         const uint16_t sony1mcso = 333; //!< Minolta (old) Camera Settings (in Sony1 makernote)
         const uint16_t sony1mcsn = 334; //!< Minolta (new) Camera Settings (in Sony1 makernote)
         const uint16_t sony1mcs5 = 335; //!< Minolta D5 Camera Settings (in Sony1 makernote)
         const uint16_t sony1mcs7 = 336; //!< Minolta D7 Camera Settings (in Sony1 makernote)
-        const uint16_t sony1cs2  = 337; //!< Sony Camera Settings 2 (in Sony1 makernote)
+        const uint16_t sony2cs   = 337; //!< Sony Camera Settings (in Sony2 makernote)
+        const uint16_t sony2cs2  = 338; //!< Sony Camera Settings 2 (in Sony2 makernote)
     }
 
 // *****************************************************************************
@@ -653,6 +654,17 @@ namespace Exiv2 {
                                uint16_t mnGroup);
 
     /*!
+      @brief Function to select cfg + def of the Sony Camera Settings complex binary array.
+
+      @param tag Tag number of the binary array
+      @param pData Pointer to the raw array data.
+      @param size Size of the array data.
+      @param pRoot Pointer to the root component of the TIFF tree.
+      @return An index into the array set, -1 if no match was found.
+     */
+    int sonyCsSelector(uint16_t tag, const byte* pData, uint32_t size, TiffComponent* const pRoot);
+
+    /*!
       @brief Function to select cfg + def of a Nikon complex binary array.
 
       @param tag Tag number of the binary array
diff --git a/src/tags.cpp b/src/tags.cpp
index c4290e8..c424ef2 100644
--- a/src/tags.cpp
+++ b/src/tags.cpp
@@ -180,6 +180,7 @@ namespace Exiv2 {
         { sony1MltCsOldIfdId,"Makernote", "Sony1MltCsOld",MinoltaMakerNote::tagListCsStd },
         { sony1MltCsNewIfdId,"Makernote", "Sony1MltCsNew",MinoltaMakerNote::tagListCsStd },
         { sony2CsIfdId,      "Makernote", "Sony2Cs",      SonyMakerNote::tagListCs       },
+        { sony2Cs2IfdId,     "Makernote", "Sony2Cs2",     SonyMakerNote::tagListCs2      },
         { lastIfdId,         "(Last IFD info)", "(Last IFD item)", 0 }
     };
 
diff --git a/src/tiffcomposite.cpp b/src/tiffcomposite.cpp
index dce30e8..10c5f95 100644
--- a/src/tiffcomposite.cpp
+++ b/src/tiffcomposite.cpp
@@ -160,12 +160,13 @@ namespace Exiv2 {
         { 320, "CanonFi"      },
         { 330, "SonyMinolta"  },
         { 331, "Sony1Cs"      },
-        { 332, "Sony2Cs"      },
+        { 332, "Sony1Cs2"     },
         { 333, "Sony1MltCsOld"},
         { 334, "Sony1MltCsNew"},
         { 335, "Sony1MltCs5D" },
         { 336, "Sony1MltCs7D" },
-        { 337, "Sony1Cs2"     }
+        { 337, "Sony2Cs"      },
+        { 338, "Sony2Cs2"     },
     };
 
     bool TiffGroupInfo::operator==(const uint16_t& group) const
diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp
index f69671b..3002d69 100644
--- a/src/tiffimage.cpp
+++ b/src/tiffimage.cpp
@@ -794,6 +794,11 @@ namespace Exiv2 {
         { 146, ttSignedShort, 1 } // Exif.MinoltaCs5D.ColorTemperature
     };
 
+    // Todo: Performance of the handling of Sony Camera Settings can be
+    //       improved by defining all known array elements in the definitions
+    //       sonyCsDef and sonyCs2Def below and enabling the 'concatenate gaps'
+    //       setting in all four configurations.
+
     //! Sony1 Camera Settings binary array - configuration
     extern const ArrayCfg sony1CsCfg = {
         Group::sony1cs,   // Group for the elements
@@ -805,6 +810,21 @@ namespace Exiv2 {
         false,            // Don't concatenate gaps
         { 0, ttUnsignedShort, 1 }
     };
+    //! Sony1 Camera Settings 2 binary array - configuration
+    extern const ArrayCfg sony1Cs2Cfg = {
+        Group::sony1cs2,  // Group for the elements
+        bigEndian,        // Big endian
+        ttUndefined,      // Type for array entry and size element
+        notEncrypted,     // Not encrypted
+        false,            // No size element
+        false,            // No fillers
+        false,            // Don't concatenate gaps
+        { 0, ttUnsignedShort, 1 }
+    };
+    //! Sony[12] Camera Settings binary array - definition
+    extern const ArrayDef sonyCsDef[] = {
+        {  12, ttSignedShort,   1 }  // Exif.Sony[12]Cs.WhiteBalanceFineTune
+    };
     //! Sony2 Camera Settings binary array - configuration
     extern const ArrayCfg sony2CsCfg = {
         Group::sony2cs,   // Group for the elements
@@ -816,27 +836,30 @@ namespace Exiv2 {
         false,            // Don't concatenate gaps
         { 0, ttUnsignedShort, 1 }
     };
-    //! Sony Camera Settings binary array - definition
-    extern const ArrayDef sonyCsDef[] = {
-        {   6, ttUnsignedShort, 1 }, // Exif.Sony1Cs.DriveMode
-        {  10, ttSignedShort,   1 }  // Exif.Sony1Cs.WhiteBalanceFineTune
-    };
-
-    //! Sony1 Camera Settings 2 binary array - configuration
-    extern const ArrayCfg sony1Cs2Cfg = {
-        Group::sony1cs2,   // Group for the elements
-        bigEndian,         // Big endian
-        ttUndefined,       // Type for array entry and size element
-        notEncrypted,      // Not encrypted
-        false,             // No size element
-        false,             // No fillers
-        false,             // Don't concatenate gaps
+    //! Sony2 Camera Settings 2 binary array - configuration
+    extern const ArrayCfg sony2Cs2Cfg = {
+        Group::sony2cs2,  // Group for the elements
+        bigEndian,        // Big endian
+        ttUndefined,      // Type for array entry and size element
+        notEncrypted,     // Not encrypted
+        false,            // No size element
+        false,            // No fillers
+        false,            // Don't concatenate gaps
         { 0, ttUnsignedShort, 1 }
     };
-    //! Sony Camera Settings 2 binary array - definition
+    //! Sony[12] Camera Settings 2 binary array - definition
     extern const ArrayDef sonyCs2Def[] = {
-        {   6, ttUnsignedShort, 1 }, // Exif.Sony1Cs2.DriveMode
-        {  10, ttSignedShort,   1 }  // Exif.Sony1Cs2.WhiteBalanceFineTune
+        {  44, ttUnsignedShort, 1 } // Exif.Sony[12]Cs2.FocusMode
+    };
+    //! Sony1 Camera Settings configurations and definitions
+    extern const ArraySet sony1CsSet[] = {
+        { sony1CsCfg,  sonyCsDef,  EXV_COUNTOF(sonyCsDef)  },
+        { sony1Cs2Cfg, sonyCs2Def, EXV_COUNTOF(sonyCs2Def) }
+    };
+    //! Sony2 Camera Settings configurations and definitions
+    extern const ArraySet sony2CsSet[] = {
+        { sony2CsCfg,  sonyCsDef,  EXV_COUNTOF(sonyCsDef)  },
+        { sony2Cs2Cfg, sonyCs2Def, EXV_COUNTOF(sonyCs2Def) }
     };
 
     //! Sony Minolta Camera Settings (old) binary array - configuration
@@ -979,6 +1002,7 @@ namespace Exiv2 {
         { Tag::root, Group::sony1mcs5, Group::sonymltmn, 0x0114    },
         { Tag::root, Group::sony2mn,   Group::exif,      0x927c    },
         { Tag::root, Group::sony2cs,   Group::sony2mn,   0x0114    },
+        { Tag::root, Group::sony2cs2,  Group::sony2mn,   0x0114    },
         { Tag::root, Group::minoltamn, Group::exif,      0x927c    },
         { Tag::root, Group::minocso,   Group::minoltamn, 0x0001    },
         { Tag::root, Group::minocsn,   Group::minoltamn, 0x0003    },
@@ -1335,7 +1359,7 @@ namespace Exiv2 {
         {  Tag::all, Group::sigmamn,   newTiffEntry                              },
 
         // Sony1 makernote
-        {    0x0114, Group::sony1mn,   EXV_BINARY_ARRAY(sony1CsCfg, sonyCsDef)   },
+        {    0x0114, Group::sony1mn,   EXV_COMPLEX_BINARY_ARRAY(sony1CsSet, sonyCsSelector) },
         {    0xb028, Group::sony1mn,   newTiffSubIfd<Group::sonymltmn>           },
         { Tag::next, Group::sony1mn,   newTiffDirectory<Group::ignr>             },
         {  Tag::all, Group::sony1mn,   newTiffEntry                              },
@@ -1345,12 +1369,13 @@ namespace Exiv2 {
         {  Tag::all, Group::sony1cs2,  newTiffBinaryElement                      },
 
         // Sony2 makernote
-        {    0x0114, Group::sony2mn,   EXV_BINARY_ARRAY(sony2CsCfg, sonyCsDef)   },
+        {    0x0114, Group::sony1mn,   EXV_COMPLEX_BINARY_ARRAY(sony2CsSet, sonyCsSelector) },
         { Tag::next, Group::sony2mn,   newTiffDirectory<Group::ignr>             },
         {  Tag::all, Group::sony2mn,   newTiffEntry                              },
 
         // Sony2 camera settings
         {  Tag::all, Group::sony2cs,   newTiffBinaryElement                      },
+        {  Tag::all, Group::sony2cs2,  newTiffBinaryElement                      },
 
         // Sony1 Minolta makernote
         {    0x0001, Group::sonymltmn, EXV_SIMPLE_BINARY_ARRAY(sony1MCsoCfg)     },
diff --git a/src/types.hpp b/src/types.hpp
index 73bdd04..d8f574d 100644
--- a/src/types.hpp
+++ b/src/types.hpp
@@ -229,6 +229,7 @@ namespace Exiv2 {
         sony1CsIfdId,
         sony1Cs2IfdId,
         sony2CsIfdId,
+        sony2Cs2IfdId,
         sony1MltCs5DIfdId,
         sony1MltCs7DIfdId,
         sony1MltCsOldIfdId,

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list