X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fcpl_metadata_test.cc;h=a811e56f2ff29e10d63c0fd2835f292d6f3d18cb;hb=ddb999544ab9da2a3a4760baf241a5ef8520c37e;hp=827201a29d7d894a4ec35facc67f79457cd0159b;hpb=7cd30184fd4b5b3eac9c43338a3716a4a8aa6c2a;p=libdcp.git diff --git a/test/cpl_metadata_test.cc b/test/cpl_metadata_test.cc index 827201a2..a811e56f 100644 --- a/test/cpl_metadata_test.cc +++ b/test/cpl_metadata_test.cc @@ -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(path); - auto cpl = make_shared("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( - shared_ptr(new dcp::ReelMonoPictureAsset(mp, 0)), - shared_ptr(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(channels)); - int index = 1; - for (auto sub: channel_label_sub_descriptors) { - BOOST_CHECK_EQUAL(sub->number_child("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"); } +