Rename classes.
[libdcp.git] / test / cpl_metadata_test.cc
index 827201a29d7d894a4ec35facc67f79457cd0159b..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));
@@ -432,63 +452,35 @@ BOOST_AUTO_TEST_CASE(check_that_missing_full_content_title_text_is_tolerated)
 }
 
 
-static
-void
-check_audio_channel_label_sub_descriptors(int channels)
+BOOST_AUTO_TEST_CASE(check_sign_language_video_language)
 {
-       boost::filesystem::path path = dcp::String::compose("build/test/check_audio_channel_label_sub_descriptors_%1", channels);
-       auto constexpr sample_rate = 48000;
-
-       boost::filesystem::remove_all(path);
-       boost::filesystem::create_directories(path);
-       auto dcp = make_shared<dcp::DCP>(path);
-       auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::ContentKind::TRAILER, dcp::Standard::SMPTE);
-       cpl->set_main_sound_configuration("wrong");
-       cpl->set_main_sound_sample_rate(48000);
-       cpl->set_main_picture_stored_area(dcp::Size(1998, 1080));
-       cpl->set_main_picture_active_area(dcp::Size(1998, 1080));
-       cpl->set_version_number(1);
-
-       auto mp = simple_picture(path, "", 240);
-       auto ms = simple_sound(path, "", dcp::MXFMetadata(), "en-US", 240, sample_rate, boost::none, channels);
-
-       auto reel = make_shared<dcp::Reel>(
-               shared_ptr<dcp::ReelMonoPictureAsset>(new dcp::ReelMonoPictureAsset(mp, 0)),
-               shared_ptr<dcp::ReelSoundAsset>(new dcp::ReelSoundAsset(ms, 0))
+       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"}
                );
 
-       cpl->add(reel);
-       dcp->add(cpl);
-
-       cpl->write_xml(path / "cpl.xml", {});
-
-       cxml::Document check("CompositionPlaylist");
-       check.read_file(path / "cpl.xml");
-
-       auto reel_list = check.node_child("ReelList");
-       BOOST_REQUIRE(reel_list);
-       auto check_reel = reel_list->node_child("Reel");
-       BOOST_REQUIRE(reel);
-       auto asset_list = check_reel->node_child("AssetList");
-       BOOST_REQUIRE(asset_list);
-       auto composition_metadata_asset = asset_list->node_child("CompositionMetadataAsset");
-       BOOST_REQUIRE(composition_metadata_asset);
-       auto mca_sub_descriptors = composition_metadata_asset->node_child("MCASubDescriptors");
-       BOOST_REQUIRE(mca_sub_descriptors);
-       auto channel_label_sub_descriptors = mca_sub_descriptors->node_children("AudioChannelLabelSubDescriptor");
-
-       BOOST_CHECK_EQUAL(channel_label_sub_descriptors.size(), static_cast<size_t>(channels));
-       int index = 1;
-       for (auto sub: channel_label_sub_descriptors) {
-               BOOST_CHECK_EQUAL(sub->number_child<int>("MCAChannelID"), index);
-               ++index;
-       }
+       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(include_the_right_number_of_channel_label_sub_descriptors)
+BOOST_AUTO_TEST_CASE(check_dolby_edr_metadata)
 {
-       check_audio_channel_label_sub_descriptors(2);
-       check_audio_channel_label_sub_descriptors(6);
-       check_audio_channel_label_sub_descriptors(8);
+       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");
 }
+