summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-06-02 22:21:52 +0200
committerCarl Hetherington <cth@carlh.net>2023-06-05 00:48:55 +0200
commit742961d2c2cd446fcd96033403b35b0ae111401e (patch)
treebb7ae53ffd16d6df90bc2987189a749c97d92d84
parentcc39c4f57fc48c581a25dc4c37f26adf95278914 (diff)
Give filler subtitle reels <LoadFont> nodes in SMPTE (#2547).
-rw-r--r--cscript2
-rw-r--r--src/lib/reel_writer.cc9
-rw-r--r--src/wx/verify_dcp_dialog.cc5
-rw-r--r--test/subtitle_font_id_test.cc22
-rw-r--r--wscript2
5 files changed, 36 insertions, 4 deletions
diff --git a/cscript b/cscript
index c62056558..f661ce5cb 100644
--- a/cscript
+++ b/cscript
@@ -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
+ });
+}
+
diff --git a/wscript b/wscript
index ca5ca85d7..351e8b355 100644
--- a/wscript
+++ b/wscript
@@ -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]