Add support for writing CPL metadata about sign language video tracks (DoM #2062).
authorCarl Hetherington <cth@carlh.net>
Wed, 4 Aug 2021 18:27:32 +0000 (20:27 +0200)
committerCarl Hetherington <cth@carlh.net>
Wed, 4 Aug 2021 18:27:32 +0000 (20:27 +0200)
src/cpl.cc
src/cpl.h
test/cpl_metadata_test.cc
test/ref/cpl_metadata_test1.xml

index e52f8b34477980d393dbb5c87448debfeca0e269..1f20d13e2e77509b01543cc48636efed36e01af2 100644 (file)
@@ -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) {
index 682437658c1b3a9b522259b7bd950ee821dd7e28..18b00098db59dc4b67b9ec3cdf9b095f8a995343 100644 (file)
--- a/src/cpl.h
+++ b/src/cpl.h
@@ -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;
 
index eeef317263895dd54f96204488f47497fe121e81..511098ea94ded234d4c01d269444567af28ce5db 100644 (file)
@@ -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"),
index 1185abc5caf3bddda6044526c43d20dbffcb11b0..58649e8d97aefc24fc598d167ef3a9048c21e99b 100644 (file)
                 </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>