From 2526dcf5a1240d15b51c732045406562fec9401d Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Fri, 7 Apr 2023 18:40:26 -0700 Subject: [PATCH] const ref to ref conversions --- include/exiv2/cr2image.hpp | 4 ++-- include/exiv2/exif.hpp | 4 ++-- include/exiv2/orfimage.hpp | 4 ++-- include/exiv2/psdimage.hpp | 2 +- include/exiv2/tiffimage.hpp | 4 ++-- src/cr2image.cpp | 12 +++++------- src/exif.cpp | 31 ++++++++++++++----------------- src/orfimage.cpp | 13 +++++-------- src/psdimage.cpp | 2 +- src/tiffimage.cpp | 13 +++++-------- src/tiffimage_int.cpp | 7 +++---- src/tiffimage_int.hpp | 6 +++--- src/tiffvisitor_int.cpp | 4 ++-- src/tiffvisitor_int.hpp | 5 ++--- 14 files changed, 49 insertions(+), 62 deletions(-) diff --git a/include/exiv2/cr2image.hpp b/include/exiv2/cr2image.hpp index b7533b13..d5b12e46 100644 --- a/include/exiv2/cr2image.hpp +++ b/include/exiv2/cr2image.hpp @@ -89,8 +89,8 @@ class EXIV2API Cr2Parser { @brief Encode metadata from the provided metadata to CR2 format. See TiffParser::encode(). */ - static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, const ExifData& exifData, - const IptcData& iptcData, const XmpData& xmpData); + static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData, + IptcData& iptcData, XmpData& xmpData); }; // class Cr2Parser diff --git a/include/exiv2/exif.hpp b/include/exiv2/exif.hpp index 5e14a064..8b1d3d6a 100644 --- a/include/exiv2/exif.hpp +++ b/include/exiv2/exif.hpp @@ -530,7 +530,7 @@ class EXIV2API ExifParser { @return Write method used. */ - static WriteMethod encode(Blob& blob, const byte* pData, size_t size, ByteOrder byteOrder, const ExifData& exifData); + static WriteMethod encode(Blob& blob, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData); /*! @brief Encode metadata from the provided metadata to Exif format. @@ -551,7 +551,7 @@ class EXIV2API ExifParser { @param byteOrder Byte order to use. @param exifData Exif metadata container. */ - static void encode(Blob& blob, ByteOrder byteOrder, const ExifData& exifData) { + static void encode(Blob& blob, ByteOrder byteOrder, ExifData& exifData) { encode(blob, nullptr, 0, byteOrder, exifData); } diff --git a/include/exiv2/orfimage.hpp b/include/exiv2/orfimage.hpp index 86804ea9..262d2499 100644 --- a/include/exiv2/orfimage.hpp +++ b/include/exiv2/orfimage.hpp @@ -78,8 +78,8 @@ class EXIV2API OrfParser { @brief Encode metadata from the provided metadata to ORF format. See TiffParser::encode(). */ - static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, const ExifData& exifData, - const IptcData& iptcData, const XmpData& xmpData); + static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData, + IptcData& iptcData, XmpData& xmpData); }; // class OrfParser // ***************************************************************************** diff --git a/include/exiv2/psdimage.hpp b/include/exiv2/psdimage.hpp index 8fe17b20..d526b454 100644 --- a/include/exiv2/psdimage.hpp +++ b/include/exiv2/psdimage.hpp @@ -75,7 +75,7 @@ class EXIV2API PsdImage : public Image { */ void doWriteMetadata(BasicIo& outIo); - uint32_t writeExifData(const ExifData& exifData, BasicIo& out); + uint32_t writeExifData(ExifData& exifData, BasicIo& out); //@} //! @name Accessors diff --git a/include/exiv2/tiffimage.hpp b/include/exiv2/tiffimage.hpp index e77eb6c7..93973423 100644 --- a/include/exiv2/tiffimage.hpp +++ b/include/exiv2/tiffimage.hpp @@ -137,8 +137,8 @@ class EXIV2API TiffParser { @return Write method used. */ - static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, const ExifData& exifData, - const IptcData& iptcData, const XmpData& xmpData); + static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData, + IptcData& iptcData, XmpData& xmpData); }; // class TiffParser diff --git a/src/cr2image.cpp b/src/cr2image.cpp index 694f7f33..091603d0 100644 --- a/src/cr2image.cpp +++ b/src/cr2image.cpp @@ -103,11 +103,8 @@ ByteOrder Cr2Parser::decode(ExifData& exifData, IptcData& iptcData, XmpData& xmp Internal::TiffMapping::findDecoder, &cr2Header); } -WriteMethod Cr2Parser::encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, - const ExifData& exifData, const IptcData& iptcData, const XmpData& xmpData) { - // Copy to be able to modify the Exif data - ExifData ed = exifData; - +WriteMethod Cr2Parser::encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData, + IptcData& iptcData, XmpData& xmpData) { // Delete IFDs which do not occur in TIFF images static constexpr auto filteredIfds = std::array{ IfdId::panaRawId, @@ -116,13 +113,14 @@ WriteMethod Cr2Parser::encode(BasicIo& io, const byte* pData, size_t size, ByteO #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "Warning: Exif IFD " << filteredIfd << " not encoded\n"; #endif - ed.erase(std::remove_if(ed.begin(), ed.end(), Internal::FindExifdatum(filteredIfd)), ed.end()); + exifData.erase(std::remove_if(exifData.begin(), exifData.end(), Internal::FindExifdatum(filteredIfd)), + exifData.end()); } auto header = Internal::Cr2Header(byteOrder); Internal::OffsetWriter offsetWriter; offsetWriter.setOrigin(Internal::OffsetWriter::cr2RawIfdOffset, Internal::Cr2Header::offset2addr(), byteOrder); - return Internal::TiffParserWorker::encode(io, pData, size, ed, iptcData, xmpData, Internal::Tag::root, + return Internal::TiffParserWorker::encode(io, pData, size, exifData, iptcData, xmpData, Internal::Tag::root, Internal::TiffMapping::findEncoder, &header, &offsetWriter); } diff --git a/src/exif.cpp b/src/exif.cpp index 8f3a0285..4f61b074 100644 --- a/src/exif.cpp +++ b/src/exif.cpp @@ -500,10 +500,7 @@ ByteOrder ExifParser::decode(ExifData& exifData, const byte* pData, size_t size) enum Ptt { pttLen, pttTag, pttIfd }; //! @endcond -WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteOrder byteOrder, - const ExifData& exifData) { - ExifData ed = exifData; - +WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData) { // Delete IFD0 tags that are "not recorded" in compressed images // Reference: Exif 2.2 specs, 4.6.8 Tag Support Levels, section A static constexpr auto filteredIfd0Tags = std::array{ @@ -533,12 +530,12 @@ WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteO "Exif.Canon.AFFineRotation", }; for (auto&& filteredIfd0Tag : filteredIfd0Tags) { - auto pos = ed.findKey(ExifKey(filteredIfd0Tag)); - if (pos != ed.end()) { + auto pos = exifData.findKey(ExifKey(filteredIfd0Tag)); + if (pos != exifData.end()) { #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "Warning: Exif tag " << pos->key() << " not encoded\n"; #endif - ed.erase(pos); + exifData.erase(pos); } } @@ -552,7 +549,7 @@ WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteO #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "Warning: Exif IFD " << filteredIfd << " not encoded\n"; #endif - eraseIfd(ed, filteredIfd); + eraseIfd(exifData, filteredIfd); } // IPTC and XMP are stored elsewhere, not in the Exif APP1 segment. @@ -562,7 +559,7 @@ WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteO // Encode and check if the result fits into a JPEG Exif APP1 segment MemIo mio1; TiffHeader header(byteOrder, 0x00000008, false); - WriteMethod wm = TiffParserWorker::encode(mio1, pData, size, ed, emptyIptc, emptyXmp, Tag::root, + WriteMethod wm = TiffParserWorker::encode(mio1, pData, size, exifData, emptyIptc, emptyXmp, Tag::root, TiffMapping::findEncoder, &header, nullptr); if (mio1.size() <= 65527) { append(blob, mio1.mmap(), mio1.size()); @@ -609,22 +606,22 @@ WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteO switch (ptt) { case pttLen: { delTags = false; - if (auto pos = ed.findKey(ExifKey(key)); pos != ed.end() && sumToLong(*pos) > 32768) { + if (auto pos = exifData.findKey(ExifKey(key)); pos != exifData.end() && sumToLong(*pos) > 32768) { delTags = true; #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Exif tag " << pos->key() << " not encoded\n"; #endif - ed.erase(pos); + exifData.erase(pos); } break; } case pttTag: { if (delTags) { - if (auto pos = ed.findKey(ExifKey(key)); pos != ed.end()) { + if (auto pos = exifData.findKey(ExifKey(key)); pos != exifData.end()) { #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Exif tag " << pos->key() << " not encoded\n"; #endif - ed.erase(pos); + exifData.erase(pos); } } break; @@ -634,19 +631,19 @@ WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteO #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Exif IFD " << key << " not encoded\n"; #endif - eraseIfd(ed, Internal::groupId(key)); + eraseIfd(exifData, Internal::groupId(key)); } break; } } // Delete unknown tags larger than 4kB and known tags larger than 20kB. - for (auto tag_iter = ed.begin(); tag_iter != ed.end();) { + for (auto tag_iter = exifData.begin(); tag_iter != exifData.end();) { if ((tag_iter->size() > 4096 && tag_iter->tagName().substr(0, 2) == "0x") || tag_iter->size() > 20480) { #ifndef SUPPRESS_WARNINGS EXV_WARNING << "Exif tag " << tag_iter->key() << " not encoded\n"; #endif - tag_iter = ed.erase(tag_iter); + tag_iter = exifData.erase(tag_iter); } else { ++tag_iter; } @@ -654,7 +651,7 @@ WriteMethod ExifParser::encode(Blob& blob, const byte* pData, size_t size, ByteO // Encode the remaining Exif tags again, don't care if it fits this time MemIo mio2; - wm = TiffParserWorker::encode(mio2, pData, size, ed, emptyIptc, emptyXmp, Tag::root, TiffMapping::findEncoder, + wm = TiffParserWorker::encode(mio2, pData, size, exifData, emptyIptc, emptyXmp, Tag::root, TiffMapping::findEncoder, &header, nullptr); append(blob, mio2.mmap(), mio2.size()); #ifdef EXIV2_DEBUG_MESSAGES diff --git a/src/orfimage.cpp b/src/orfimage.cpp index 86dd5de1..0dfeeb90 100644 --- a/src/orfimage.cpp +++ b/src/orfimage.cpp @@ -116,11 +116,8 @@ ByteOrder OrfParser::decode(ExifData& exifData, IptcData& iptcData, XmpData& xmp &orfHeader); } -WriteMethod OrfParser::encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, - const ExifData& exifData, const IptcData& iptcData, const XmpData& xmpData) { - // Copy to be able to modify the Exif data - ExifData ed = exifData; - +WriteMethod OrfParser::encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData, + IptcData& iptcData, XmpData& xmpData) { // Delete IFDs which do not occur in TIFF images static constexpr auto filteredIfds = { IfdId::panaRawId, @@ -129,12 +126,12 @@ WriteMethod OrfParser::encode(BasicIo& io, const byte* pData, size_t size, ByteO #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "Warning: Exif IFD " << filteredIfd << " not encoded\n"; #endif - ed.erase(std::remove_if(ed.begin(), ed.end(), FindExifdatum(filteredIfd)), ed.end()); + exifData.erase(std::remove_if(exifData.begin(), exifData.end(), FindExifdatum(filteredIfd)), exifData.end()); } OrfHeader header(byteOrder); - return TiffParserWorker::encode(io, pData, size, ed, iptcData, xmpData, Tag::root, TiffMapping::findEncoder, &header, - nullptr); + return TiffParserWorker::encode(io, pData, size, exifData, iptcData, xmpData, Tag::root, TiffMapping::findEncoder, + &header, nullptr); } // ************************************************************************* diff --git a/src/psdimage.cpp b/src/psdimage.cpp index 8db01c80..1a8e4c61 100644 --- a/src/psdimage.cpp +++ b/src/psdimage.cpp @@ -579,7 +579,7 @@ uint32_t PsdImage::writeIptcData(const IptcData& iptcData, BasicIo& out) { return resLength; } // PsdImage::writeIptcData -uint32_t PsdImage::writeExifData(const ExifData& exifData, BasicIo& out) { +uint32_t PsdImage::writeExifData(ExifData& exifData, BasicIo& out) { uint32_t resLength = 0; byte buf[8]; diff --git a/src/tiffimage.cpp b/src/tiffimage.cpp index bcdb3282..e2743015 100644 --- a/src/tiffimage.cpp +++ b/src/tiffimage.cpp @@ -216,11 +216,8 @@ ByteOrder TiffParser::decode(ExifData& exifData, IptcData& iptcData, XmpData& xm return TiffParserWorker::decode(exifData, iptcData, xmpData, pData, size, root, TiffMapping::findDecoder); } // TiffParser::decode -WriteMethod TiffParser::encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, - const ExifData& exifData, const IptcData& iptcData, const XmpData& xmpData) { - // Copy to be able to modify the Exif data - ExifData ed = exifData; - +WriteMethod TiffParser::encode(BasicIo& io, const byte* pData, size_t size, ByteOrder byteOrder, ExifData& exifData, + IptcData& iptcData, XmpData& xmpData) { // Delete IFDs which do not occur in TIFF images static constexpr auto filteredIfds = std::array{ IfdId::panaRawId, @@ -229,12 +226,12 @@ WriteMethod TiffParser::encode(BasicIo& io, const byte* pData, size_t size, Byte #ifdef EXIV2_DEBUG_MESSAGES std::cerr << "Warning: Exif IFD " << filteredIfd << " not encoded\n"; #endif - ed.erase(std::remove_if(ed.begin(), ed.end(), FindExifdatum(filteredIfd)), ed.end()); + exifData.erase(std::remove_if(exifData.begin(), exifData.end(), FindExifdatum(filteredIfd)), exifData.end()); } TiffHeader header(byteOrder); - return TiffParserWorker::encode(io, pData, size, ed, iptcData, xmpData, Tag::root, TiffMapping::findEncoder, &header, - nullptr); + return TiffParserWorker::encode(io, pData, size, exifData, iptcData, xmpData, Tag::root, TiffMapping::findEncoder, + &header, nullptr); } // TiffParser::encode // ************************************************************************* diff --git a/src/tiffimage_int.cpp b/src/tiffimage_int.cpp index 48defae2..e62c5228 100644 --- a/src/tiffimage_int.cpp +++ b/src/tiffimage_int.cpp @@ -2036,10 +2036,9 @@ ByteOrder TiffParserWorker::decode(ExifData& exifData, IptcData& iptcData, XmpDa } // TiffParserWorker::decode -WriteMethod TiffParserWorker::encode(BasicIo& io, const byte* pData, size_t size, const ExifData& exifData, - const IptcData& iptcData, const XmpData& xmpData, uint32_t root, - FindEncoderFct findEncoderFct, TiffHeaderBase* pHeader, - OffsetWriter* pOffsetWriter) { +WriteMethod TiffParserWorker::encode(BasicIo& io, const byte* pData, size_t size, ExifData& exifData, + IptcData& iptcData, XmpData& xmpData, uint32_t root, FindEncoderFct findEncoderFct, + TiffHeaderBase* pHeader, OffsetWriter* pOffsetWriter) { /* 1) parse the binary image, if one is provided, and 2) attempt updating the parsed tree in-place ("non-intrusive writing") diff --git a/src/tiffimage_int.hpp b/src/tiffimage_int.hpp index 668caa9f..de9f5176 100644 --- a/src/tiffimage_int.hpp +++ b/src/tiffimage_int.hpp @@ -216,9 +216,9 @@ class TiffParserWorker { writing"). If there is a parsed tree, it is only used to access the image data in this case. */ - static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, const ExifData& exifData, - const IptcData& iptcData, const XmpData& xmpData, uint32_t root, - FindEncoderFct findEncoderFct, TiffHeaderBase* pHeader, OffsetWriter* pOffsetWriter); + static WriteMethod encode(BasicIo& io, const byte* pData, size_t size, ExifData& exifData, IptcData& iptcData, + XmpData& xmpData, uint32_t root, FindEncoderFct findEncoderFct, TiffHeaderBase* pHeader, + OffsetWriter* pOffsetWriter); private: /*! diff --git a/src/tiffvisitor_int.cpp b/src/tiffvisitor_int.cpp index c21861e3..c33d2104 100644 --- a/src/tiffvisitor_int.cpp +++ b/src/tiffvisitor_int.cpp @@ -443,10 +443,10 @@ void TiffDecoder::visitBinaryElement(TiffBinaryElement* object) { decodeTiffEntry(object); } -TiffEncoder::TiffEncoder(ExifData exifData, const IptcData& iptcData, const XmpData& xmpData, TiffComponent* pRoot, +TiffEncoder::TiffEncoder(ExifData& exifData, IptcData& iptcData, XmpData& xmpData, TiffComponent* pRoot, const bool isNewImage, const PrimaryGroups* pPrimaryGroups, const TiffHeaderBase* pHeader, FindEncoderFct findEncoderFct) : - exifData_(std::move(exifData)), + exifData_(exifData), iptcData_(iptcData), xmpData_(xmpData), pHeader_(pHeader), diff --git a/src/tiffvisitor_int.hpp b/src/tiffvisitor_int.hpp index c8c69253..748dd3a0 100644 --- a/src/tiffvisitor_int.hpp +++ b/src/tiffvisitor_int.hpp @@ -349,9 +349,8 @@ class TiffEncoder : public TiffVisitor { to, the image with the metadata to encode and a function to find special encoders. */ - TiffEncoder(ExifData exifData, const IptcData& iptcData, const XmpData& xmpData, TiffComponent* pRoot, - bool isNewImage, const PrimaryGroups* pPrimaryGroups, const TiffHeaderBase* pHeader, - FindEncoderFct findEncoderFct); + TiffEncoder(ExifData& exifData, IptcData& iptcData, XmpData& xmpData, TiffComponent* pRoot, bool isNewImage, + const PrimaryGroups* pPrimaryGroups, const TiffHeaderBase* pHeader, FindEncoderFct findEncoderFct); TiffEncoder(const TiffEncoder&) = delete; TiffEncoder& operator=(const TiffEncoder&) = delete; //! Virtual destructor