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

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:35:56 UTC 2017


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

The following commit has been merged in the master branch:
commit 9a35a619e4ad36871f7169e74647f390400cbf6e
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Sun Jan 25 16:55:46 2004 +0000

    Rewrote Thumbnail::read(), added ExifData::findKey, cleanup
---
 src/exif.cpp | 89 ++++++++++++++++++++++++++++++------------------------------
 1 file changed, 44 insertions(+), 45 deletions(-)

diff --git a/src/exif.cpp b/src/exif.cpp
index c1a0c87..a558605 100644
--- a/src/exif.cpp
+++ b/src/exif.cpp
@@ -25,7 +25,7 @@
 
   RCS information
    $Name:  $
-   $Revision: 1.6 $
+   $Revision: 1.7 $
  */
 // *****************************************************************************
 // included header files
@@ -295,13 +295,13 @@ namespace Exif {
     }
 
     Metadatum::Metadatum()
-        : tag_(0), type_(0), ifdId_(IfdIdNotSet), ifdIdx_(-1), value_(0)
+        : tag_(0), ifdId_(IfdIdNotSet), ifdIdx_(-1), value_(0)
     {
     }
 
     Metadatum::Metadatum(uint16 tag, uint16 type, 
                          IfdId ifdId, int ifdIdx, Value* value)
-        : tag_(tag), type_(type), ifdId_(ifdId), ifdIdx_(ifdIdx), value_(value)
+        : tag_(tag), ifdId_(ifdId), ifdIdx_(ifdIdx), value_(value)
     {
         key_ = std::string(ifdItem()) 
             + "." + std::string(sectionName()) 
@@ -314,21 +314,16 @@ namespace Exif {
     }
 
     Metadatum::Metadatum(const Metadatum& rhs)
+        : tag_(rhs.tag_), ifdId_(rhs.ifdId_), ifdIdx_(rhs.ifdIdx_), 
+          value_(0), key_(rhs.key_)
     {
-        tag_ = rhs.tag_;
-        type_ = rhs.type_;
-        ifdId_ = rhs.ifdId_;
-        ifdIdx_ = rhs.ifdIdx_;
-        value_ = 0;
         if (rhs.value_ != 0) value_ = rhs.value_->clone(); // deep copy
-        key_ = rhs.key_;
     }
 
     Metadatum& Metadatum::operator=(const Metadatum& rhs)
     {
         if (this == &rhs) return *this;
         tag_ = rhs.tag_;
-        type_ = rhs.type_;
         ifdId_ = rhs.ifdId_;
         ifdIdx_ = rhs.ifdIdx_;
         delete value_;
@@ -356,18 +351,14 @@ namespace Exif {
     }
 
     Ifd::Entry::Entry(const Entry& rhs)
+        : ifdIdx_(rhs.ifdIdx_), tag_(rhs.tag_), type_(rhs.type_),
+          count_(rhs.count_), offset_(rhs.offset_), 
+          data_(0), size_(rhs.size_)
     {
-        ifdIdx_ = rhs.ifdIdx_;
-        tag_ = rhs.tag_;
-        type_ = rhs.type_;
-        count_ = rhs.count_;
-        offset_ = rhs.offset_;
-        data_ = 0;
         if (rhs.data_) {
             data_ = new char[rhs.size_];
             ::memcpy(data_, rhs.data_, rhs.size_);
         }
-        size_ = rhs.size_;
     }
 
     Ifd::Entry::Entry& Ifd::Entry::operator=(const Entry& rhs)
@@ -574,33 +565,35 @@ namespace Exif {
 
     } // Ifd::print
 
-    // Todo: implement this properly..
-    //       - Tag values 0x0201 and 0x0202 may be long OR short types...
-    //       - TIFF thumbnails
-    // Rewrite: it should use the higher level Metadata interface
-    int Thumbnail::read(const char* buf, const Ifd& ifd1, ByteOrder byteOrder)
-    {
-//         Ifd::Entries::const_iterator pos = ifd1.findTag(0x0103);
-//         if (pos == ifd1.entries().end()) return 1;
-//         const UShortValue& compression = dynamic_cast<const UShortValue&>(pos->value());
-//         if (compression.value() == 6) {
-//             pos = ifd1.findTag(0x0201);
-//             if (pos == ifd1.entries().end()) return 2;
-//             const ULongValue& offset = dynamic_cast<const ULongValue&>(pos->value());
-//             pos = ifd1.findTag(0x0202);
-//             if (pos == ifd1.entries().end()) return 3;
-//             const ULongValue& size = dynamic_cast<const ULongValue&>(pos->value());
-
-//             thumbnail_ = std::string(buf + offset.value(), size.value());
-//         }
-//         else if (compression.value() == 1) {
-//             // Todo: to be continued...
-//             return 4;
-//         }
-//         else {
-//             // invalid compression value
-//             return 5;
-//         }
+    // Todo: Finish the implementation (TIFF thumbnails)
+    //       - do we need to sum up the strips??
+    int Thumbnail::read(
+        const char* buf, const ExifData& exifData, ByteOrder byteOrder
+    )
+    {
+        std::string key = "Thumbnail.ImageStructure.Compression";
+        ExifData::const_iterator pos = exifData.findKey(key);
+        if (pos == exifData.end()) return 1;
+        long compression = pos->toLong();
+        if (compression == 6) {
+            key = "Thumbnail.RecordingOffset.JPEGInterchangeFormat";
+            pos = exifData.findKey(key);
+            if (pos == exifData.end()) return 2;
+            long offset = pos->toLong();
+            key = "Thumbnail.RecordingOffset.JPEGInterchangeFormatLength";
+            pos = exifData.findKey(key);
+            if (pos == exifData.end()) return 3;
+            long size = pos->toLong();
+            thumbnail_ = std::string(buf + offset, size);
+        }
+        else if (compression == 1) {
+            // Todo: implement me!
+            return 4;
+        }
+        else {
+            // invalid compression value
+            return 5;
+        }
         return 0;
     }
 
@@ -683,7 +676,7 @@ namespace Exif {
         add(ifd1GpsIfd, byteOrder());
 
         // Read the thumbnail
-        thumbnail_.read(buf, ifd1, byteOrder());
+        thumbnail_.read(buf, *this, byteOrder());
 
         return 0;
     } // ExifData::read
@@ -717,6 +710,12 @@ namespace Exif {
         metadata_.push_back(src);
     }
 
+    ExifData::const_iterator ExifData::findKey(const std::string& key) const
+    {
+        return std::find_if(metadata_.begin(), metadata_.end(),
+                            FindMetadatumByKey(key));
+    }
+
     // *************************************************************************
     // free functions
 

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list