diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-04-15 23:29:36 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2024-04-15 23:29:36 +0200 |
| commit | 0a8f2a1a2058f0461a7f978295e31af34a03bb40 (patch) | |
| tree | 52d81af15a785b1511e7c3c9576dba67dc7cf403 | |
| parent | f22433bfab1cae79a9f4cab7286a27ca09d11715 (diff) | |
Add Dolby EDR metadata support (GH #12).
| -rw-r--r-- | src/cpl.cc | 5 | ||||
| -rw-r--r-- | src/cpl.h | 9 | ||||
| -rw-r--r-- | test/cpl_metadata_test.cc | 17 | ||||
| -rw-r--r-- | test/ref/cpl_metadata_test5.xml | 68 |
4 files changed, 99 insertions, 0 deletions
@@ -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) { @@ -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<std::string> 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<std::string> _additional_subtitle_languages; boost::optional<std::string> _sign_language_video_language; + boost::optional<std::string> _dolby_edr_image_transfer_function; bool _read_composition_metadata = false; std::vector<std::shared_ptr<Reel>> _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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CompositionPlaylist xmlns="http://www.smpte-ra.org/schemas/429-7/2006/CPL"> + <Id>urn:uuid:81fb54df-e1bf-4647-8788-ea7ba154375b</Id> + <AnnotationText></AnnotationText> + <IssueDate>2020-08-28T13:35:06+02:00</IssueDate> + <Issuer>libdcp1.6.4devel</Issuer> + <Creator>libdcp1.6.4devel</Creator> + <ContentTitleText></ContentTitleText> + <ContentKind>feature</ContentKind> + <ContentVersion> + <Id>id</Id> + <LabelText>version</LabelText> + </ContentVersion> + <RatingList/> + <ReelList> + <Reel> + <Id>urn:uuid:46c3eb45-15e5-47d6-8684-d8641e4dc516</Id> + <AssetList> + <MainPicture> + <Id>urn:uuid:e98d059d-645f-4343-a30f-edc61d58b8e0</Id> + <EditRate>24 1</EditRate> + <IntrinsicDuration>24</IntrinsicDuration> + <EntryPoint>0</EntryPoint> + <Duration>24</Duration> + <Hash>JtPL3uT3jyKMLysaqgdBWQb/n2E=</Hash> + <FrameRate>24 1</FrameRate> + <ScreenAspectRatio>1998 1080</ScreenAspectRatio> + </MainPicture> + <meta:CompositionMetadataAsset xmlns:meta="http://www.smpte-ra.org/schemas/429-16/2014/CPL-Metadata"> + <Id>urn:uuid:d36f4bb3-c4fa-4a95-9915-6fec3110cd71</Id> + <EditRate>24 1</EditRate> + <IntrinsicDuration>24</IntrinsicDuration> + <meta:FullContentTitleText/> + <meta:MainSoundConfiguration>71/L,R,C,LFE,-,-,-,-,-,-,-,-,-,FSKSync,-,-</meta:MainSoundConfiguration> + <meta:MainSoundSampleRate>48000 1</meta:MainSoundSampleRate> + <meta:MainPictureStoredArea> + <meta:Width>1998</meta:Width> + <meta:Height>1080</meta:Height> + </meta:MainPictureStoredArea> + <meta:MainPictureActiveArea> + <meta:Width>1440</meta:Width> + <meta:Height>1080</meta:Height> + </meta:MainPictureActiveArea> + <meta:ExtensionMetadataList> + <meta:ExtensionMetadata scope="http://isdcf.com/ns/cplmd/app"> + <meta:Name>Application</meta:Name> + <meta:PropertyList> + <meta:Property> + <meta:Name>DCP Constraints Profile</meta:Name> + <meta:Value>SMPTE-RDD-52:2020-Bv2.1</meta:Value> + </meta:Property> + </meta:PropertyList> + </meta:ExtensionMetadata> + <meta:ExtensionMetadata scope="http://www.dolby.com/schemas/2014/EDR-Metadata"> + <meta:Name>Dolby EDR</meta:Name> + <meta:PropertyList> + <meta:Property> + <meta:Name>image transfer function</meta:Name> + <meta:Value>PQ10K</meta:Value> + </meta:Property> + </meta:PropertyList> + </meta:ExtensionMetadata> + </meta:ExtensionMetadataList> + </meta:CompositionMetadataAsset> + </AssetList> + </Reel> + </ReelList> +</CompositionPlaylist> |
