fixed bugs in metadata saving

(cherry picked from commit 880b1d3d865a7820051cf3023cc58802daca28b0)
This commit is contained in:
Alberto Griggio
2019-05-15 05:57:14 -07:00
committed by Lawrence Lee
parent 1a771fa211
commit a4b0801646
4 changed files with 88 additions and 52 deletions

View File

@@ -20,6 +20,8 @@
#include <stdio.h>
#include <glib/gstdio.h>
#include <iostream>
#include "metadata.h"
#include "settings.h"
#include "../rtgui/version.h"
@@ -65,7 +67,7 @@ Exiv2Metadata::Exiv2Metadata():
Exiv2Metadata::Exiv2Metadata(const Glib::ustring &path):
src_(""),
src_(path),
merge_xmp_(settings->metadata_xmp_sync != Settings::MetadataXmpSync::NONE),
image_(nullptr),
exif_(new rtengine::procparams::ExifPairs),
@@ -154,20 +156,27 @@ void Exiv2Metadata::setIptc(const rtengine::procparams::IPTCPairs &iptc)
void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst) const
{
auto xmp = getXmpSidecar(src_);
Exiv2::ExifData exif;
Exiv2::IptcData iptc;
Exiv2::moveXmpToExif(xmp, exif);
Exiv2::moveXmpToIptc(xmp, iptc);
try {
auto xmp = getXmpSidecar(src_);
Exiv2::ExifData exif;
Exiv2::IptcData iptc;
Exiv2::moveXmpToIptc(xmp, iptc);
Exiv2::moveXmpToExif(xmp, exif);
for (auto &datum : exif) {
dst->exifData()[datum.key()] = datum;
}
for (auto &datum : iptc) {
dst->iptcData()[datum.key()] = datum;
}
for (auto &datum : xmp) {
dst->xmpData()[datum.key()] = datum;
for (auto &datum : exif) {
dst->exifData()[datum.key()] = datum;
}
for (auto &datum : iptc) {
dst->iptcData()[datum.key()] = datum;
}
for (auto &datum : xmp) {
dst->xmpData()[datum.key()] = datum;
}
} catch (Exiv2::AnyError &exc) {
if (settings->verbose) {
std::cerr << "Error loading metadata from XMP sidecar: "
<< exc.what() << std::endl;
}
}
}
@@ -288,4 +297,16 @@ Exiv2::XmpData Exiv2Metadata::getXmpSidecar(const Glib::ustring &path)
return ret;
}
void Exiv2Metadata::init()
{
Exiv2::XmpParser::initialize();
}
void Exiv2Metadata::cleanup()
{
Exiv2::XmpParser::terminate();
}
} // namespace rtengine