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

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


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

The following commit has been merged in the master branch:
commit 9578e81236b44ad98aebeb7fbd986b381e1bc7f7
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Tue Oct 14 17:04:04 2008 +0000

    Preview API changes.
---
 samples/prevtest.cpp | 26 +++++++++---------
 src/preview.cpp      | 73 ++++++++++++++++++++++++++++++------------------
 src/preview.hpp      | 78 +++++++++++++++++++++++++++++++---------------------
 3 files changed, 107 insertions(+), 70 deletions(-)

diff --git a/samples/prevtest.cpp b/samples/prevtest.cpp
index 0b78c2d..2875756 100644
--- a/samples/prevtest.cpp
+++ b/samples/prevtest.cpp
@@ -11,32 +11,32 @@
 
 int main(int argc, char* const argv[])
 try {
-
     if (argc != 2) {
         std::cout << "Usage: " << argv[0] << " file
";
         return 1;
     }
+    std::string filename(argv[1]);
 
-    Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(argv[1]);
+    Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename);
     assert(image.get() != 0);
     image->readMetadata();
 
-    Exiv2::PreviewImageLoader loader(*image);
-    
-    Exiv2::PreviewPropertiesList list = loader.getPreviewPropertiesList();
-
-    for (Exiv2::PreviewPropertiesList::iterator pos = list.begin(); pos != list.end(); pos++)
-    {
-        std::cout << "found preview " << pos->id_ 
+    Exiv2::PreviewManager loader(*image);
+    Exiv2::PreviewPropertiesList list = loader.getPreviewProperties();
+    for (Exiv2::PreviewPropertiesList::iterator pos = list.begin(); pos != list.end(); pos++) {
+        std::cout << "Preview " << pos->id_ 
                   << ", size: " << pos->size_ 
                   << ", " << pos->width_ << 'x' << pos->height_
                   << "
";
 
-        Exiv2::PreviewImage image = loader.getPreviewImage(*pos);
-        char buf[50];
-        sprintf(buf, "%dx%d",pos->width_, pos->height_);
-        image.writeFile(std::string(argv[1]) + "_" + buf);
+        Exiv2::PreviewImage preview = loader.getPreviewImage(*pos);
+        preview.writeFile(filename + "_"
+                          + Exiv2::toString(pos->width_) + "x"
+                          + Exiv2::toString(pos->height_));
     }
+
+    // Cleanup
+    Exiv2::XmpParser::terminate();
     
     return 0;
 }
diff --git a/src/preview.cpp b/src/preview.cpp
index 358ef64..9a0f858 100644
--- a/src/preview.cpp
+++ b/src/preview.cpp
@@ -293,33 +293,58 @@ namespace Exiv2 {
         { "Thumbnail", 0,                               0   }   // 5
     };
 
-    PreviewImage::PreviewImage(const PreviewProperties &properties, DataBuf &data)
-        : properties_(properties), data_(data)
+    PreviewImage::PreviewImage(const PreviewProperties& properties, DataBuf data)
+        : properties_(properties)
     {
+        pData_ = data.pData_;
+        size_ = data.size_;
+        data.release();
     }
 
-    PreviewImage::PreviewImage(const PreviewImage &src)
-        : properties_(src.properties_), data_(const_cast<DataBuf&>(src.data_))
+    PreviewImage::~PreviewImage()
     {
+        delete[] pData_;
+    }
+
+    PreviewImage::PreviewImage(const PreviewImage& rhs)
+    {
+        properties_ = rhs.properties_;
+        pData_ = new byte[rhs.size_];
+        memcpy(pData_, rhs.pData_, rhs.size_);
+        size_ = rhs.size_;
+    }
+
+    PreviewImage& PreviewImage::operator=(const PreviewImage& rhs)
+    {
+        if (this == &rhs) return *this;
+        if (rhs.size_ > size_) {
+            delete[] pData_;
+            pData_ = new byte[rhs.size_];
+        }
+        properties_ = rhs.properties_;
+        memcpy(pData_, rhs.pData_, rhs.size_);
+        size_ = rhs.size_;
+        return *this;
     }
 
     long PreviewImage::writeFile(const std::string& path) const
     {
         std::string name = path + extension();
-        return Exiv2::writeFile(data_, name);
+        // Todo: Creating a DataBuf here unnecessarily copies the memory
+        return Exiv2::writeFile(DataBuf(pData_, size_), name);
     }
 
-    DataBuf &PreviewImage::data()
+    DataBuf PreviewImage::copy() const
     {
-        return data_;
+        return DataBuf(pData_, size_);
     }
 
-    const char* PreviewImage::mimeType() const
+    std::string PreviewImage::mimeType() const
     {
         return properties_.mimeType_;
     }
 
-    const char* PreviewImage::extension() const
+    std::string PreviewImage::extension() const
     {
         return properties_.extension_;
     }
@@ -491,7 +516,7 @@ namespace Exiv2 {
             
             if (buf.size_ == 0) { // direct data
                 buf = DataBuf(pos->size());
-                pos->copy(buf.pData_, littleEndian /*does not matter*/);
+                pos->copy(buf.pData_, invalidByteOrder);
             }
 
             buf.pData_[0] = 0xff; // fix Minolta thumbnails with invalid jpeg header
@@ -547,23 +572,18 @@ namespace Exiv2 {
         } 
         else {
             pos = exifData.findKey(ExifKey(std::string("Exif.") + group_ + ".TileOffsets"));
-            if (pos != exifData.end()) {
-                offsetTag_ = "TileOffsets";
-                sizeTag_ = "TileByteCounts";
-                offsetCount = pos->value().count();
-            }
-            else {
-                return;
-            }
+            if (pos == exifData.end()) return;
+            offsetTag_ = "TileOffsets";
+            sizeTag_ = "TileByteCounts";
+            offsetCount = pos->value().count();
         }
 
         pos = exifData.findKey(ExifKey(std::string("Exif.") + group_ + '.' + sizeTag_));
-        if (pos != exifData.end()) {
-            if (offsetCount != pos->value().count()) return;
-            for (int i = 0; i < offsetCount; i++)
-                size_ += pos->value().toLong(i);
+        if (pos == exifData.end()) return;
+        if (offsetCount != pos->value().count()) return;
+        for (int i = 0; i < offsetCount; i++) {
+            size_ += pos->value().toLong(i);
         }
-        else return;
 
         if (size_ == 0) return;
 
@@ -680,12 +700,12 @@ namespace Exiv2 {
         return DataBuf(&blob[0], static_cast<long>(blob.size()));
     }
 
-    PreviewImageLoader::PreviewImageLoader(const Image& image)
+    PreviewManager::PreviewManager(const Image& image)
         : image_(image)
     {
     }
 
-    PreviewPropertiesList PreviewImageLoader::getPreviewPropertiesList() const
+    PreviewPropertiesList PreviewManager::getPreviewProperties() const
     {
         PreviewPropertiesList list;
         // go through the loader table and store all successfuly created loaders in the list
@@ -699,13 +719,14 @@ namespace Exiv2 {
         return list;
     }
 
-    PreviewImage PreviewImageLoader::getPreviewImage(const PreviewProperties &properties) const
+    PreviewImage PreviewManager::getPreviewImage(const PreviewProperties &properties) const
     {
         Loader::AutoPtr loader = Loader::create(properties.id_, image_);
         DataBuf buf;
         if (loader.get()) {
             buf = loader->getData();
         }
+        
         return PreviewImage(properties, buf);
     }
 }                                       // namespace Exiv2
diff --git a/src/preview.hpp b/src/preview.hpp
index 40b6f91..19dbd08 100644
--- a/src/preview.hpp
+++ b/src/preview.hpp
@@ -20,7 +20,7 @@
  */
 /*!
   @file    preview.hpp
-  @brief   Classes to access preview images embedded in an image.
+  @brief   Classes to access all preview images embedded in an image.
   @version $Rev$
   @author  Vladimir Nadvornik (vn)
            <a href="mailto:nadvornik at suse.cz">nadvornik at suse.cz</a>
@@ -35,6 +35,9 @@
 #include "image.hpp"
 #include "basicio.hpp"
 
+#include <string>
+#include <vector>
+
 // *****************************************************************************
 // namespace extensions
 namespace Exiv2 {
@@ -50,20 +53,15 @@ namespace Exiv2 {
      */
     struct EXIV2API PreviewProperties {
         //! Preview image mime type.
-        const char* mimeType_;
-
+        std::string mimeType_;
         //! Preview image extension.
-        const char* extension_;
-
+        std::string extension_;
         //! Preview image size in bytes.
         uint32_t size_;
-
         //! Preview image width in pixels or 0 for unknown width.
         uint32_t width_;
-        
         //! Preview image height in pixels or 0 for unknown height.
         uint32_t height_;
-        
         //! Identifies type of preview image.
         PreviewId id_;
     };
@@ -75,31 +73,41 @@ namespace Exiv2 {
       @brief Class that holds preview image properties and data buffer.
      */
     class EXIV2API PreviewImage {
+        friend class PreviewManager;
     public:
+        //! @name Constructors
         //@{
-        //! Constructor.
-        PreviewImage(const PreviewProperties& properties, DataBuf& data);
-
         //! Copy constructor
-        PreviewImage(const PreviewImage& src);
+        PreviewImage(const PreviewImage& rhs);
+        //! Destructor.
+        ~PreviewImage();
         //@}
 
-        //! @name Accessors
+        //! @name Manipulators
         //@{
+        //! Assignment operator
+        PreviewImage& operator=(const PreviewImage& rhs);
+        //@}
 
+        //! @name Accessors
+        //@{
         /*!
-          @brief Return a reference to image data.
+          @brief Return a copy of the preview image data. The caller owns
+                 this copy and %DataBuf ensures that it will be deleted.
          */
-        DataBuf& data();
-
+        DataBuf copy() const;
+        /*!
+          @brief Return a pointer to the image data for read-only access.
+         */
+        const byte* pData() const;
         /*!
           @brief Write the thumbnail image to a file.
 
           A filename extension is appended to \em path according to the image
-          type of the thumbnail, so \em path should not include an extension.
+          type of the preview image, so \em path should not include an extension.
           The function will overwrite an existing file of the same name.
 
-          @param path File name of the thumbnail without extension.
+          @param path File name of the preview image without extension.
           @return The number of bytes written.
         */
         long writeFile(const std::string& path) const;
@@ -107,13 +115,12 @@ namespace Exiv2 {
           @brief Return the MIME type of the preview image, usually either
                  
-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list