diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-06-02 22:21:52 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-06-05 00:48:55 +0200 |
| commit | 742961d2c2cd446fcd96033403b35b0ae111401e (patch) | |
| tree | bb7ae53ffd16d6df90bc2987189a749c97d92d84 | |
| parent | cc39c4f57fc48c581a25dc4c37f26adf95278914 (diff) | |
Give filler subtitle reels <LoadFont> nodes in SMPTE (#2547).
| -rw-r--r-- | cscript | 2 | ||||
| -rw-r--r-- | src/lib/reel_writer.cc | 9 | ||||
| -rw-r--r-- | src/wx/verify_dcp_dialog.cc | 5 | ||||
| -rw-r--r-- | test/subtitle_font_id_test.cc | 22 | ||||
| -rw-r--r-- | wscript | 2 |
5 files changed, 36 insertions, 4 deletions
@@ -480,7 +480,7 @@ def dependencies(target, options): # Use distro-provided FFmpeg on Arch deps = [] - deps.append(('libdcp', 'v1.8.72')) + deps.append(('libdcp', 'v1.8.73')) deps.append(('libsub', 'v1.6.44')) deps.append(('leqm-nrt', '4560105773c66ac9216b62313a24093bb0a027ae')) deps.append(('rtaudio', 'f619b76')) diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc index aae2a6273..fc78740bb 100644 --- a/src/lib/reel_writer.cc +++ b/src/lib/reel_writer.cc @@ -823,6 +823,7 @@ shared_ptr<dcp::SubtitleAsset> ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool with_dummy) const { shared_ptr<dcp::SubtitleAsset> asset; + optional<string> font; auto lang = film()->subtitle_languages(); if (film()->interop()) { @@ -857,7 +858,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool if (with_dummy) { asset->add( std::make_shared<dcp::SubtitleString>( - optional<std::string>(), + font, false, false, false, @@ -880,6 +881,12 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track, bool 0 ) ); + + if (!film()->interop()) { + /* We must have a LoadFont since we have a Text */ + font = "font"; + asset->ensure_font(*font, _default_font); + } } return asset; diff --git a/src/wx/verify_dcp_dialog.cc b/src/wx/verify_dcp_dialog.cc index b3e229087..2f8dabc09 100644 --- a/src/wx/verify_dcp_dialog.cc +++ b/src/wx/verify_dcp_dialog.cc @@ -422,9 +422,12 @@ VerifyDCPDialog::VerifyDCPDialog (wxWindow* parent, shared_ptr<VerifyDCPJob> job case dcp::VerificationNote::Code::INCORRECT_SUBTITLE_NAMESPACE_COUNT: add(i, _("The XML in the subtitle asset %n has more than one namespace declaration.")); break; - case dcp::VerificationNote::Code::MISSING_LOAD_FONT: + case dcp::VerificationNote::Code::MISSING_LOAD_FONT_FOR_FONT: add(i, _("A subtitle or closed caption refers to a font with ID %id that does not have a corresponding <LoadFont> node.")); break; + case dcp::VerificationNote::Code::MISSING_LOAD_FONT: + add(i, "The SMPTE subtitle asset %id has <Text> nodes but no <LoadFont> node"); + break; } } diff --git a/test/subtitle_font_id_test.cc b/test/subtitle_font_id_test.cc index 42ed8858f..ef5ed0e8c 100644 --- a/test/subtitle_font_id_test.cc +++ b/test/subtitle_font_id_test.cc @@ -187,3 +187,25 @@ BOOST_AUTO_TEST_CASE(make_dcp_with_subs_in_dcp_without_font_tag) BOOST_CHECK(check_font_data.begin()->second == dcp::ArrayData(default_font_file())); } + +BOOST_AUTO_TEST_CASE(filler_subtitle_reels_have_load_font_tags) +{ + auto const name = boost::unit_test::framework::current_test_case().full_name(); + + auto subs = content_factory("test/data/short.srt")[0]; + auto video1 = content_factory("test/data/flat_red.png")[0]; + auto video2 = content_factory("test/data/flat_red.png")[0]; + + auto film = new_test_film2(name, { video1, video2, subs }); + film->set_reel_type(ReelType::BY_VIDEO_CONTENT); + + make_and_verify_dcp( + film, + { + dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE, + dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME, + dcp::VerificationNote::Code::INVALID_SUBTITLE_SPACING, + dcp::VerificationNote::Code::MISSING_CPL_METADATA + }); +} + @@ -35,7 +35,7 @@ except ImportError: from waflib import Logs, Context APPNAME = 'dcpomatic' -libdcp_version = '1.8.72' +libdcp_version = '1.8.73' libsub_version = '1.6.42' this_version = subprocess.Popen(shlex.split('git tag -l --points-at HEAD'), stdout=subprocess.PIPE).communicate()[0] |
