diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-04-08 02:07:05 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-04-08 02:07:05 +0200 |
| commit | 3a328b69a4770687fa16a113f33882217a59a142 (patch) | |
| tree | 960fa222675068d0877d2c6ea4151dee08b20fe0 /test/verify_test.cc | |
| parent | 854bc0a513611a402b2d693d9d17da3420fd10b4 (diff) | |
Verify that SMPTE subtitle IDs are handled properly (DoM #1962).
Diffstat (limited to 'test/verify_test.cc')
| -rw-r--r-- | test/verify_test.cc | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/test/verify_test.cc b/test/verify_test.cc index b4cbc5aa..801b142e 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -2843,3 +2843,128 @@ BOOST_AUTO_TEST_CASE (verify_jpeg2000_codestream_libdcp) BOOST_REQUIRE_EQUAL (notes.size(), 0U); } + +/** Check that ResourceID and the XML ID being different is spotted */ +BOOST_AUTO_TEST_CASE (verify_mismatched_subtitle_resource_id) +{ + boost::filesystem::path const dir = "build/test/verify_mismatched_subtitle_resource_id"; + prepare_directory (dir); + + ASDCP::WriterInfo writer_info; + writer_info.LabelSetType = ASDCP::LS_MXF_SMPTE; + + unsigned int c; + auto mxf_id = dcp::make_uuid (); + Kumu::hex2bin (mxf_id.c_str(), writer_info.AssetUUID, Kumu::UUID_Length, &c); + BOOST_REQUIRE (c == Kumu::UUID_Length); + + auto resource_id = dcp::make_uuid (); + ASDCP::TimedText::TimedTextDescriptor descriptor; + Kumu::hex2bin (resource_id.c_str(), descriptor.AssetID, Kumu::UUID_Length, &c); + DCP_ASSERT (c == Kumu::UUID_Length); + + auto xml_id = dcp::make_uuid (); + ASDCP::TimedText::MXFWriter writer; + auto subs_mxf = dir / "subs.mxf"; + auto r = writer.OpenWrite(subs_mxf.c_str(), writer_info, descriptor, 4096); + BOOST_REQUIRE (ASDCP_SUCCESS(r)); + writer.WriteTimedTextResource (dcp::String::compose( + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<SubtitleReel xmlns=\"http://www.smpte-ra.org/schemas/428-7/2010/DCST\" xmlns:xs=\"http://www.w3.org/2001/schema\">" + "<Id>urn:uuid:%1</Id>" + "<ContentTitleText>Content</ContentTitleText>" + "<AnnotationText>Annotation</AnnotationText>" + "<IssueDate>2018-10-02T12:25:14+02:00</IssueDate>" + "<ReelNumber>1</ReelNumber>" + "<Language>en-US</Language>" + "<EditRate>25 1</EditRate>" + "<TimeCodeRate>25</TimeCodeRate>" + "<StartTime>00:00:00:00</StartTime>" + "<SubtitleList>" + "<Font ID=\"arial\" Color=\"FFFEFEFE\" Weight=\"normal\" Size=\"42\" Effect=\"border\" EffectColor=\"FF181818\" AspectAdjust=\"1.00\">" + "<Subtitle SpotNumber=\"1\" TimeIn=\"00:00:03:00\" TimeOut=\"00:00:04:10\" FadeUpTime=\"00:00:00:00\" FadeDownTime=\"00:00:00:00\">" + "<Text Hposition=\"0.0\" Halign=\"center\" Valign=\"bottom\" Vposition=\"13.5\" Direction=\"ltr\">Hello world</Text>" + "</Subtitle>" + "</Font>" + "</SubtitleList>" + "</SubtitleReel>", + xml_id).c_str()); + + writer.Finalize(); + + auto subs_asset = make_shared<dcp::SMPTESubtitleAsset>(subs_mxf); + auto subs_reel = make_shared<dcp::ReelSubtitleAsset>(subs_asset, dcp::Fraction(24, 1), 240, 0); + + auto cpl = write_dcp_with_single_asset (dir, subs_reel); + + check_verify_result ( + { dir }, + { + { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::MISMATCHED_TIMED_TEXT_RESOURCE_ID }, + { dcp::VerificationNote::Type::WARNING, dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME }, + { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::MISSING_CPL_METADATA, cpl->id(), cpl->file().get() } + }); +} + + +/** Check that ResourceID and the MXF ID being the same is spotted */ +BOOST_AUTO_TEST_CASE (verify_incorrect_timed_text_id) +{ + boost::filesystem::path const dir = "build/test/verify_incorrect_timed_text_id"; + prepare_directory (dir); + + ASDCP::WriterInfo writer_info; + writer_info.LabelSetType = ASDCP::LS_MXF_SMPTE; + + unsigned int c; + auto mxf_id = dcp::make_uuid (); + Kumu::hex2bin (mxf_id.c_str(), writer_info.AssetUUID, Kumu::UUID_Length, &c); + BOOST_REQUIRE (c == Kumu::UUID_Length); + + auto resource_id = mxf_id; + ASDCP::TimedText::TimedTextDescriptor descriptor; + Kumu::hex2bin (resource_id.c_str(), descriptor.AssetID, Kumu::UUID_Length, &c); + DCP_ASSERT (c == Kumu::UUID_Length); + + auto xml_id = resource_id; + ASDCP::TimedText::MXFWriter writer; + auto subs_mxf = dir / "subs.mxf"; + auto r = writer.OpenWrite(subs_mxf.c_str(), writer_info, descriptor, 4096); + BOOST_REQUIRE (ASDCP_SUCCESS(r)); + writer.WriteTimedTextResource (dcp::String::compose( + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<SubtitleReel xmlns=\"http://www.smpte-ra.org/schemas/428-7/2010/DCST\" xmlns:xs=\"http://www.w3.org/2001/schema\">" + "<Id>urn:uuid:%1</Id>" + "<ContentTitleText>Content</ContentTitleText>" + "<AnnotationText>Annotation</AnnotationText>" + "<IssueDate>2018-10-02T12:25:14+02:00</IssueDate>" + "<ReelNumber>1</ReelNumber>" + "<Language>en-US</Language>" + "<EditRate>25 1</EditRate>" + "<TimeCodeRate>25</TimeCodeRate>" + "<StartTime>00:00:00:00</StartTime>" + "<SubtitleList>" + "<Font ID=\"arial\" Color=\"FFFEFEFE\" Weight=\"normal\" Size=\"42\" Effect=\"border\" EffectColor=\"FF181818\" AspectAdjust=\"1.00\">" + "<Subtitle SpotNumber=\"1\" TimeIn=\"00:00:03:00\" TimeOut=\"00:00:04:10\" FadeUpTime=\"00:00:00:00\" FadeDownTime=\"00:00:00:00\">" + "<Text Hposition=\"0.0\" Halign=\"center\" Valign=\"bottom\" Vposition=\"13.5\" Direction=\"ltr\">Hello world</Text>" + "</Subtitle>" + "</Font>" + "</SubtitleList>" + "</SubtitleReel>", + xml_id).c_str()); + + writer.Finalize(); + + auto subs_asset = make_shared<dcp::SMPTESubtitleAsset>(subs_mxf); + auto subs_reel = make_shared<dcp::ReelSubtitleAsset>(subs_asset, dcp::Fraction(24, 1), 240, 0); + + auto cpl = write_dcp_with_single_asset (dir, subs_reel); + + check_verify_result ( + { dir }, + { + { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::INCORRECT_TIMED_TEXT_ASSET_ID }, + { dcp::VerificationNote::Type::WARNING, dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME }, + { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::MISSING_CPL_METADATA, cpl->id(), cpl->file().get() } + }); +} |
