summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-04-15 23:29:36 +0200
committerCarl Hetherington <cth@carlh.net>2024-04-15 23:29:36 +0200
commit0a8f2a1a2058f0461a7f978295e31af34a03bb40 (patch)
tree52d81af15a785b1511e7c3c9576dba67dc7cf403
parentf22433bfab1cae79a9f4cab7286a27ca09d11715 (diff)
Add Dolby EDR metadata support (GH #12).
-rw-r--r--src/cpl.cc5
-rw-r--r--src/cpl.h9
-rw-r--r--test/cpl_metadata_test.cc17
-rw-r--r--test/ref/cpl_metadata_test5.xml68
4 files changed, 99 insertions, 0 deletions
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<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>