From 0a8f2a1a2058f0461a7f978295e31af34a03bb40 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 15 Apr 2024 23:29:36 +0200 Subject: [PATCH] Add Dolby EDR metadata support (GH #12). --- src/cpl.cc | 5 +++ src/cpl.h | 9 +++++ test/cpl_metadata_test.cc | 17 +++++++++ test/ref/cpl_metadata_test5.xml | 68 +++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 test/ref/cpl_metadata_test5.xml diff --git a/src/cpl.cc b/src/cpl.cc index da4e0563..5ff86fda 100644 --- a/src/cpl.cc +++ b/src/cpl.cc @@ -370,6 +370,7 @@ CPL::read_composition_metadata_asset (cxml::ConstNodePtr node) }; _sign_language_video_language = extension_metadata("http://isdcf.com/2017/10/SignLanguageVideo", "Sign Language Video", "Language Tag"); + _dolby_edr_image_transfer_function = extension_metadata("http://www.dolby.com/schemas/2014/EDR-Metadata", "Dolby EDR", "image transfer function"); } @@ -568,6 +569,10 @@ CPL::maybe_write_composition_metadata_asset(xmlpp::Element* node, bool include_m add_extension_metadata ("http://isdcf.com/2017/10/SignLanguageVideo", "Sign Language Video", "Language Tag", *_sign_language_video_language); } + if (_dolby_edr_image_transfer_function) { + add_extension_metadata("http://www.dolby.com/schemas/2014/EDR-Metadata", "Dolby EDR", "image transfer function", *_dolby_edr_image_transfer_function); + } + if (_reels.front()->main_sound()) { auto asset = _reels.front()->main_sound()->asset(); if (asset && include_mca_subdescriptors) { diff --git a/src/cpl.h b/src/cpl.h index 25c294eb..fb4f3376 100644 --- a/src/cpl.h +++ b/src/cpl.h @@ -326,6 +326,14 @@ public: return _sign_language_video_language; } + void set_dolby_edr_image_transfer_function(std::string function) { + _dolby_edr_image_transfer_function = function; + } + + boost::optional dolby_edr_image_transfer_function() const { + return _dolby_edr_image_transfer_function; + } + Standard standard () const { return _standard; } @@ -383,6 +391,7 @@ private: /* See note for _release_territory above */ std::vector _additional_subtitle_languages; boost::optional _sign_language_video_language; + boost::optional _dolby_edr_image_transfer_function; bool _read_composition_metadata = false; std::vector> _reels; diff --git a/test/cpl_metadata_test.cc b/test/cpl_metadata_test.cc index f704fc9a..a811e56f 100644 --- a/test/cpl_metadata_test.cc +++ b/test/cpl_metadata_test.cc @@ -467,3 +467,20 @@ BOOST_AUTO_TEST_CASE(check_sign_language_video_language) BOOST_CHECK_EQUAL(check.sign_language_video_language().get_value_or(""), "es-PT"); } + + +BOOST_AUTO_TEST_CASE(check_dolby_edr_metadata) +{ + dcp::CPL cpl("test/ref/cpl_metadata_test3.xml"); + cpl.set_dolby_edr_image_transfer_function("PQ10K"); + cpl.write_xml("build/test/check_dolby_edr_metadata.xml", {}); + check_xml( + dcp::file_to_string("test/ref/cpl_metadata_test5.xml"), + dcp::file_to_string("build/test/check_dolby_edr_metadata.xml"), + {"Id"} + ); + + dcp::CPL check("build/test/check_dolby_edr_metadata.xml"); + BOOST_CHECK_EQUAL(check.dolby_edr_image_transfer_function().get_value_or(""), "PQ10K"); +} + diff --git a/test/ref/cpl_metadata_test5.xml b/test/ref/cpl_metadata_test5.xml new file mode 100644 index 00000000..55209e53 --- /dev/null +++ b/test/ref/cpl_metadata_test5.xml @@ -0,0 +1,68 @@ + + + urn:uuid:81fb54df-e1bf-4647-8788-ea7ba154375b + + 2020-08-28T13:35:06+02:00 + libdcp1.6.4devel + libdcp1.6.4devel + + feature + + id + version + + + + + urn:uuid:46c3eb45-15e5-47d6-8684-d8641e4dc516 + + + urn:uuid:e98d059d-645f-4343-a30f-edc61d58b8e0 + 24 1 + 24 + 0 + 24 + JtPL3uT3jyKMLysaqgdBWQb/n2E= + 24 1 + 1998 1080 + + + urn:uuid:d36f4bb3-c4fa-4a95-9915-6fec3110cd71 + 24 1 + 24 + + 71/L,R,C,LFE,-,-,-,-,-,-,-,-,-,FSKSync,-,- + 48000 1 + + 1998 + 1080 + + + 1440 + 1080 + + + + Application + + + DCP Constraints Profile + SMPTE-RDD-52:2020-Bv2.1 + + + + + Dolby EDR + + + image transfer function + PQ10K + + + + + + + + + -- 2.30.2