summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-12-22 01:59:11 +0100
committerCarl Hetherington <cth@carlh.net>2022-12-22 23:43:03 +0100
commit4ddd146759e5346bd6c4b4444ee1424327f14a2a (patch)
treec927e85f5a2a040788b159f6591c3679b9bfab49 /src
parentf657337815c5f21e2edd99fdaa501f0ff8acc6b1 (diff)
Write OriginalFileName tags in PKL (DoM #2394).
Without these it EasyDCP gives errors like "Id field in PKL must match uuid in asset" "Each Id used in the PKL files must be unique or reference the same file" which seem wrong but, as usual, here we are.
Diffstat (limited to 'src')
-rw-r--r--src/asset.cc2
-rw-r--r--src/interop_subtitle_asset.cc2
-rw-r--r--src/pkl.cc7
-rw-r--r--src/pkl.h11
4 files changed, 16 insertions, 6 deletions
diff --git a/src/asset.cc b/src/asset.cc
index 372779b1..c164a26b 100644
--- a/src/asset.cc
+++ b/src/asset.cc
@@ -98,7 +98,7 @@ Asset::add_to_pkl (shared_ptr<PKL> pkl, path root) const
return;
}
- pkl->add_asset (_id, _id, hash(), file_size(_file.get()), pkl_type(pkl->standard()));
+ pkl->add_asset(_id, _id, hash(), file_size(_file.get()), pkl_type(pkl->standard()), _file->filename().string());
}
diff --git a/src/interop_subtitle_asset.cc b/src/interop_subtitle_asset.cc
index ce3a4943..d58e16a3 100644
--- a/src/interop_subtitle_asset.cc
+++ b/src/interop_subtitle_asset.cc
@@ -290,7 +290,7 @@ InteropSubtitleAsset::add_to_pkl (shared_ptr<PKL> pkl, boost::filesystem::path r
auto im = dynamic_pointer_cast<dcp::SubtitleImage> (i);
if (im) {
auto png_image = im->png_image ();
- pkl->add_asset (im->id(), optional<string>(), make_digest(png_image), png_image.size(), "image/png");
+ pkl->add_asset(im->id(), optional<string>(), make_digest(png_image), png_image.size(), "image/png", root.filename().string());
}
}
}
diff --git a/src/pkl.cc b/src/pkl.cc
index 5465d578..9ba716fb 100644
--- a/src/pkl.cc
+++ b/src/pkl.cc
@@ -87,9 +87,9 @@ PKL::PKL (boost::filesystem::path file)
void
-PKL::add_asset (std::string id, boost::optional<std::string> annotation_text, std::string hash, int64_t size, std::string type)
+PKL::add_asset(std::string id, boost::optional<std::string> annotation_text, std::string hash, int64_t size, std::string type, std::string original_filename)
{
- _asset_list.push_back (make_shared<Asset>(id, annotation_text, hash, size, type));
+ _asset_list.push_back(make_shared<Asset>(id, annotation_text, hash, size, type, original_filename));
}
@@ -122,6 +122,9 @@ PKL::write_xml (boost::filesystem::path file, shared_ptr<const CertificateChain>
asset->add_child("Hash")->add_child_text (i->hash());
asset->add_child("Size")->add_child_text (raw_convert<string>(i->size()));
asset->add_child("Type")->add_child_text (i->type());
+ if (auto filename = i->original_filename()) {
+ asset->add_child("OriginalFileName")->add_child_text(*filename);
+ }
}
indent (pkl, 0);
diff --git a/src/pkl.h b/src/pkl.h
index 8b1b88a3..8a1d07f9 100644
--- a/src/pkl.h
+++ b/src/pkl.h
@@ -66,7 +66,7 @@ public:
boost::optional<std::string> type (std::string id) const;
void clear_assets();
- void add_asset (std::string id, boost::optional<std::string> annotation_text, std::string hash, int64_t size, std::string type);
+ void add_asset(std::string id, boost::optional<std::string> annotation_text, std::string hash, int64_t size, std::string type, std::string original_filename);
void write_xml (boost::filesystem::path file, std::shared_ptr<const CertificateChain> signer) const;
/** @return the most recent disk file used to read or write this PKL, if there is one */
@@ -83,14 +83,16 @@ public:
, _hash (node->string_child("Hash"))
, _size (node->number_child<int64_t>("Size"))
, _type (node->string_child("Type"))
+ , _original_filename(node->optional_string_child("OriginalFileName"))
{}
- Asset (std::string id, boost::optional<std::string> annotation_text, std::string hash, int64_t size, std::string type)
+ Asset(std::string id, boost::optional<std::string> annotation_text, std::string hash, int64_t size, std::string type, std::string original_filename)
: Object (id)
, _annotation_text (annotation_text)
, _hash (hash)
, _size (size)
, _type (type)
+ , _original_filename(original_filename)
{}
boost::optional<std::string> annotation_text () const {
@@ -109,11 +111,16 @@ public:
return _type;
}
+ boost::optional<std::string> original_filename() const {
+ return _original_filename;
+ }
+
private:
boost::optional<std::string> _annotation_text;
std::string _hash;
int64_t _size = 0;
std::string _type;
+ boost::optional<std::string> _original_filename;
};
std::vector<std::shared_ptr<Asset>> asset_list () const {