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

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


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

The following commit has been merged in the master branch:
commit 0e0845d7beac40b9cdf2a3017108e4880c6c9ee7
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Wed Mar 21 00:53:32 2012 +0000

    #635: Added experimental write-support for CR2.
---
 src/cr2image.cpp          | 121 +++++++++++++++++++++++++++++++---------------
 src/cr2image.hpp          |  17 +------
 src/cr2image_int.hpp      |   5 +-
 src/exif.cpp              |   6 ++-
 src/orfimage.cpp          |   3 +-
 src/tiffcomposite.cpp     |  20 ++++++--
 src/tiffcomposite_int.hpp |   7 ++-
 src/tifffwd_int.hpp       |   1 +
 src/tiffimage.cpp         |  30 ++++++++++--
 src/tiffimage_int.hpp     |  59 +++++++++++++++++++++-
 10 files changed, 203 insertions(+), 66 deletions(-)

diff --git a/src/cr2image.cpp b/src/cr2image.cpp
index 8ca56b6..e394d56 100644
--- a/src/cr2image.cpp
+++ b/src/cr2image.cpp
@@ -86,18 +86,6 @@ namespace Exiv2 {
         return 0;
     }
 
-    void Cr2Image::setExifData(const ExifData& /*exifData*/)
-    {
-        // Todo: implement me!
-        throw(Error(32, "Exif metadata", "CR2"));
-    }
-
-    void Cr2Image::setIptcData(const IptcData& /*iptcData*/)
-    {
-        // Todo: implement me!
-        throw(Error(32, "IPTC metadata", "CR2"));
-    }
-
     void Cr2Image::setComment(const std::string& /*comment*/)
     {
         // not supported
@@ -129,8 +117,29 @@ namespace Exiv2 {
 
     void Cr2Image::writeMetadata()
     {
-        // Todo: implement me!
-        throw(Error(31, "CR2"));
+#ifdef DEBUG
+        std::cerr << "Writing CR2 file " << io_->path() << "
";
+#endif
+        ByteOrder bo = byteOrder();
+        byte* pData = 0;
+        long size = 0;
+        IoCloser closer(*io_);
+        if (io_->open() == 0) {
+            // Ensure that this is the correct image type
+            if (isCr2Type(*io_, false)) {
+                pData = io_->mmap(true);
+                size = io_->size();
+                Cr2Header cr2Header;
+                if (0 == cr2Header.read(pData, 16)) {
+                    bo = cr2Header.byteOrder();
+                }
+            }
+        }
+        if (bo == invalidByteOrder) {
+            bo = littleEndian;
+        }
+        setByteOrder(bo);
+        Cr2Parser::encode(*io_, pData, size, bo, exifData_, iptcData_, xmpData_); // may throw
     } // Cr2Image::writeMetadata
 
     ByteOrder Cr2Parser::decode(
@@ -153,27 +162,45 @@ namespace Exiv2 {
     }
 
     WriteMethod Cr2Parser::encode(
-              Blob&     blob,
-        const byte*     /*pData*/,
-              uint32_t  /*size*/,
-        const ExifData& /*exifData*/,
-        const IptcData& /*iptcData*/,
-        const XmpData&  /*xmpData*/
+              BasicIo&  io,
+        const byte*     pData,
+              uint32_t  size,
+              ByteOrder byteOrder,
+        const ExifData& exifData,
+        const IptcData& iptcData,
+        const XmpData&  xmpData
     )
     {
-        /* Todo: Implement me!
-
-        TiffParserWorker::encode(blob,
-                                 pData,
-                                 size,
-                                 exifData,
-                                 iptcData,
-                                 xmpData,
-                                 TiffCreator::create,
-                                 TiffMapping::findEncoder);
-        */
-        blob.clear();
-        return wmIntrusive;
+        // Copy to be able to modify the Exif data
+        ExifData ed = exifData;
+
+        // Delete IFDs which do not occur in TIFF images
+        static const IfdId filteredIfds[] = {
+            panaRawId
+        };
+        for (unsigned int i = 0; i < EXV_COUNTOF(filteredIfds); ++i) {
+#ifdef DEBUG
+            std::cerr << "Warning: Exif IFD " << filteredIfds[i] << " not encoded
";
+#endif
+            ed.erase(std::remove_if(ed.begin(),
+                                    ed.end(),
+                                    FindExifdatum(filteredIfds[i])),
+                     ed.end());
+        }
+
+        std::auto_ptr<TiffHeaderBase> header(new Cr2Header(byteOrder));
+        OffsetWriter offsetWriter;
+        offsetWriter.setOrigin(OffsetWriter::cr2RawIfdOffset, Cr2Header::offset2addr(), byteOrder);
+        return TiffParserWorker::encode(io,
+                                        pData,
+                                        size,
+                                        ed,
+                                        iptcData,
+                                        xmpData,
+                                        Tag::root,
+                                        TiffMapping::findEncoder,
+                                        header.get(),
+                                        &offsetWriter);
     }
 
     // *************************************************************************
@@ -210,8 +237,8 @@ namespace Exiv2 {
 
     const char* Cr2Header::cr2sig_ = "CR

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list