From 700eeccb393cf283076cc0617585f35d93b8bd2d Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 8 May 2020 02:11:08 -0700 Subject: [PATCH] metadata: don't raise error if exif is empty when opening an image for saving Fixes #79 (regression introduced by 26b8860d4bb803cff0277c7b2353b58b5e02fbc6) (cherry picked from commit 62ae8e15b8ca07cbe545ed42c323e986448c3213) --- rtengine/metadata.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rtengine/metadata.cc b/rtengine/metadata.cc index 6e2b53ed8..4c347c86c 100644 --- a/rtengine/metadata.cc +++ b/rtengine/metadata.cc @@ -52,7 +52,8 @@ private: constexpr size_t IMAGE_CACHE_SIZE = 200; -std::unique_ptr open_exiv2(const Glib::ustring& fname) +std::unique_ptr open_exiv2(const Glib::ustring& fname, + bool check_exif) { #ifdef EXV_UNICODE_PATH glong ws_size = 0; @@ -68,7 +69,7 @@ std::unique_ptr open_exiv2(const Glib::ustring& fname) auto image = Exiv2::ImageFactory::open(Glib::filename_from_utf8(fname)); #endif image->readMetadata(); - if (!image->good() || image->exifData().empty()) { + if (!image->good() || (check_exif && image->exifData().empty())) { #if EXIV2_TEST_VERSION(0,27,0) auto error_code = Exiv2::kerErrorMessage; #else @@ -121,7 +122,7 @@ void Exiv2Metadata::load() const if (cache_ && cache_->get(src_, val) && val.second >= finfo->modification_time()) { image_ = val.first; } else { - auto img = open_exiv2(src_); + auto img = open_exiv2(src_, true); image_.reset(img.release()); if (cache_) { cache_->set(src_, CacheVal(image_, finfo->modification_time())); @@ -218,7 +219,7 @@ void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst) const void Exiv2Metadata::saveToImage(const Glib::ustring &path) const { - auto dst = open_exiv2(path); + auto dst = open_exiv2(path, false); if (image_.get()) { dst->setIptcData(image_->iptcData()); dst->setXmpData(image_->xmpData()); @@ -432,7 +433,7 @@ Exiv2::XmpData Exiv2Metadata::getXmpSidecar(const Glib::ustring &path) Exiv2::XmpData ret; auto fname = xmpSidecarPath(path); if (Glib::file_test(fname, Glib::FILE_TEST_EXISTS)) { - auto image = open_exiv2(fname); + auto image = open_exiv2(fname, false); ret = image->xmpData(); } return ret;