[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:12 UTC 2017
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=163f3ce
The following commit has been merged in the master branch:
commit 163f3ce7f17a143f58d857a5cba3cb7b24436a2a
Author: Robin Mills <robin at clanmills.com>
Date: Fri Oct 14 12:44:41 2016 +0000
#1243 Work-in-progress on writing ICC profiles. Fixed elusive issue in exiv2 -pS foo.jp2
---
include/exiv2/jp2image.hpp | 8 ++++++++
src/jp2image.cpp | 49 ++++++++++++++++++++++++++++++++++++++++------
2 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/include/exiv2/jp2image.hpp b/include/exiv2/jp2image.hpp
index 77318a9..1aba2b7 100644
--- a/include/exiv2/jp2image.hpp
+++ b/include/exiv2/jp2image.hpp
@@ -115,6 +115,14 @@ namespace Exiv2
@return 4 if opening or writing to the associated BasicIo fails
*/
EXV_DLLLOCAL void doWriteMetadata(BasicIo& oIo);
+
+ /*!
+ @brief reformats the Jp2Header to store iccProfile
+ @param oldData DataBufRef to data in the file.
+ @param newData DataBufRef with updated data
+ @return length of box (including the 8 bytes of the box)
+ */
+ uint32_t encodeJp2Header(const DataBuf& oldData,DataBuf& newData);
//@}
}; // class Jp2Image
diff --git a/src/jp2image.cpp b/src/jp2image.cpp
index e0e8e9c..7111120 100644
--- a/src/jp2image.cpp
+++ b/src/jp2image.cpp
@@ -485,25 +485,32 @@ namespace Exiv2
{
lf(out,bLF);
- while (io_->read((byte*)&subBox, sizeof(subBox)) == sizeof(subBox))
+ while (io_->read((byte*)&subBox, sizeof(subBox)) == sizeof(subBox)
+ && io_->tell() < position + box.length) // don't read beyond the box!
{
subBox.length = getLong((byte*)&subBox.length, bigEndian);
subBox.type = getLong((byte*)&subBox.type, bigEndian);
- 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:",io_->tell()-sizeof(box),subBox.length) << toAscii(subBox.type)
- <<" | " << Internal::binaryToString(data,40,0);
+ <<" | " << Internal::binaryToString(data,30,0);
bLF = true;
}
if(subBox.type == kJp2BoxTypeColorHeader)
{
long pad = 3 ; // don't know why there are 3 padding bytes
+ if ( bPrint ) {
+ out << " | pad:" ;
+ for ( int i = 0 ; i < 3 ; i++ ) out<< " " << (int) data.pData_[i];
+ }
long iccLength = getULong(data.pData_+pad, bigEndian);
+ if ( bPrint ) {
+ out << " | iccLength:" << iccLength ;
+ }
+
DataBuf icc(iccLength);
if ( bICC ) out.write((const char*)icc.pData_,icc.size_);
}
@@ -589,6 +596,35 @@ namespace Exiv2
} // Jp2Image::writeMetadata
+ uint32_t Jp2Image::encodeJp2Header(const DataBuf& boxBuf,DataBuf& newBuf)
+ {
+ long result = boxBuf.size_;
+ newBuf.alloc(boxBuf.size_);
+ ::memcpy(newBuf.pData_,boxBuf.pData_,boxBuf.size_);
+#ifdef DEBUG
+ Jp2BoxHeader& box= (Jp2BoxHeader&) *(Jp2BoxHeader*) boxBuf.pData_;
+ int32_t length = getLong((byte*)&box.length, bigEndian);
+
+ uint32_t count = sizeof (Jp2BoxHeader);
+ char* p = (char*) boxBuf.pData_+sizeof(Jp2BoxHeader);
+
+ bool done = false;
+ while ( !done ) {
+ Jp2BoxHeader& subBox = (Jp2BoxHeader&) *((Jp2BoxHeader*)p) ;
+
+ subBox.length = getLong((byte*)&subBox.length, bigEndian);
+ subBox.type = getLong((byte*)&subBox.type, bigEndian);
+ done = subBox.length < sizeof(subBox) || subBox.type == kJp2BoxTypeClose || count >= length;
+ if ( !done ) {
+ std::cout << "subbox: "<< toAscii(subBox.type) << " length = " << subBox.length << std::endl;
+ p += subBox.length ;
+ count += subBox.length;
+ }
+ }
+#endif
+ return (uint32_t) result ;
+ }
+
void Jp2Image::doWriteMetadata(BasicIo& outIo)
{
if (!io_->isopen()) throw Error(20);
@@ -680,11 +716,12 @@ namespace Exiv2
{
case kJp2BoxTypeJp2Header:
{
-
+ DataBuf newBuf ;
+ encodeJp2Header(boxBuf,newBuf);
#ifdef DEBUG
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);
+ if (outIo.write(newBuf.pData_, newBuf.size_) != newBuf.size_) throw Error(21);
// Write all updated metadata here, just after JP2Header.
--
exiv2 packaging
More information about the pkg-kde-commits
mailing list