From 322e709bcb29cdb49db1b49a42ff3877e9c349d0 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Thu, 17 Sep 2020 23:17:45 -0700 Subject: [PATCH] metadata: do not accidentally remove exif tags when embedding the arp sidecar in XMP Fixes #127 (cherry picked from commit 49cbe9bd19db558a4be36221472cbb5e78aa95a2) --- rtengine/imageio.cc | 2 +- rtengine/metadata.cc | 6 ++++-- rtengine/metadata.h | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 4d8f93d55..b38fc745c 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -1370,7 +1370,7 @@ bool ImageIO::saveMetadata(const Glib::ustring &fname) const if (has_meta) { try { - metadataInfo.saveToImage(fname); + metadataInfo.saveToImage(fname, false); // auto src = open_exiv2(metadataInfo.filename()); // auto dst = open_exiv2(fname); // src->readMetadata(); diff --git a/rtengine/metadata.cc b/rtengine/metadata.cc index 8028e933f..049233cc6 100644 --- a/rtengine/metadata.cc +++ b/rtengine/metadata.cc @@ -217,7 +217,7 @@ void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst) const } -void Exiv2Metadata::saveToImage(const Glib::ustring &path) const +void Exiv2Metadata::saveToImage(const Glib::ustring &path, bool preserve_all_tags) const { auto dst = open_exiv2(path, false); if (image_.get()) { @@ -227,7 +227,9 @@ void Exiv2Metadata::saveToImage(const Glib::ustring &path) const do_merge_xmp(dst.get()); } auto srcexif = image_->exifData(); - remove_unwanted(srcexif); + if (!preserve_all_tags) { + remove_unwanted(srcexif); + } dst->setExifData(srcexif); } else { dst->setExifData(exif_data_); diff --git a/rtengine/metadata.h b/rtengine/metadata.h index 57484d234..0f9f7919d 100644 --- a/rtengine/metadata.h +++ b/rtengine/metadata.h @@ -53,7 +53,7 @@ public: void setExif(const rtengine::procparams::ExifPairs& exif); void setIptc(const rtengine::procparams::IPTCPairs& iptc); - void saveToImage(const Glib::ustring& path) const; + void saveToImage(const Glib::ustring& path, bool preserve_all_tags) const; void saveToXmp(const Glib::ustring& path) const; void setExifKeys(const std::vector *keys);