Add Dolby EDR metadata support (GH #12).
[libdcp.git] / test / cpl_metadata_test.cc
index 414cdc224cf5b7969cd3203f326d928de36d5f94..a811e56f2ff29e10d63c0fd2835f292d6f3d18cb 100644 (file)
@@ -154,6 +154,26 @@ BOOST_AUTO_TEST_CASE (main_sound_configuration_test5)
 }
 
 
+/* 482-12 says that implementations may use case-insensitive comparisons for the channel identifiers,
+ * and there is one DCP in the private test suite (made by Disney) that uses LS for left surround.
+ */
+BOOST_AUTO_TEST_CASE(main_sound_configuration_test_case_insensitive)
+{
+       dcp::MainSoundConfiguration msc("51/L,-,C,LFE,LS,RS,HI,VIN");
+       BOOST_CHECK_EQUAL(msc.to_string(), "51/L,-,C,LFE,Ls,Rs,HI,VIN");
+       BOOST_CHECK_EQUAL(msc.channels(), 8);
+       BOOST_CHECK_EQUAL(msc.field(), dcp::MCASoundField::FIVE_POINT_ONE);
+       BOOST_CHECK_EQUAL(msc.mapping(0).get(), dcp::Channel::LEFT);
+       BOOST_CHECK(!msc.mapping(1));
+       BOOST_CHECK_EQUAL(msc.mapping(2).get(), dcp::Channel::CENTRE);
+       BOOST_CHECK_EQUAL(msc.mapping(3).get(), dcp::Channel::LFE);
+       BOOST_CHECK_EQUAL(msc.mapping(4).get(), dcp::Channel::LS);
+       BOOST_CHECK_EQUAL(msc.mapping(5).get(), dcp::Channel::RS);
+       BOOST_CHECK_EQUAL(msc.mapping(6).get(), dcp::Channel::HI);
+       BOOST_CHECK_EQUAL(msc.mapping(7).get(), dcp::Channel::VI);
+}
+
+
 BOOST_AUTO_TEST_CASE (luminance_test1)
 {
        BOOST_CHECK_NO_THROW (dcp::Luminance(4, dcp::Luminance::Unit::CANDELA_PER_SQUARE_METRE));
@@ -283,7 +303,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test1)
        msc.set_mapping (2, dcp::Channel::CENTRE);
        msc.set_mapping (3, dcp::Channel::LFE);
        msc.set_mapping (13, dcp::Channel::SYNC_SIGNAL);
-       cpl.set_main_sound_configuration (msc.to_string());
+       cpl.set_main_sound_configuration(msc);
 
        cpl.set_main_sound_sample_rate (48000);
        cpl.set_main_picture_stored_area (dcp::Size(1998, 1080));
@@ -354,7 +374,7 @@ BOOST_AUTO_TEST_CASE (cpl_metadata_write_test2)
        msc.set_mapping (2, dcp::Channel::CENTRE);
        msc.set_mapping (3, dcp::Channel::LFE);
        msc.set_mapping (13, dcp::Channel::SYNC_SIGNAL);
-       cpl.set_main_sound_configuration (msc.to_string());
+       cpl.set_main_sound_configuration(msc);
 
        cpl.set_main_sound_sample_rate (48000);
        cpl.set_main_picture_stored_area (dcp::Size(1998, 1080));
@@ -430,3 +450,37 @@ BOOST_AUTO_TEST_CASE(check_that_missing_full_content_title_text_is_tolerated)
 {
        dcp::CPL cpl("test/ref/cpl_metadata_test3.xml");
 }
+
+
+BOOST_AUTO_TEST_CASE(check_sign_language_video_language)
+{
+       dcp::CPL cpl("test/ref/cpl_metadata_test3.xml");
+       cpl.set_sign_language_video_language(dcp::LanguageTag("es-PT"));
+       cpl.write_xml("build/test/check_sign_language_video_language.xml", {});
+       check_xml(
+               dcp::file_to_string("test/ref/cpl_metadata_test4.xml"),
+               dcp::file_to_string("build/test/check_sign_language_video_language.xml"),
+               {"Id"}
+               );
+
+       dcp::CPL check("build/test/check_sign_language_video_language.xml");
+       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");
+}
+