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

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:47:11 UTC 2017


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

The following commit has been merged in the master branch:
commit 2e9138cf9107fb0ae3834797ea74b5934b24b2f0
Author: Robin Mills <robin at clanmills.com>
Date:   Thu Oct 13 11:03:39 2016 +0000

    #1243 Work-in-progress.  Still to add code to writeMetadata for icc profiles.
---
 src/image.cpp         |   1 +
 src/jp2image.cpp      | 114 +++++++++++++++++++++++++-------------------------
 test/data/Reagan2.jp2 | Bin 0 -> 8389 bytes
 3 files changed, 59 insertions(+), 56 deletions(-)

diff --git a/src/image.cpp b/src/image.cpp
index 68e3278..58c06be 100644
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -651,6 +651,7 @@ namespace Exiv2 {
 
     std::string binaryToString(DataBuf& buf, size_t size, size_t start /*=0*/)
     {
+        if ( size > buf.size_ ) size = buf.size_;
         return binaryToString(buf.pData_,size,start);
     }
 
diff --git a/src/jp2image.cpp b/src/jp2image.cpp
index 4bd5acc..d08d69a 100644
--- a/src/jp2image.cpp
+++ b/src/jp2image.cpp
@@ -26,6 +26,8 @@
 #include "rcsid_int.hpp"
 EXIV2_RCSID("@(#) $Id$")
 
+// #define DEBUG
+
 // included header files
 #include "config.h"
 
@@ -50,6 +52,7 @@ const uint32_t kJp2BoxTypeJp2Header   = 0x6a703268; // 'jp2h'
 const uint32_t kJp2BoxTypeImageHeader = 0x69686472; // 'ihdr'
 const uint32_t kJp2BoxTypeColorHeader = 0x636f6c72; // 'colr'
 const uint32_t kJp2BoxTypeUuid        = 0x75756964; // 'uuid'
+const uint32_t kJp2BoxTypeClose       = 0x6a703263; // 'jp2c'
 
 // from openjpeg-2.1.2/src/lib/openjp2/jp2.h
 /*#define JPIP_JPIP 0x6a706970*/
@@ -143,13 +146,13 @@ namespace Exiv2
             if (io_->open() == 0)
             {
 #ifdef DEBUG
-                std::cerr << "Exiv2::Jp2Image:: Creating JPEG2000 image to memory
";
+                std::cerr << "Exiv2::Jp2Image:: Creating JPEG2000 image to memory" << std::endl;
 #endif
                 IoCloser closer(*io_);
                 if (io_->write(Jp2Blank, sizeof(Jp2Blank)) != sizeof(Jp2Blank))
                 {
 #ifdef DEBUG
-                    std::cerr << "Exiv2::Jp2Image:: Failed to create JPEG2000 image on memory
";
+                    std::cerr << "Exiv2::Jp2Image:: Failed to create JPEG2000 image on memory" << std::endl;
 #endif
                 }
             }
@@ -178,7 +181,7 @@ namespace Exiv2
     void Jp2Image::readMetadata()
     {
 #ifdef DEBUG
-        std::cerr << "Exiv2::Jp2Image::readMetadata: Reading JPEG-2000 file " << io_->path() << "
";
+        std::cerr << "Exiv2::Jp2Image::readMetadata: Reading JPEG-2000 file " << io_->path() << std::endl;
 #endif
         if (io_->open() != 0)
         {
@@ -204,19 +207,15 @@ namespace Exiv2
             box.length = getLong((byte*)&box.length, bigEndian);
             box.type   = getLong((byte*)&box.type, bigEndian);
 #ifdef DEBUG
-            std::cout << "Exiv2::Jp2Image::readMetadata: Position: " << position << "
";
-            std::cout << "Exiv2::Jp2Image::readMetadata: Find box type: " << toAscii(box.type)
-                      << " length: " << box.length << "
";
+            std::cout << "Exiv2::Jp2Image::readMetadata: "
+                      << "Position: " << position
+                      << " box type: " << toAscii(box.type)
+                      << " length: " << box.length
+                      << std::endl;
 #endif
 
-            if (box.length == 0)
-            {
-#ifdef DEBUG
-                std::cout << "Exiv2::Jp2Image::readMetadata: Null Box size has been found. "
-                             "This is the last box of file.
";
-#endif
-                return;
-            }
+            if (box.length == 0) return ;
+
             if (box.length == 1)
             {
                 // FIXME. Special case. the real box size is given in another place.
@@ -227,7 +226,7 @@ namespace Exiv2
                 case kJp2BoxTypeJp2Header:
                 {
 #ifdef DEBUG
-                    std::cout << "Exiv2::Jp2Image::readMetadata: JP2Header box found
";
+                    std::cout << "Exiv2::Jp2Image::readMetadata: JP2Header box found" << std::endl;
 #endif
                     long restore = io_->tell();
 
@@ -236,12 +235,14 @@ namespace Exiv2
                         subBox.length = getLong((byte*)&subBox.length, bigEndian);
                         subBox.type   = getLong((byte*)&subBox.type, bigEndian);
 #ifdef DEBUG
-                        std::cout << "subBox = " << toAscii(subBox.type) << " length = " << subBox.length << std::endl;
+                        std::cout << "Exiv2::Jp2Image::readMetadata: "
+                        << "subBox = " << toAscii(subBox.type) << " length = " << subBox.length << std::endl;
 #endif
                         if(subBox.type == kJp2BoxTypeColorHeader)
                         {
 #ifdef DEBUG
-                            std::cout << "Exiv2::Jp2Image::readMetadata: Color data found
";
+                            std::cout << "Exiv2::Jp2Image::readMetadata: "
+                                     << "Color data found" << std::endl;
 #endif
                             long pad = 3 ; // don't know why there are 3 padding bytes
                             DataBuf data(subBox.length+8);
@@ -256,8 +257,7 @@ namespace Exiv2
                                 fwrite(icc.pData_,icc.size_,1,f);
                                 fclose(f);
                             }
-                            std::cout << "Exiv2::Jp2Image::readMetadata: wrote iccProfile to " << iccPath << std::endl ;
-
+                            std::cout << "Exiv2::Jp2Image::readMetadata: wrote iccProfile " << icc.size_<< " bytes to " << iccPath << std::endl ;
 #endif
                             setIccProfile(icc);
                         }
@@ -266,9 +266,8 @@ namespace Exiv2
                         {
                             io_->read((byte*)&ihdr, sizeof(ihdr));
 #ifdef DEBUG
-                           std::cout << "Exiv2::Jp2Image::readMetadata: Ihdr data found
";
+                            std::cout << "Exiv2::Jp2Image::readMetadata: Ihdr data found" << std::endl;
 #endif
-
                             ihdr.imageHeight            = getLong((byte*)&ihdr.imageHeight, bigEndian);
                             ihdr.imageWidth             = getLong((byte*)&ihdr.imageWidth, bigEndian);
                             ihdr.componentCount         = getShort((byte*)&ihdr.componentCount, bigEndian);
@@ -284,10 +283,11 @@ namespace Exiv2
                     }
                     break;
                 }
+
                 case kJp2BoxTypeUuid:
                 {
 #ifdef DEBUG
-                    std::cout << "Exiv2::Jp2Image::readMetadata: UUID box found
";
+                    std::cout << "Exiv2::Jp2Image::readMetadata: UUID box found" << std::endl;
 #endif
 
                     if (io_->read((byte*)&uuid, sizeof(uuid)) == sizeof(uuid))
@@ -301,7 +301,7 @@ namespace Exiv2
                         if(bIsExif)
                         {
 #ifdef DEBUG
-                           std::cout << "Exiv2::Jp2Image::readMetadata: Exif data found
";
+                           std::cout << "Exiv2::Jp2Image::readMetadata: Exif data found" << std::endl ;
 #endif
                             rawData.alloc(box.length - (sizeof(box) + sizeof(uuid)));
                             bufRead = io_->read(rawData.pData_, rawData.size_);
@@ -342,7 +342,7 @@ namespace Exiv2
                             else
                             {
 #ifndef SUPPRESS_WARNINGS
-                                EXV_WARNING << "Failed to decode Exif metadata.
";
+                                EXV_WARNING << "Failed to decode Exif metadata." << std::endl;
 #endif
                                 exifData_.clear();
                             }
@@ -351,7 +351,7 @@ namespace Exiv2
                         if(bIsIPTC)
                         {
 #ifdef DEBUG
-                           std::cout << "Exiv2::Jp2Image::readMetadata: Iptc data found
";
+                           std::cout << "Exiv2::Jp2Image::readMetadata: Iptc data found" << std::endl;
 #endif
                             rawData.alloc(box.length - (sizeof(box) + sizeof(uuid)));
                             bufRead = io_->read(rawData.pData_, rawData.size_);
@@ -361,7 +361,7 @@ namespace Exiv2
                             if (IptcParser::decode(iptcData_, rawData.pData_, rawData.size_))
                             {
 #ifndef SUPPRESS_WARNINGS
-                                EXV_WARNING << "Failed to decode IPTC metadata.
";
+                                EXV_WARNING << "Failed to decode IPTC metadata." << std::endl;
 #endif
                                 iptcData_.clear();
                             }
@@ -370,7 +370,7 @@ namespace Exiv2
                         if(bIsXMP)
                         {
 #ifdef DEBUG
-                           std::cout << "Exiv2::Jp2Image::readMetadata: Xmp data found
";
+                           std::cout << "Exiv2::Jp2Image::readMetadata: Xmp data found" << std::endl;
 #endif
                             rawData.alloc(box.length - (uint32_t)(sizeof(box) + sizeof(uuid)));
                             bufRead = io_->read(rawData.pData_, rawData.size_);
@@ -383,7 +383,7 @@ namespace Exiv2
                             {
 #ifndef SUPPRESS_WARNINGS
                                 EXV_WARNING << "Removing " << static_cast<uint32_t>(idx)
-                                            << " characters from the beginning of the XMP packet
";
+                                            << " characters from the beginning of the XMP packet" << std::endl;
 #endif
                                 xmpPacket_ = xmpPacket_.substr(idx);
                             }
@@ -391,7 +391,7 @@ namespace Exiv2
                             if (xmpPacket_.size() > 0 && XmpParser::decode(xmpData_, xmpPacket_))
                             {
 #ifndef SUPPRESS_WARNINGS
-                                EXV_WARNING << "Failed to decode XMP metadata.
";
+                                EXV_WARNING << "Failed to decode XMP metadata." << std::endl;
 #endif
                             }
                         }
@@ -407,7 +407,7 @@ namespace Exiv2
 
             // Move to the next box.
             io_->seek(static_cast<long>(position - sizeof(box) + box.length), BasicIo::beg);
-            if (io_->error()/* || io_->eof()*/) throw Error(14);
+            if (io_->error()) throw Error(14);
         }
 
     } // Jp2Image::readMetadata
@@ -475,22 +475,24 @@ namespace Exiv2
                     bLF = true ;
                 }
 
-                if (box.length) switch(box.type)
+                if (box.length && box.type != kJp2BoxTypeClose) switch(box.type)
                 {
                     case kJp2BoxTypeJp2Header:
                     {
                         long restore = io_->tell();
                         lf(out,bLF);
 
-                        while (io_->read((byte*)&subBox, sizeof(subBox)) == sizeof(subBox) && subBox.length )
+                        while (io_->read((byte*)&subBox, sizeof(subBox)) == sizeof(subBox))
                         {
                             subBox.length = getLong((byte*)&subBox.length, bigEndian);
                             subBox.type   = getLong((byte*)&subBox.type, bigEndian);
 
-                            DataBuf data(subBox.length+8);
+                            if (subBox.type == kJp2BoxTypeClose || subBox.length < sizeof(box)) break;
+
+                            DataBuf data(subBox.length-sizeof(box));
                             io_->read(data.pData_,data.size_);
                             if ( bPrint ) out << Internal::stringFormat("%8ld | %8ld |  sub:",restore,subBox.length) << toAscii(subBox.type)
-                                              <<" | " << Internal::binaryToString(data.pData_,data.size_< 40 ? data.size_:40,sizeof(uuid)) << std::endl;
+                                <<" | " << Internal::binaryToString(data,40,0) << std::endl;
 
                             if(subBox.type == kJp2BoxTypeColorHeader)
                             {
@@ -525,19 +527,19 @@ namespace Exiv2
                             }
 
                             DataBuf rawData;
-                                    rawData.alloc(box.length-sizeof(uuid)-sizeof(box));
+                            rawData.alloc(box.length-sizeof(uuid)-sizeof(box));
                             long    bufRead = io_->read(rawData.pData_, rawData.size_);
                             if (io_->error()) throw Error(14);
                             if (bufRead != rawData.size_) throw Error(20);
 
-                            if ( bPrint )out << Internal::binaryToString(rawData.pData_,rawData.size_< 40 ? rawData.size_:40,0);
+                            if ( bPrint )out << Internal::binaryToString(rawData,40,0);
                             lf(out,bLF);
 
                             if(bIsExif && bRecursive && rawData.size_ > 0)
                             {
                                 if ( (rawData.pData_[0]      == rawData.pData_[1])
-                                &&   (rawData.pData_[0]=='I' || rawData.pData_[0]=='M' )
-                                ) {
+                                    &&   (rawData.pData_[0]=='I' || rawData.pData_[0]=='M' )
+                                    ) {
                                     BasicIo::AutoPtr p = BasicIo::AutoPtr(new MemIo(rawData.pData_,rawData.size_));
                                     TiffImage::printTiffStructure(*p,out,option,depth);
                                 }
@@ -593,8 +595,8 @@ namespace Exiv2
         if (!outIo.isopen()) throw Error(21);
 
 #ifdef DEBUG
-        std::cout << "Exiv2::Jp2Image::doWriteMetadata: Writing JPEG-2000 file " << io_->path() << "
";
-        std::cout << "Exiv2::Jp2Image::doWriteMetadata: tmp file created " << outIo.path() << "
";
+        std::cout << "Exiv2::Jp2Image::doWriteMetadata: Writing JPEG-2000 file " << io_->path() << std::endl;
+        std::cout << "Exiv2::Jp2Image::doWriteMetadata: tmp file created " << outIo.path() << std::endl;
 #endif
 
         // Ensure that this is the correct image type
@@ -619,7 +621,7 @@ namespace Exiv2
         while(io_->tell() < io_->size())
         {
 #ifdef DEBUG
-            std::cout << "Exiv2::Jp2Image::doWriteMetadata: Position: " << io_->tell() << " / " << io_->size() << "
";
+            std::cout << "Exiv2::Jp2Image::doWriteMetadata: Position: " << io_->tell() << " / " << io_->size() << std::endl;
 #endif
 
             // Read chunk header.
@@ -636,14 +638,14 @@ namespace Exiv2
 
 #ifdef DEBUG
             std::cout << "Exiv2::Jp2Image::doWriteMetadata: Find box type: " << bheaderBuf.pData_ + 4
-                      << " length: " << box.length << "
";
+                      << " length: " << box.length << std::endl;
 #endif
 
             if (box.length == 0)
             {
 #ifdef DEBUG
                 std::cout << "Exiv2::Jp2Image::doWriteMetadata: Null Box size has been found. "
-                             "This is the last box of file.
";
+                             "This is the last box of file." << std::endl;
 #endif
                 box.length = io_->size() - io_->tell() + 8;
             }
@@ -660,7 +662,7 @@ namespace Exiv2
             if (io_->error())
             {
 #ifdef DEBUG
-                std::cout << "Exiv2::Jp2Image::doWriteMetadata: Error reading source file
";
+                std::cout << "Exiv2::Jp2Image::doWriteMetadata: Error reading source file" << std::endl;
 #endif
 
                 throw Error(14);
@@ -669,7 +671,7 @@ namespace Exiv2
             if (bufRead != (long)(box.length - 8))
             {
 #ifdef DEBUG
-                std::cout << "Exiv2::Jp2Image::doWriteMetadata: Cannot read source file data
";
+                std::cout << "Exiv2::Jp2Image::doWriteMetadata: Cannot read source file data" << std::endl;
 #endif
                 throw Error(20);
             }
@@ -680,7 +682,7 @@ namespace Exiv2
                 {
 
 #ifdef DEBUG
-                    std::cout << "Exiv2::Jp2Image::doWriteMetadata: Write JP2Header box (length: " << box.length << ")
";
+                    std::cout << "Exiv2::Jp2Image::doWriteMetadata: Write JP2Header box (length: " << box.length << ")" << std::endl;
 #endif
                     if (outIo.write(boxBuf.pData_, boxBuf.size_) != boxBuf.size_) throw Error(21);
 
@@ -707,7 +709,7 @@ namespace Exiv2
 
 #ifdef DEBUG
                             std::cout << "Exiv2::Jp2Image::doWriteMetadata: Write box with Exif metadata (length: "
-                                      << boxData.size_ << ")
";
+                                      << boxData.size_ << std::endl;
 #endif
                             if (outIo.write(boxData.pData_, boxData.size_) != boxData.size_) throw Error(21);
                         }
@@ -730,7 +732,7 @@ namespace Exiv2
 
 #ifdef DEBUG
                             std::cout << "Exiv2::Jp2Image::doWriteMetadata: Write box with Iptc metadata (length: "
-                                      << boxData.size_ << ")
";
+                                      << boxData.size_ << std::endl;
 #endif
                             if (outIo.write(boxData.pData_, boxData.size_) != boxData.size_) throw Error(21);
                         }
@@ -741,7 +743,7 @@ namespace Exiv2
                         if (XmpParser::encode(xmpPacket_, xmpData_) > 1)
                         {
 #ifndef SUPPRESS_WARNINGS
-                            EXV_ERROR << "Failed to encode XMP metadata.
";
+                            EXV_ERROR << "Failed to encode XMP metadata." << std::endl;
 #endif
                         }
                     }
@@ -760,7 +762,7 @@ namespace Exiv2
 
 #ifdef DEBUG
                         std::cout << "Exiv2::Jp2Image::doWriteMetadata: Write box with XMP metadata (length: "
-                                  << boxData.size_ << ")
";
+                                  << boxData.size_ << ")" << std::endl;
 #endif
                         if (outIo.write(boxData.pData_, boxData.size_) != boxData.size_) throw Error(21);
                     }
@@ -773,25 +775,25 @@ namespace Exiv2
                     if(memcmp(boxBuf.pData_ + 8, kJp2UuidExif, 16) == 0)
                     {
 #ifdef DEBUG
-                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: strip Exif Uuid box
";
+                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: strip Exif Uuid box" << std::endl;
 #endif
                     }
                     else if(memcmp(boxBuf.pData_ + 8, kJp2UuidIptc, 16) == 0)
                     {
 #ifdef DEBUG
-                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: strip Iptc Uuid box
";
+                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: strip Iptc Uuid box" << std::endl;
 #endif
                     }
                     else if(memcmp(boxBuf.pData_ + 8, kJp2UuidXmp,  16) == 0)
                     {
 #ifdef DEBUG
-                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: strip Xmp Uuid box
";
+                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: strip Xmp Uuid box" << std::endl;
 #endif
                     }
                     else
                     {
 #ifdef DEBUG
-                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: write Uuid box (length: " << box.length << ")
";
+                        std::cout << "Exiv2::Jp2Image::doWriteMetadata: write Uuid box (length: " << box.length << ")" << std::endl;
 #endif
                         if (outIo.write(boxBuf.pData_, boxBuf.size_) != boxBuf.size_) throw Error(21);
                     }
@@ -801,7 +803,7 @@ namespace Exiv2
                 default:
                 {
 #ifdef DEBUG
-                    std::cout << "Exiv2::Jp2Image::doWriteMetadata: write box (length: " << box.length << ")
";
+                    std::cout << "Exiv2::Jp2Image::doWriteMetadata: write box (length: " << box.length << ")" << std::endl;
 #endif
                     if (outIo.write(boxBuf.pData_, boxBuf.size_) != boxBuf.size_) throw Error(21);
 
@@ -811,7 +813,7 @@ namespace Exiv2
         }
 
 #ifdef DEBUG
-        std::cout << "Exiv2::Jp2Image::doWriteMetadata: EOF
";
+        std::cout << "Exiv2::Jp2Image::doWriteMetadata: EOF" << std::endl;
 #endif
 
     } // Jp2Image::doWriteMetadata
diff --git a/test/data/Reagan2.jp2 b/test/data/Reagan2.jp2
new file mode 100644
index 0000000..fa25ec4
Binary files /dev/null and b/test/data/Reagan2.jp2 differ

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list