[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