[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a
Maximiliano Curia
maxy at moszumanska.debian.org
Thu Jul 13 17:38:15 UTC 2017
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=8e85cea
The following commit has been merged in the master branch:
commit 8e85cea8d40b497c6da9d1c26745a289fffdf932
Author: Andreas Huggel <ahuggel at gmx.net>
Date: Mon Jan 29 16:12:24 2007 +0000
Changed behaviour of unsupport Image functions to throw. Added better method to query the supported metadata functions for each image type. Fixes bug #491.
---
src/Makefile | 1 -
src/cr2image.cpp | 58 ++++++++++---------------------------
src/cr2image.hpp | 7 ++++-
src/crwimage.cpp | 8 +++++-
src/crwimage.hpp | 15 +++-------
src/error.cpp | 4 +--
src/image.cpp | 64 +++++++++++++++++++++++++++++------------
src/image.hpp | 85 ++++++++++++++++++++++---------------------------------
src/imgreg.cpp | 62 ----------------------------------------
src/jpgimage.cpp | 10 +++++++
src/jpgimage.hpp | 38 +++++++++++++++----------
src/mrwimage.cpp | 52 +++++++++-------------------------
src/mrwimage.hpp | 9 ++----
src/pngimage.cpp | 17 ++++++++---
src/pngimage.hpp | 10 +++----
src/tiffimage.cpp | 58 ++++++++++---------------------------
src/tiffimage.hpp | 7 ++++-
src/types.hpp | 3 ++
18 files changed, 204 insertions(+), 304 deletions(-)
diff --git a/src/Makefile b/src/Makefile
index d998167..2cfe0e3 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -66,7 +66,6 @@ CCSRC = basicio.cpp \
fujimn.cpp \
ifd.cpp \
image.cpp \
- imgreg.cpp \
iptc.cpp \
jpgimage.cpp \
makernote.cpp \
diff --git a/src/cr2image.cpp b/src/cr2image.cpp
index b849b80..e83a9df 100644
--- a/src/cr2image.cpp
+++ b/src/cr2image.cpp
@@ -103,16 +103,21 @@ namespace Exiv2 {
return isThisType(*io_, false);
}
+ AccessMode Cr2Image::checkMode(MetadataId metadataId) const
+ {
+ return ImageFactory::checkMode(ImageType::cr2, metadataId);
+ }
+
void Cr2Image::clearMetadata()
{
clearExifData();
- clearComment();
+ clearIptcData();
}
void Cr2Image::setMetadata(const Image& image)
{
setExifData(image.exifData());
- setComment(image.comment());
+ setIptcData(image.iptcData());
}
void Cr2Image::clearExifData()
@@ -137,12 +142,13 @@ namespace Exiv2 {
void Cr2Image::clearComment()
{
- comment_.erase();
+ // not supported, do nothing
}
- void Cr2Image::setComment(const std::string& comment)
+ void Cr2Image::setComment(const std::string& /*comment*/)
{
- comment_ = comment;
+ // not supported
+ throw(Error(32, "Image comment", "CR2"));
}
void Cr2Image::readMetadata()
@@ -167,44 +173,10 @@ namespace Exiv2 {
void Cr2Image::writeMetadata()
{
-/*
-
- Todo: implement me!
-
-#ifdef DEBUG
- std::cerr << "Writing CR2 file " << io_->path() << "
";
-#endif
- // Read existing image
- DataBuf buf;
- if (io_->open() == 0) {
- IoCloser closer(*io_);
- // Ensure that this is the correct image type
- if (isThisType(*io_, false)) {
- // Read the image into a memory buffer
- buf.alloc(io_->size());
- io_->read(buf.pData_, buf.size_);
- if (io_->error() || io_->eof()) {
- buf.reset();
- }
- }
- }
-
- // Parse image, starting with a CR2 header component
- Cr2Header::AutoPtr head(new Cr2Header);
- if (buf.size_ != 0) {
- head->read(buf.pData_, buf.size_);
- }
-
- Blob blob;
- Cr2Parser::encode(blob, head.get(), this);
-
- // Write new buffer to file
- BasicIo::AutoPtr tempIo(io_->temporary()); // may throw
- assert (tempIo.get() != 0);
- tempIo->write(&blob[0], static_cast<long>(blob.size()));
- io_->close();
- io_->transfer(*tempIo); // may throw
-*/
+ /*
+ Todo: implement me!
+ */
+ throw(Error(31, "metadata", "CR2"));
} // Cr2Image::writeMetadata
bool Cr2Image::isThisType(BasicIo& iIo, bool advance) const
diff --git a/src/cr2image.hpp b/src/cr2image.hpp
index 287261e..cf77a5b 100644
--- a/src/cr2image.hpp
+++ b/src/cr2image.hpp
@@ -95,13 +95,17 @@ namespace Exiv2 {
void readMetadata();
/*!
@brief Todo: Write metadata back to the image. This method is not
- yet implemented.
+ yet implemented. Calling it will throw an Error(31).
*/
void writeMetadata();
void setExifData(const ExifData& exifData);
void clearExifData();
void setIptcData(const IptcData& iptcData);
void clearIptcData();
+ /*!
+ @brief Not supported. CR2 format does not contain a comment.
+ Calling this function will throw an Error(32).
+ */
void setComment(const std::string& comment);
void clearComment();
void setMetadata(const Image& image);
@@ -117,6 +121,7 @@ namespace Exiv2 {
const IptcData& iptcData() const { return iptcData_; }
std::string comment() const { return comment_; }
BasicIo& io() const { return *io_; }
+ AccessMode checkMode(MetadataId metadataId) const;
//@}
private:
diff --git a/src/crwimage.cpp b/src/crwimage.cpp
index 9dcfb3a..af23a2c 100644
--- a/src/crwimage.cpp
+++ b/src/crwimage.cpp
@@ -182,6 +182,11 @@ namespace Exiv2 {
return isThisType(*io_, false);
}
+ AccessMode CrwImage::checkMode(MetadataId metadataId) const
+ {
+ return ImageFactory::checkMode(ImageType::crw, metadataId);
+ }
+
void CrwImage::clearMetadata()
{
clearExifData();
@@ -206,12 +211,13 @@ namespace Exiv2 {
void CrwImage::clearIptcData()
{
- // not supported
+ // not supported, do nothing
}
void CrwImage::setIptcData(const IptcData& /*iptcData*/)
{
// not supported
+ throw(Error(32, "IPTC metadata", "CRW"));
}
void CrwImage::clearComment()
diff --git a/src/crwimage.hpp b/src/crwimage.hpp
index f8c816e..fa73f4f 100644
--- a/src/crwimage.hpp
+++ b/src/crwimage.hpp
@@ -83,7 +83,7 @@ namespace Exiv2 {
/*!
@brief Class to access raw Canon Crw images. Only Exif metadata and a
- comment are supported. Crw format does not contain Iptc metadata.
+ comment are supported. Crw format does not contain IPTC metadata.
*/
class CrwImage : public Image {
friend bool isCrwType(BasicIo& iIo, bool advance);
@@ -122,22 +122,14 @@ namespace Exiv2 {
//! @name Manipulators
//@{
void readMetadata();
- /*!
- @brief Todo: Write metadata back to the image. This method is not
- yet implemented.
- */
void writeMetadata();
void setExifData(const ExifData& exifData);
void clearExifData();
/*!
- @brief Not supported. Crw format does not contain Iptc metadata.
- Calling this function will do nothing.
+ @brief Not supported. CRW format does not contain IPTC metadata.
+ Calling this function will throw an Error(32).
*/
void setIptcData(const IptcData& iptcData);
- /*!
- @brief Not supported. Crw format does not contain Iptc metadata.
- Calling this function will do nothing.
- */
void clearIptcData();
void setComment(const std::string& comment);
void clearComment();
@@ -154,6 +146,7 @@ namespace Exiv2 {
const IptcData& iptcData() const { return iptcData_; }
std::string comment() const { return comment_; }
BasicIo& io() const { return *io_; }
+ AccessMode checkMode(MetadataId metadataId) const;
//@}
private:
diff --git a/src/error.cpp b/src/error.cpp
index 9d6e5c1..6168717 100644
--- a/src/error.cpp
+++ b/src/error.cpp
@@ -73,8 +73,8 @@ namespace Exiv2 {
ErrMsg( 28, N_("Invalid charset: `%1'")), // %1=charset name
ErrMsg( 29, N_("Unsupported date format")),
ErrMsg( 30, N_("Unsupported time format")),
- ErrMsg( 31, N_("%1: CRW images don't support IPTC metadata")), // %1=function
- ErrMsg( 32, N_("%1: CRW images don't support JPEG comments")), // %1=function
+ ErrMsg( 31, N_("Writing %1 to %2 images is not supported")), // %1=metadata type, %2=image format
+ ErrMsg( 32, N_("%1 in %2 images is not supported")), // %1=metadata type, %2=image format
ErrMsg( 33, N_("This does not look like a CRW image")),
ErrMsg( 34, N_("%1: Not supported")), // %1=function
ErrMsg( 35, N_("ImageFactory registry full")),
diff --git a/src/image.cpp b/src/image.cpp
index 1364f4b..6cabca5 100644
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -44,6 +44,15 @@ EXIV2_RCSID("@(#) $Id$")
#include "error.hpp"
#include "futils.hpp"
+#include "jpgimage.hpp"
+#include "cr2image.hpp"
+#include "crwimage.hpp"
+#include "mrwimage.hpp"
+#include "tiffimage.hpp"
+#ifdef EXV_HAVE_LIBZ
+# include "pngimage.hpp"
+#endif // EXV_HAVE_LIBZ
+
// + standard includes
#include <cerrno>
#include <cstdio>
@@ -62,31 +71,50 @@ EXIV2_RCSID("@(#) $Id$")
// class member definitions
namespace Exiv2 {
- bool Image::supportsMetadata(MetadataId metadataId) const
+ const ImageFactory::Registry ImageFactory::registry_[] = {
+ //image type creation fct type check Exif mode IPTC mode Comment mode
+ //--------------- --------------- ---------- ----------- ----------- ------------
+ { ImageType::jpeg, newJpegInstance, isJpegType, amReadWrite, amReadWrite, amReadWrite },
+ { ImageType::exv, newExvInstance, isExvType, amReadWrite, amReadWrite, amReadWrite },
+ { ImageType::cr2, newCr2Instance, isCr2Type, amRead, amRead, amNone },
+ { ImageType::crw, newCrwInstance, isCrwType, amReadWrite, amNone, amReadWrite },
+ { ImageType::mrw, newMrwInstance, isMrwType, amRead, amRead, amNone },
+ { ImageType::tiff, newTiffInstance, isTiffType, amRead, amRead, amNone },
+#ifdef EXV_HAVE_LIBZ
+ { ImageType::png, newPngInstance, isPngType, amRead, amRead, amNone },
+#endif // EXV_HAVE_LIBZ
+ // End of list marker
+ { ImageType::none, 0, 0, amNone, amNone, amNone }
+ };
+
+ bool ImageFactory::Registry::operator==(const int& imageType) const
{
- return (supportedMetadata_ & metadataId) != 0;
+ return imageType == imageType_;
}
- const ImageFactory::Registry* ImageFactory::find(int imageType)
+ bool Image::supportsMetadata(MetadataId metadataId) const
{
- for (unsigned int i = 0; registry_[i].imageType_ != ImageType::none; ++i) {
- if (registry_[i].imageType_ == imageType) return ®istry_[i];
- }
- return 0;
+ return (supportedMetadata_ & metadataId) != 0;
}
- void ImageFactory::registerImage(int type,
- NewInstanceFct newInst,
- IsThisTypeFct isType)
+ AccessMode ImageFactory::checkMode(int imageType, MetadataId metadataId)
{
- unsigned int i = 0;
- for (; i < MAX_IMAGE_FORMATS; ++i) {
- if (registry_[i].imageType_ == ImageType::none) {
- registry_[i] = Registry(type, newInst, isType);
- break;
- }
+ const Registry* r = find(registry_, imageType);
+ if (!r) throw Error(13, imageType);
+ AccessMode am = amNone;
+ switch (metadataId) {
+ case mdExif:
+ am = r->exifSupport_;
+ break;
+ case mdIptc:
+ am = r->iptcSupport_;
+ break;
+ case mdComment:
+ am = r->commentSupport_;
+ break;
+ // no default: let the compiler complain
}
- if (i == MAX_IMAGE_FORMATS) throw Error(35);
+ return am;
}
int ImageFactory::getType(const std::string& path)
@@ -169,7 +197,7 @@ namespace Exiv2 {
BasicIo::AutoPtr io)
{
// BasicIo instance does not need to be open
- const Registry* r = find(type);
+ const Registry* r = find(registry_, type);
if (0 != r) {
return r->newInstance_(io, true);
}
diff --git a/src/image.hpp b/src/image.hpp
index 509b64d..93a8741 100644
--- a/src/image.hpp
+++ b/src/image.hpp
@@ -235,9 +235,17 @@ namespace Exiv2 {
Image class will not see those changes until the readMetadata()
method is called.
*/
- virtual BasicIo& io() const = 0;
+ virtual BasicIo& io() const =0;
+ /*!
+ @brief Returns the access mode, i.e., the metadata functions, which
+ this image supports for the metadata type \em metadataId.
+ @param metadataId The metadata identifier.
+ @return Access mode for the requested image type and metadata identifier.
+ */
+ virtual AccessMode checkMode(MetadataId metadataId) const =0;
/*!
@brief Check if image supports a particular type of metadata.
+ This method is deprecated. Use checkMode() instead.
*/
bool supportsMetadata(MetadataId metadataId) const;
//@}
@@ -274,27 +282,6 @@ namespace Exiv2 {
*/
class ImageFactory {
public:
- //! @name Manipulators
- //@{
- /*!
- @brief Register image type together with its function pointers.
-
- The image factory creates new images by calling their associated
- function pointer. Additional images can be added by registering
- new type and function pointers. If called for a type that already
- exists in the list, the corresponding functions are replaced.
-
- @param type Image type.
- @param newInst Function pointer for creating image instances.
- @param isType Function pointer to test for matching image types.
- */
- static void registerImage(int type,
- NewInstanceFct newInst,
- IsThisTypeFct isType);
- //@}
-
- //! @name Accessors
- //@{
/*!
@brief Create an Image subclass of the appropriate type by reading
the specified file. %Image type is derived from the file
@@ -394,9 +381,31 @@ namespace Exiv2 {
@return %Image type or Image::none if the type is not recognized.
*/
static int getType(BasicIo& io);
- //@}
+ /*!
+ @brief Returns the access mode or supported metadata functions for an
+ image type and a metadata type.
+ @param imageType The image type.
+ @param metadataId The metadata identifier.
+ @return Access mode for the requested image type and metadata identifier.
+ @throw Error(13) if the image type is not supported.
+ */
+ static AccessMode checkMode(int imageType, MetadataId metadataId);
private:
+ //! Struct for storing image types and function pointers.
+ struct Registry {
+ //! Comparison operator to compare a Registry structure with an image type
+ bool operator==(const int& imageType) const;
+
+ // DATA
+ int imageType_;
+ NewInstanceFct newInstance_;
+ IsThisTypeFct isThisType_;
+ AccessMode exifSupport_;
+ AccessMode iptcSupport_;
+ AccessMode commentSupport_;
+ };
+
//! @name Creators
//@{
//! Prevent construction: not implemented.
@@ -405,35 +414,9 @@ namespace Exiv2 {
ImageFactory(const ImageFactory& rhs);
//@}
- //! Struct for storing image types and function pointers.
- struct Registry
- {
- //! Default constructor
- Registry()
- : imageType_(ImageType::none),
- newInstance_(0),
- isThisType_(0)
- {}
- //! Constructor
- Registry(int imageType,
- NewInstanceFct newInstance,
- IsThisTypeFct isThisType)
- : imageType_(imageType),
- newInstance_(newInstance),
- isThisType_(isThisType)
- {}
- int imageType_;
- NewInstanceFct newInstance_;
- IsThisTypeFct isThisType_;
- };
-
- //! Return the registry entry for type
- static const Registry* find(int imageType);
-
// DATA
- static const unsigned int MAX_IMAGE_FORMATS = 32;
- //! List of image types and corresponding creation functions.
- static Registry registry_[MAX_IMAGE_FORMATS];
+ //! List of image types, creation functions and access modes
+ static const Registry registry_[];
}; // class ImageFactory
//! Helper class modelling the TIFF header structure.
diff --git a/src/imgreg.cpp b/src/imgreg.cpp
deleted file mode 100644
index 808d4b3..0000000
--- a/src/imgreg.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-// ***************************************************************** -*- C++ -*-
-/*
- * Copyright (C) 2005, 2006 Andreas Huggel <ahuggel at gmx.net>
- *
- * This program is part of the Exiv2 distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
- */
-/*
- File: imgreg.cpp
- Version: $Rev$
- Author(s): Andreas Huggel (ahu) <ahuggel at gmx.net>
- History: 19-Sep-05, ahu: created
-
- */
-// *****************************************************************************
-#include "rcsid.hpp"
-EXIV2_RCSID("@(#) $Id$")
-
-// *****************************************************************************
-// included header files
-#include "image.hpp"
-#include "jpgimage.hpp"
-#include "cr2image.hpp"
-#include "crwimage.hpp"
-#include "mrwimage.hpp"
-#include "tiffimage.hpp"
-#ifdef EXV_HAVE_LIBZ
-# include "pngimage.hpp"
-#endif // EXV_HAVE_LIBZ
-
-// + standard includes
-
-// *****************************************************************************
-// class member definitions
-namespace Exiv2 {
-
- ImageFactory::Registry ImageFactory::registry_[] = {
- Registry(ImageType::jpeg, newJpegInstance, isJpegType),
- Registry(ImageType::exv, newExvInstance, isExvType),
- Registry(ImageType::cr2, newCr2Instance, isCr2Type),
- Registry(ImageType::crw, newCrwInstance, isCrwType),
- Registry(ImageType::mrw, newMrwInstance, isMrwType),
- Registry(ImageType::tiff, newTiffInstance, isTiffType),
-#ifdef EXV_HAVE_LIBZ
- Registry(ImageType::png, newPngInstance, isPngType)
-#endif // EXV_HAVE_LIBZ
- };
-
-} // namespace Exiv2
diff --git a/src/jpgimage.cpp b/src/jpgimage.cpp
index 58ffdb2..0d00702 100644
--- a/src/jpgimage.cpp
+++ b/src/jpgimage.cpp
@@ -581,6 +581,11 @@ namespace Exiv2 {
{
}
+ AccessMode JpegImage::checkMode(MetadataId metadataId) const
+ {
+ return ImageFactory::checkMode(ImageType::jpeg, metadataId);
+ }
+
int JpegImage::writeHeader(BasicIo& outIo) const
{
// Jpeg header
@@ -628,6 +633,11 @@ namespace Exiv2 {
{
}
+ AccessMode ExvImage::checkMode(MetadataId metadataId) const
+ {
+ return ImageFactory::checkMode(ImageType::exv, metadataId);
+ }
+
int ExvImage::writeHeader(BasicIo& outIo) const
{
// Exv header
diff --git a/src/jpgimage.hpp b/src/jpgimage.hpp
index ea244c9..1067b52 100644
--- a/src/jpgimage.hpp
+++ b/src/jpgimage.hpp
@@ -124,27 +124,27 @@ namespace Exiv2 {
//@}
//! @name Manipulators
//@{
- void readMetadata();
- void writeMetadata();
- void setExifData(const ExifData& exifData);
- void clearExifData();
- void setIptcData(const IptcData& iptcData);
- void clearIptcData();
- void setComment(const std::string& comment);
- void clearComment();
- void setMetadata(const Image& image);
- void clearMetadata();
+ void readMetadata();
+ void writeMetadata();
+ void setExifData(const ExifData& exifData);
+ void clearExifData();
+ void setIptcData(const IptcData& iptcData);
+ void clearIptcData();
+ void setComment(const std::string& comment);
+ void clearComment();
+ void setMetadata(const Image& image);
+ void clearMetadata();
+ ExifData& exifData() { return exifData_; }
+ IptcData& iptcData() { return iptcData_; }
//@}
//! @name Accessors
//@{
- bool good() const;
+ bool good() const;
const ExifData& exifData() const { return exifData_; }
- ExifData& exifData() { return exifData_; }
const IptcData& iptcData() const { return iptcData_; }
- IptcData& iptcData() { return iptcData_; }
- std::string comment() const { return comment_; }
- BasicIo& io() const { return *io_; }
+ std::string comment() const { return comment_; }
+ BasicIo& io() const { return *io_; }
//@}
protected:
//! @name Creators
@@ -283,6 +283,10 @@ namespace Exiv2 {
//! Destructor
~JpegImage() {}
//@}
+ //! @name Accessors
+ //@{
+ AccessMode checkMode(MetadataId metadataId) const;
+ //@}
protected:
//! @name Accessors
//@{
@@ -339,6 +343,10 @@ namespace Exiv2 {
//! Destructor
~ExvImage() {}
//@}
+ //! @name Accessors
+ //@{
+ AccessMode checkMode(MetadataId metadataId) const;
+ //@}
protected:
//! @name Accessors
//@{
diff --git a/src/mrwimage.cpp b/src/mrwimage.cpp
index 92e8098..853932e 100644
--- a/src/mrwimage.cpp
+++ b/src/mrwimage.cpp
@@ -70,14 +70,21 @@ namespace Exiv2 {
return isThisType(*io_, false);
}
+ AccessMode MrwImage::checkMode(MetadataId metadataId) const
+ {
+ return ImageFactory::checkMode(ImageType::mrw, metadataId);
+ }
+
void MrwImage::clearMetadata()
{
clearExifData();
+ clearIptcData();
}
void MrwImage::setMetadata(const Image& image)
{
setExifData(image.exifData());
+ setIptcData(image.iptcData());
}
void MrwImage::clearExifData()
@@ -102,12 +109,13 @@ namespace Exiv2 {
void MrwImage::clearComment()
{
- // not supported
+ // not supported, do nothing
}
void MrwImage::setComment(const std::string& /*comment*/)
{
// not supported
+ throw(Error(32, "Image comment", "MRW"));
}
void MrwImage::readMetadata()
@@ -161,44 +169,10 @@ namespace Exiv2 {
void MrwImage::writeMetadata()
{
-/*
-
- Todo: implement me!
-
-#ifdef DEBUG
- std::cerr << "Writing MRW file " << io_->path() << "
";
-#endif
- // Read existing image
- DataBuf buf;
- if (io_->open() == 0) {
- IoCloser closer(*io_);
- // Ensure that this is the correct image type
- if (isThisType(*io_, false)) {
- // Read the image into a memory buffer
- buf.alloc(io_->size());
- io_->read(buf.pData_, buf.size_);
- if (io_->error() || io_->eof()) {
- buf.reset();
- }
- }
- }
-
- // Parse image, starting with a MRW header component
- TiffHeade2::AutoPtr head(new TiffHeade2);
- if (buf.size_ != 0) {
- head->read(buf.pData_, buf.size_);
- }
-
- Blob blob;
- TiffParser::encode(blob, head.get(), this);
-
- // Write new buffer to file
- BasicIo::AutoPtr tempIo(io_->temporary()); // may throw
- assert (tempIo.get() != 0);
- tempIo->write(&blob[0], static_cast<long>(blob.size()));
- io_->close();
- io_->transfer(*tempIo); // may throw
-*/
+ /*
+ Todo: implement me!
+ */
+ throw(Error(31, "metadata", "MRW"));
} // MrwImage::writeMetadata
bool MrwImage::isThisType(BasicIo& iIo, bool advance) const
diff --git a/src/mrwimage.hpp b/src/mrwimage.hpp
index 10f3b19..0a89be8 100644
--- a/src/mrwimage.hpp
+++ b/src/mrwimage.hpp
@@ -94,7 +94,7 @@ namespace Exiv2 {
void readMetadata();
/*!
@brief Todo: Write metadata back to the image. This method is not
- yet implemented.
+ yet implemented. Calling it will throw an Error(31).
*/
void writeMetadata();
void setExifData(const ExifData& exifData);
@@ -103,13 +103,9 @@ namespace Exiv2 {
void clearIptcData();
/*!
@brief Not supported. MRW format does not contain a comment.
- Calling this function will do nothing.
+ Calling this function will throw an Error(32).
*/
void setComment(const std::string& comment);
- /*!
- @brief Not supported. MRW format does not contain a comment.
- Calling this function will do nothing.
- */
void clearComment();
void setMetadata(const Image& image);
void clearMetadata();
@@ -124,6 +120,7 @@ namespace Exiv2 {
const IptcData& iptcData() const { return iptcData_; }
std::string comment() const { return comment_; }
BasicIo& io() const { return *io_; }
+ AccessMode checkMode(MetadataId metadataId) const;
//@}
private:
diff --git a/src/pngimage.cpp b/src/pngimage.cpp
index 2ef07b6..62368f5 100644
--- a/src/pngimage.cpp
+++ b/src/pngimage.cpp
@@ -74,14 +74,21 @@ namespace Exiv2 {
return isThisType(*io_, false);
}
+ AccessMode PngImage::checkMode(MetadataId metadataId) const
+ {
+ return ImageFactory::checkMode(ImageType::png, metadataId);
+ }
+
void PngImage::clearMetadata()
{
clearExifData();
+ clearIptcData();
}
void PngImage::setMetadata(const Image& image)
{
setExifData(image.exifData());
+ setIptcData(image.iptcData());
}
void PngImage::clearExifData()
@@ -106,7 +113,7 @@ namespace Exiv2 {
void PngImage::clearComment()
{
- // not yet supported.
+ // not yet supported, do nothing
// TODO : Add 'iTXt' chunk 'Description' tag support here
}
@@ -114,6 +121,7 @@ namespace Exiv2 {
{
// not yet supported
// TODO : Add 'iTXt' chunk 'Description' tag support here
+ throw(Error(32, "Image comment", "PNG"));
}
void PngImage::readMetadata()
@@ -151,9 +159,10 @@ namespace Exiv2 {
void PngImage::writeMetadata()
{
- /*
- TODO: implement me!
- */
+ /*
+ Todo: implement me!
+ */
+ throw(Error(31, "metadata", "PNG"));
} // PngImage::writeMetadata
bool PngImage::isThisType(BasicIo& iIo, bool advance) const
diff --git a/src/pngimage.hpp b/src/pngimage.hpp
index 9694d5f..62322d6 100644
--- a/src/pngimage.hpp
+++ b/src/pngimage.hpp
@@ -97,7 +97,7 @@ namespace Exiv2 {
void readMetadata();
/*!
@brief Todo: Write metadata back to the image. This method is not
- yet implemented.
+ yet implemented. Calling it will throw an Error(31).
*/
void writeMetadata();
void setExifData(const ExifData& exifData);
@@ -106,13 +106,10 @@ namespace Exiv2 {
void clearIptcData();
/*!
@brief Not supported. PNG format does not contain a comment.
- Calling this function will do nothing.
+ Calling it will throw an Error(32).<br>
+ Todo: Add 'iTXt' chunk 'Description' tag support here.
*/
void setComment(const std::string& comment);
- /*!
- @brief Not supported. PNG format does not contain a comment.
- Calling this function will do nothing.
- */
void clearComment();
void setMetadata(const Image& image);
void clearMetadata();
@@ -127,6 +124,7 @@ namespace Exiv2 {
const IptcData& iptcData() const { return iptcData_; }
std::string comment() const { return comment_; }
BasicIo& io() const { return *io_; }
+ AccessMode checkMode(MetadataId metadataId) const;
//@}
private:
diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp
index 0e21b61..93a26a8 100644
--- a/src/tiffimage.cpp
+++ b/src/tiffimage.cpp
@@ -70,16 +70,21 @@ namespace Exiv2 {
return isThisType(*io_, false);
}
+ AccessMode TiffImage::checkMode(MetadataId metadataId) const
+ {
+ return ImageFactory::checkMode(ImageType::tiff, metadataId);
+ }
+
void TiffImage::clearMetadata()
{
clearExifData();
- clearComment();
+ clearIptcData();
}
void TiffImage::setMetadata(const Image& image)
{
setExifData(image.exifData());
- setComment(image.comment());
+ setIptcData(image.iptcData());
}
void TiffImage::clearExifData()
@@ -104,12 +109,13 @@ namespace Exiv2 {
void TiffImage::clearComment()
{
- comment_.erase();
+ // not supported, do nothing
}
- void TiffImage::setComment(const std::string& comment)
+ void TiffImage::setComment(const std::string& /*comment*/)
{
- comment_ = comment;
+ // not supported
+ throw(Error(32, "Image comment", "TIFF"));
}
void TiffImage::readMetadata()
@@ -134,44 +140,10 @@ namespace Exiv2 {
void TiffImage::writeMetadata()
{
-/*
-
- Todo: implement me!
-
-#ifdef DEBUG
- std::cerr << "Writing TIFF file " << io_->path() << "
";
-#endif
- // Read existing image
- DataBuf buf;
- if (io_->open() == 0) {
- IoCloser closer(*io_);
- // Ensure that this is the correct image type
- if (isThisType(*io_, false)) {
- // Read the image into a memory buffer
- buf.alloc(io_->size());
- io_->read(buf.pData_, buf.size_);
- if (io_->error() || io_->eof()) {
- buf.reset();
- }
- }
- }
-
- // Parse image, starting with a TIFF header component
- TiffHeade2::AutoPtr head(new TiffHeade2);
- if (buf.size_ != 0) {
- head->read(buf.pData_, buf.size_);
- }
-
- Blob blob;
- TiffParser::encode(blob, head.get(), this);
-
- // Write new buffer to file
- BasicIo::AutoPtr tempIo(io_->temporary()); // may throw
- assert (tempIo.get() != 0);
- tempIo->write(&blob[0], static_cast<long>(blob.size()));
- io_->close();
- io_->transfer(*tempIo); // may throw
-*/
+ /*
+ Todo: implement me!
+ */
+ throw(Error(31, "metadata", "TIFF"));
} // TiffImage::writeMetadata
bool TiffImage::isThisType(BasicIo& iIo, bool advance) const
diff --git a/src/tiffimage.hpp b/src/tiffimage.hpp
index 2b84055..dd630be 100644
--- a/src/tiffimage.hpp
+++ b/src/tiffimage.hpp
@@ -93,13 +93,17 @@ namespace Exiv2 {
void readMetadata();
/*!
@brief Todo: Write metadata back to the image. This method is not
- yet implemented.
+ yet implemented. Calling it will throw an Error(31).
*/
void writeMetadata();
void setExifData(const ExifData& exifData);
void clearExifData();
void setIptcData(const IptcData& iptcData);
void clearIptcData();
+ /*!
+ @brief Not supported. TIFF format does not contain a comment.
+ Calling this function will throw an Error(32).
+ */
void setComment(const std::string& comment);
void clearComment();
void setMetadata(const Image& image);
@@ -115,6 +119,7 @@ namespace Exiv2 {
const IptcData& iptcData() const { return iptcData_; }
std::string comment() const { return comment_; }
BasicIo& io() const { return *io_; }
+ AccessMode checkMode(MetadataId metadataId) const;
//@}
private:
diff --git a/src/types.hpp b/src/types.hpp
index 4f45cc8..9db84b4 100644
--- a/src/types.hpp
+++ b/src/types.hpp
@@ -92,6 +92,9 @@ namespace Exiv2 {
//! An identifier for each type of metadata
enum MetadataId { mdExif=1, mdIptc=2, mdComment=4 };
+ //! An identifier for each mode of metadata support
+ enum AccessMode { amNone=0, amRead=1, amWrite=2, amReadWrite=3 };
+
//! Type identifiers for IFD format types
enum TypeId { invalidTypeId, unsignedByte, asciiString, unsignedShort,
unsignedLong, unsignedRational, invalid6, undefined,
--
exiv2 packaging
More information about the pkg-kde-commits
mailing list