diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-08-04 20:27:32 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-08-04 20:27:32 +0200 |
| commit | 9bc5ced02a09010b7ed4fd3a62a3d3e0a03665da (patch) | |
| tree | 0718b91e628bcef7019d301131d48a50df9e6532 | |
| parent | 7cbb0cd253c483644d237ec6874032e72d2ed9d4 (diff) | |
Add support for writing CPL metadata about sign language video tracks (DoM #2062).
| -rw-r--r-- | src/cpl.cc | 21 | ||||
| -rw-r--r-- | src/cpl.h | 9 | ||||
| -rw-r--r-- | test/cpl_metadata_test.cc | 2 | ||||
| -rw-r--r-- | test/ref/cpl_metadata_test1.xml | 9 |
4 files changed, 41 insertions, 0 deletions
@@ -312,6 +312,23 @@ CPL::read_composition_metadata_asset (cxml::ConstNodePtr node) _additional_subtitle_languages.push_back (sll_split[i]); } } + + auto eml = node->optional_node_child ("ExtensionMetadataList"); + if (eml) { + for (auto i: eml->node_children("ExtensionMetadata")) { + auto name = i->optional_string_child("Name"); + if (name && *name == "Sign Language Video") { + auto property_list = i->node_child("PropertyList"); + for (auto j: property_list->node_children("Property")) { + auto name = j->optional_string_child("Name"); + auto value = j->optional_string_child("Value"); + if (name && value && *name == "Language Tag") { + _sign_language_video_language = *value; + } + } + } + } + } } @@ -433,6 +450,10 @@ CPL::maybe_write_composition_metadata_asset (xmlpp::Element* node) const /* SMPTE Bv2.1 8.6.3 */ add_extension_metadata ("http://isdcf.com/ns/cplmd/app", "Application", "DCP Constraints Profile", "SMPTE-RDD-52:2020-Bv2.1"); + if (_sign_language_video_language) { + add_extension_metadata ("http://isdcf.com/2017/10/SignLanguageVideo", "Sign Language Video", "Language Tag", *_sign_language_video_language); + } + if (_reels.front()->main_sound()) { auto asset = _reels.front()->main_sound()->asset(); if (asset) { @@ -307,6 +307,14 @@ public: void set_additional_subtitle_languages (std::vector<dcp::LanguageTag> const& lang); + void set_sign_language_video_language (dcp::LanguageTag lang) { + _sign_language_video_language = lang.to_string(); + } + + boost::optional<std::string> sign_language_video_language () const { + return _sign_language_video_language; + } + Standard standard () const { return _standard; } @@ -355,6 +363,7 @@ private: boost::optional<dcp::Size> _main_picture_active_area; /* See note for _release_territory above */ std::vector<std::string> _additional_subtitle_languages; + boost::optional<std::string> _sign_language_video_language; std::vector<std::shared_ptr<Reel>> _reels; diff --git a/test/cpl_metadata_test.cc b/test/cpl_metadata_test.cc index eeef3172..511098ea 100644 --- a/test/cpl_metadata_test.cc +++ b/test/cpl_metadata_test.cc @@ -310,6 +310,8 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test1) auto lt = { dcp::LanguageTag("en-US"), dcp::LanguageTag("fr-ZA") }; cpl.set_additional_subtitle_languages (lt); + cpl.set_sign_language_video_language (dcp::LanguageTag("bzs")); + cpl.write_xml ("build/test/cpl_metadata_write_test1.xml", {}); check_xml ( dcp::file_to_string("test/ref/cpl_metadata_test1.xml"), diff --git a/test/ref/cpl_metadata_test1.xml b/test/ref/cpl_metadata_test1.xml index 1185abc5..58649e8d 100644 --- a/test/ref/cpl_metadata_test1.xml +++ b/test/ref/cpl_metadata_test1.xml @@ -76,6 +76,15 @@ </meta:Property> </meta:PropertyList> </meta:ExtensionMetadata> + <meta:ExtensionMetadata scope="http://isdcf.com/2017/10/SignLanguageVideo"> + <meta:Name>Sign Language Video</meta:Name> + <meta:PropertyList> + <meta:Property> + <meta:Name>Language Tag</meta:Name> + <meta:Value>bzs</meta:Value> + </meta:Property> + </meta:PropertyList> + </meta:ExtensionMetadata> </meta:ExtensionMetadataList> </meta:CompositionMetadataAsset> </AssetList> |
