[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:35 UTC 2017
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=f731b16
The following commit has been merged in the master branch:
commit f731b16c4f35e7e6a4e038f842bd2e5329630878
Author: Andreas Huggel <ahuggel at gmx.net>
Date: Wed Jun 25 14:25:26 2008 +0000
Added TiffEncoder::encodeXmp, encodeIptc
---
src/cr2image.cpp | 6 ++--
src/tiffimage.cpp | 6 ++--
src/tiffvisitor.cpp | 79 ++++++++++++++++++++++++++++++++++++++++++-------
src/tiffvisitor_int.hpp | 17 +++++++++--
4 files changed, 90 insertions(+), 18 deletions(-)
diff --git a/src/cr2image.cpp b/src/cr2image.cpp
index b04e2e7..1e1d1a7 100644
--- a/src/cr2image.cpp
+++ b/src/cr2image.cpp
@@ -211,9 +211,9 @@ namespace Exiv2 {
{ "*", 0x011a, Group::ifd0, 0, 0 },
{ "*", 0x011b, Group::ifd0, 0, 0 },
{ "*", 0x0128, Group::ifd0, 0, 0 },
- { "*", 0x02bc, Group::ifd0, &TiffDecoder::decodeXmp, &TiffEncoder::encodeXmp },
- { "*", 0x83bb, Group::ifd0, &TiffDecoder::decodeIptc, &TiffEncoder::encodeIptc },
- { "*", 0x8649, Group::ifd0, &TiffDecoder::decodeIptc, &TiffEncoder::encodeIptc }
+ { "*", 0x02bc, Group::ifd0, &TiffDecoder::decodeXmp, 0 /*Todo*/ },
+ { "*", 0x83bb, Group::ifd0, &TiffDecoder::decodeIptc, 0 /*Todo*/ },
+ { "*", 0x8649, Group::ifd0, &TiffDecoder::decodeIptc, 0 /*Todo*/ }
};
DecoderFct Cr2Mapping::findDecoder(const std::string& make,
diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp
index 4a9de12..0dd4520 100644
--- a/src/tiffimage.cpp
+++ b/src/tiffimage.cpp
@@ -418,9 +418,9 @@ namespace Exiv2 {
{ "*", 0x014a, Group::ifd0, 0, 0 }, // Todo: Controversial, causes problems with Exiftool
{ "*", Tag::all, Group::sub0_0, &TiffDecoder::decodeSubIfd, 0 /*Todo*/ },
{ "*", Tag::all, Group::sub0_1, &TiffDecoder::decodeSubIfd, 0 /*Todo*/ },
- { "*", 0x02bc, Group::ifd0, &TiffDecoder::decodeXmp, &TiffEncoder::encodeXmp },
- { "*", 0x83bb, Group::ifd0, &TiffDecoder::decodeIptc, &TiffEncoder::encodeIptc },
- { "*", 0x8649, Group::ifd0, &TiffDecoder::decodeIptc, &TiffEncoder::encodeIptc },
+ { "*", 0x02bc, Group::ifd0, &TiffDecoder::decodeXmp, 0 /*done before the tree is traversed*/ },
+ { "*", 0x83bb, Group::ifd0, &TiffDecoder::decodeIptc, 0 /*done before the tree is traversed*/ },
+ { "*", 0x8649, Group::ifd0, &TiffDecoder::decodeIptc, 0 /*done before the tree is traversed*/ },
// Minolta makernote entries which need to be encoded in big endian byte order
{ "*", Tag::all, Group::minocso, &TiffDecoder::decodeStdTiffEntry, &TiffEncoder::encodeBigEndianEntry },
{ "*", Tag::all, Group::minocso, &TiffDecoder::decodeStdTiffEntry, &TiffEncoder::encodeBigEndianEntry },
diff --git a/src/tiffvisitor.cpp b/src/tiffvisitor.cpp
index 51eaedc..487de8e 100644
--- a/src/tiffvisitor.cpp
+++ b/src/tiffvisitor.cpp
@@ -416,6 +416,9 @@ namespace Exiv2 {
{
assert(pRoot != 0);
+ encodeIptc();
+ encodeXmp();
+
// Find camera make
ExifKey key("Exif.Image.Make");
ExifData::const_iterator pos = exifData_.findKey(key);
@@ -432,6 +435,72 @@ namespace Exiv2 {
}
}
+ void TiffEncoder::encodeIptc()
+ {
+ // Update IPTCNAA Exif tag, if it exists. Delete the tag if there
+ // is no IPTC data anymore.
+ // If there is new IPTC data and Exif.Image.ImageResources does
+ // not exist, create a new IPTCNAA Exif tag.
+ bool del = false;
+ const ExifKey iptcNaaKey("Exif.Image.IPTCNAA");
+ ExifData::iterator pos = exifData_.findKey(iptcNaaKey);
+ if (pos != exifData_.end()) {
+ exifData_.erase(pos);
+ del = true;
+ }
+ DataBuf rawIptc = IptcParser::encode(iptcData_);
+ const ExifKey irbKey("Exif.Image.ImageResources");
+ pos = exifData_.findKey(irbKey);
+ if (rawIptc.size_ != 0 && (del || pos == exifData_.end())) {
+ Value::AutoPtr value = Value::create(unsignedLong);
+ value->read(rawIptc.pData_, rawIptc.size_, byteOrder_);
+
+// Todo remove me!
+std::cerr << "Writing IPTCNAA datum, size = " << value->size() << "
";
+
+ Exifdatum iptcDatum(iptcNaaKey, value.get());
+ exifData_.add(iptcDatum);
+ pos = exifData_.findKey(irbKey); // needed after add()
+ }
+ // Also update IPTC IRB in Exif.Image.ImageResources if it exists,
+ // but don't create it if not.
+ if (pos != exifData_.end()) {
+ DataBuf irbBuf(pos->value().size());
+ pos->value().copy(irbBuf.pData_, invalidByteOrder);
+ irbBuf = Photoshop::setIptcIrb(irbBuf.pData_, irbBuf.size_, iptcData_);
+ exifData_.erase(pos);
+ if (irbBuf.size_ != 0) {
+ Value::AutoPtr value = Value::create(undefined);
+ value->read(irbBuf.pData_, irbBuf.size_, invalidByteOrder);
+ Exifdatum iptcDatum(irbKey, value.get());
+ exifData_.add(iptcDatum);
+ }
+ }
+ } // TiffEncoder::encodeIptc
+
+ void TiffEncoder::encodeXmp()
+ {
+ const ExifKey xmpKey("Exif.Image.XMLPacket");
+ // Remove any existing XMP Exif tag
+ ExifData::iterator pos = exifData_.findKey(xmpKey);
+ if (pos != exifData_.end()) {
+ exifData_.erase(pos);
+ }
+ std::string xmpPacket;
+ if (XmpParser::encode(xmpPacket, xmpData_)) {
+#ifndef SUPPRESS_WARNINGS
+ std::cerr << "Error: Failed to encode XMP metadata.
";
+#endif
+ }
+ if (!xmpPacket.empty()) {
+ // Set the XMP Exif tag to the new value
+ Value::AutoPtr value = Value::create(unsignedByte);
+ value->read(reinterpret_cast<const byte*>(&xmpPacket[0]), xmpPacket.size(), invalidByteOrder);
+ Exifdatum xmpDatum(xmpKey, value.get());
+ exifData_.add(xmpDatum);
+ }
+ } // TiffEncoder::encodeXmp
+
void TiffEncoder::setDirty(bool flag)
{
dirty_ = flag;
@@ -776,16 +845,6 @@ namespace Exiv2 {
// Todo
}
- void TiffEncoder::encodeIptc(TiffEntryBase* object, const Exifdatum* datum)
- {
- // Todo
- }
-
- void TiffEncoder::encodeXmp(TiffEntryBase* object, const Exifdatum* datum)
- {
- // Todo
- }
-
void TiffEncoder::encodeBigEndianEntry(TiffEntryBase* object, const Exifdatum* datum)
{
byteOrder_ = bigEndian;
diff --git a/src/tiffvisitor_int.hpp b/src/tiffvisitor_int.hpp
index 72fd6aa..60f0553 100644
--- a/src/tiffvisitor_int.hpp
+++ b/src/tiffvisitor_int.hpp
@@ -422,8 +422,6 @@ namespace Exiv2 {
//! Special encoder function to encode IPTC data to an IPTCNAA or Photoshop ImageResources tag.
void encodeIptc(TiffEntryBase* object, const Exifdatum* datum);
- //! Special encoder function to encode an XMP packet to an XMLPacket tag.
- void encodeXmp(TiffEntryBase* object, const Exifdatum* datum);
//! Special encoder function for a standard TIFF entry using big endian byte order.
void encodeBigEndianEntry(TiffEntryBase* object, const Exifdatum* datum);
/*!
@@ -464,6 +462,21 @@ namespace Exiv2 {
//@}
private:
+ //! @name Manipulators
+ //@{
+ /*!
+ Encode IPTC data. Updates or adds tag Exif.Image.IPTCNAA, updates but
+ never adds tag Exif.Image.ImageResources.
+ This method is called from the constructor.
+ */
+ void encodeIptc();
+ /*!
+ Encode XMP data. Adds tag Exif.Image.XMLPacket with the XMP packet.
+ This method is called from the constructor.
+ */
+ void encodeXmp();
+ //@}
+
//! @name Accessors
//@{
/*!
--
exiv2 packaging
More information about the pkg-kde-commits
mailing list