diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-06-02 00:33:01 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-06-02 00:33:01 +0200 |
| commit | 3c59d07d90e85355e320ed6d30efa30242ed6c31 (patch) | |
| tree | c7ce8819deeda9afbba5a75726e425d8b5f3e705 | |
| parent | dd672d926e3b88cbe42b0778fda397d9e858b592 (diff) | |
Pass through CompositionMetadataAsset correctly.
We weren't saving Id, and were not quite handling FullContentText
correctly.
| -rw-r--r-- | src/cpl.cc | 6 | ||||
| -rw-r--r-- | src/cpl.h | 4 | ||||
| -rw-r--r-- | test/combine_test.cc | 16 |
3 files changed, 24 insertions, 2 deletions
@@ -237,6 +237,8 @@ CPL::write_xml (boost::filesystem::path file, shared_ptr<const CertificateChain> void CPL::read_composition_metadata_asset (cxml::ConstNodePtr node) { + _cpl_metadata_id = remove_urn_uuid(node->string_child("Id")); + auto fctt = node->node_child("FullContentTitleText"); _full_content_title_text = fctt->content(); _full_content_title_text_language = fctt->optional_string_attribute("language"); @@ -337,14 +339,14 @@ CPL::maybe_write_composition_metadata_asset (xmlpp::Element* node) const auto meta = node->add_child("meta:CompositionMetadataAsset"); meta->set_namespace_declaration (cpl_metadata_ns, "meta"); - meta->add_child("Id")->add_child_text("urn:uuid:" + make_uuid()); + meta->add_child("Id")->add_child_text("urn:uuid:" + _cpl_metadata_id); auto mp = _reels.front()->main_picture(); meta->add_child("EditRate")->add_child_text(mp->edit_rate().as_string()); meta->add_child("IntrinsicDuration")->add_child_text(raw_convert<string>(mp->intrinsic_duration())); auto fctt = meta->add_child("FullContentTitleText", "meta"); - if (_full_content_title_text) { + if (_full_content_title_text && !_full_content_title_text->empty()) { fctt->add_child_text (*_full_content_title_text); } if (_full_content_title_text_language) { @@ -323,6 +323,10 @@ private: ContentKind _content_kind; ///< <ContentKind> std::vector<ContentVersion> _content_versions; std::vector<Rating> _ratings; + /** ID for CompositionMetadataAsset tag; either a random one, ready for writing a new tag, + * or the one read in from the existing CPL. + */ + std::string _cpl_metadata_id = make_uuid(); /** Human-readable name of the composition, without any metadata (i.e. no -FTR-EN-XX- etc.) */ boost::optional<std::string> _full_content_title_text; boost::optional<std::string> _full_content_title_text_language; diff --git a/test/combine_test.cc b/test/combine_test.cc index 0dcfd2d3..e1512e41 100644 --- a/test/combine_test.cc +++ b/test/combine_test.cc @@ -397,5 +397,21 @@ BOOST_AUTO_TEST_CASE (combine_two_dcps_with_duplicated_asset) } +BOOST_AUTO_TEST_CASE (check_cpls_unchanged_after_combine) +{ + boost::filesystem::path in = "build/test/combine_one_dcp_with_composition_metadata_in"; + boost::filesystem::path out = "build/test/combine_one_dcp_with_composition_metadata_out"; + auto dcp = make_simple (in); + dcp->write_xml (); + + dcp::combine ({in}, out); + + BOOST_REQUIRE_EQUAL (dcp->cpls().size(), 1U); + auto cpl = dcp->cpls()[0]->file(); + BOOST_REQUIRE (cpl); + check_file (*cpl, out / cpl->filename()); +} + + /* XXX: same CPL names */ /* XXX: Interop PNG subs */ |
