From 8305f28ea22a834cc4a9e4b324110b5ff4ba1bd1 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 24 Aug 2023 23:19:44 +0200 Subject: [PATCH] Check for missing font files referred from Interop closed captions (as well as subs). --- src/verify.cc | 11 ++++++++--- test/verify_test.cc | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/verify.cc b/src/verify.cc index 42ee1921..620ee31d 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -715,9 +715,9 @@ verify_smpte_timed_text_asset ( } -/** Verify Interop subtitle-only stuff */ +/** Verify Interop subtitle / CCAP stuff */ void -verify_interop_subtitle_asset(shared_ptr asset, vector& notes) +verify_interop_text_asset(shared_ptr asset, vector& notes) { if (asset->subtitles().empty()) { notes.push_back({VerificationNote::Type::ERROR, VerificationNote::Code::MISSING_SUBTITLE, asset->id(), asset->file().get() }); @@ -806,7 +806,7 @@ verify_subtitle_asset ( auto interop = dynamic_pointer_cast(asset); if (interop) { - verify_interop_subtitle_asset(interop, notes); + verify_interop_text_asset(interop, notes); if (namespace_count(asset, "DCSubtitle") > 1) { notes.push_back({ VerificationNote::Type::WARNING, VerificationNote::Code::INCORRECT_SUBTITLE_NAMESPACE_COUNT, asset->id() }); } @@ -848,6 +848,11 @@ verify_closed_caption_asset ( notes.push_back ({VerificationNote::Type::WARNING, VerificationNote::Code::MISSED_CHECK_OF_ENCRYPTED}); } + auto interop = dynamic_pointer_cast(asset); + if (interop) { + verify_interop_text_asset(interop, notes); + } + auto smpte = dynamic_pointer_cast(asset); if (smpte) { verify_smpte_timed_text_asset (smpte, reel_asset_duration, notes); diff --git a/test/verify_test.cc b/test/verify_test.cc index 4138138f..8b33db1a 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -670,6 +670,23 @@ BOOST_AUTO_TEST_CASE (verify_valid_interop_subtitles) } +BOOST_AUTO_TEST_CASE(verify_catch_missing_font_file_with_interop_ccap) +{ + path const dir("build/test/verify_catch_missing_font_file_with_interop_ccap"); + prepare_directory(dir); + copy_file("test/data/subs1.xml", dir / "ccap.xml"); + auto asset = make_shared(dir / "ccap.xml"); + auto reel_asset = make_shared(asset, dcp::Fraction(24, 1), 16 * 24, 0); + write_dcp_with_single_asset(dir, reel_asset, dcp::Standard::INTEROP); + + check_verify_result ( + {dir}, { + { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::INVALID_STANDARD }, + { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISSING_FONT, string{"theFontId"} } + }); +} + + BOOST_AUTO_TEST_CASE (verify_invalid_interop_subtitles) { using namespace boost::filesystem; -- 2.30.2