metadata: filter out unwanted tags when syncing with xmp sidecars

(cherry picked from commit 239f3f59b931efb15482134fffd5f6065616e574)
This commit is contained in:
Alberto Griggio 2021-01-12 00:21:58 -08:00 committed by Lawrence Lee
parent d16bc6f6ea
commit 3d209e687d
No known key found for this signature in database
GPG Key ID: 048FF2B76A63895F
2 changed files with 10 additions and 6 deletions

View File

@ -130,7 +130,7 @@ void Exiv2Metadata::load() const
}
if (merge_xmp_) {
do_merge_xmp(image_.get());
do_merge_xmp(image_.get(), false);
}
}
}
@ -190,15 +190,19 @@ void Exiv2Metadata::setIptc(const rtengine::procparams::IPTCPairs &iptc)
*iptc_ = iptc;
}
void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst) const
void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst, bool keep_all) const
{
try {
auto xmp = getXmpSidecar(src_);
Exiv2::ExifData exif;
Exiv2::IptcData iptc;
Exiv2::copyXmpToIptc(xmp, iptc);
Exiv2::copyXmpToExif(xmp, exif);
Exiv2::moveXmpToExif(xmp, exif);
if (!keep_all) {
remove_unwanted(exif);
}
for (auto &datum : exif) {
dst->exifData()[datum.key()] = datum;
}
@ -224,7 +228,7 @@ void Exiv2Metadata::saveToImage(const Glib::ustring &path, bool preserve_all_tag
dst->setIptcData(image_->iptcData());
dst->setXmpData(image_->xmpData());
if (merge_xmp_) {
do_merge_xmp(dst.get());
do_merge_xmp(dst.get(), preserve_all_tags);
}
auto srcexif = image_->exifData();
if (!preserve_all_tags) {
@ -258,7 +262,7 @@ void Exiv2Metadata::saveToImage(const Glib::ustring &path, bool preserve_all_tag
!dst->xmpData().empty()) {
dst->xmpData().clear();
if (!xmp_tried && merge_xmp_) {
do_merge_xmp(dst.get());
do_merge_xmp(dst.get(), preserve_all_tags);
xmp_tried = true;
}
} else if (msg.find("IPTC") != std::string::npos &&

View File

@ -67,7 +67,7 @@ public:
static void cleanup();
private:
void do_merge_xmp(Exiv2::Image* dst) const;
void do_merge_xmp(Exiv2::Image* dst, bool keep_all) const;
void import_exif_pairs(Exiv2::ExifData& out) const;
void import_iptc_pairs(Exiv2::IptcData& out) const;
void remove_unwanted(Exiv2::ExifData& dst) const;