diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-12-22 01:59:11 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-12-22 23:43:03 +0100 |
| commit | 4ddd146759e5346bd6c4b4444ee1424327f14a2a (patch) | |
| tree | c927e85f5a2a040788b159f6591c3679b9bfab49 /src | |
| parent | f657337815c5f21e2edd99fdaa501f0ff8acc6b1 (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.cc | 2 | ||||
| -rw-r--r-- | src/interop_subtitle_asset.cc | 2 | ||||
| -rw-r--r-- | src/pkl.cc | 7 | ||||
| -rw-r--r-- | src/pkl.h | 11 |
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()); } } } @@ -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); @@ -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 { |
