From af72285fcf35c7959d0770b3d42c5243f21fd4b2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 17 Jan 2024 23:46:26 +0100 Subject: [PATCH] Fix ISDCF name when referring to OVs with subs (#2703). --- src/lib/film.cc | 4 +++- src/lib/film.h | 2 ++ test/vf_test.cc | 22 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/lib/film.cc b/src/lib/film.cc index 27d23b185..0bba13e28 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -784,8 +784,10 @@ Film::subtitle_languages(bool* burnt_in) const pair, vector> result; for (auto i: content()) { + auto dcp = dynamic_pointer_cast(i); for (auto const& text: i->text) { - if (text->use() && text->type() == TextType::OPEN_SUBTITLE) { + auto const use = text->use() || (dcp && dcp->reference_text(TextType::OPEN_SUBTITLE)); + if (use && text->type() == TextType::OPEN_SUBTITLE) { if (!text->burn() && burnt_in) { *burnt_in = false; } diff --git a/src/lib/film.h b/src/lib/film.h index 13be4b8db..43a41ad45 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -77,6 +77,7 @@ struct atmos_encrypted_passthrough_test; struct isdcf_name_test; struct isdcf_name_with_atmos; struct isdcf_name_with_ccap; +struct ov_subs_in_vf_name; struct recover_test_2d_encrypted; @@ -459,6 +460,7 @@ private: friend struct ::isdcf_name_with_ccap; friend struct ::recover_test_2d_encrypted; friend struct ::atmos_encrypted_passthrough_test; + friend struct ::ov_subs_in_vf_name; template friend class ChangeSignalDespatcher; boost::filesystem::path info_file (dcpomatic::DCPTimePeriod p) const; diff --git a/test/vf_test.cc b/test/vf_test.cc index eb93dab0e..ed7f483ae 100644 --- a/test/vf_test.cc +++ b/test/vf_test.cc @@ -559,3 +559,25 @@ BOOST_AUTO_TEST_CASE(test_referencing_ov_with_missing_subtitle_in_some_reels) verify_dcp(vf->dir(vf->dcp_name()), ignore); } + +/* Test bug #2703: a VF that refers to some OV subs does not get the correct subtitle language in the ISDCF name */ +BOOST_AUTO_TEST_CASE(ov_subs_in_vf_name) +{ + auto subs = content_factory("test/data/short.srt")[0]; + auto ov = new_test_film2("ov_subs_in_vf_name_ov", { subs }); + subs->only_text()->set_language(dcp::LanguageTag("de")); + make_and_verify_dcp( + ov, + { + dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME, + dcp::VerificationNote::Code::MISSING_CPL_METADATA + }); + + auto ov_dcp = make_shared(ov->dir(ov->dcp_name())); + auto vf = new_test_film2("ov_subs_in_vf_name_vf", { ov_dcp }); + vf->set_name("foo"); + ov_dcp->set_reference_text(TextType::OPEN_SUBTITLE, true); + vf->_isdcf_date = boost::gregorian::date(2023, boost::gregorian::Jan, 18); + + BOOST_CHECK_EQUAL(vf->isdcf_name(false), "Foo_TST-1_F_XX-DE_51-HI-VI_2K_20230118_SMPTE_VF"); +} -- 2.30.2