Give filler subtitle reels <LoadFont> nodes in SMPTE (#2547).
authorCarl Hetherington <cth@carlh.net>
Fri, 2 Jun 2023 20:21:52 +0000 (22:21 +0200)
committerCarl Hetherington <cth@carlh.net>
Sun, 4 Jun 2023 22:48:55 +0000 (00:48 +0200)
cscript
src/lib/reel_writer.cc
src/wx/verify_dcp_dialog.cc
test/subtitle_font_id_test.cc
wscript

diff --git a/cscript b/cscript
index c62056558418e3e2501a2ba87bf8a8897138e45a..f661ce5cb970dc3fbc0e8e96ec114faf4134e218 100644 (file)
--- 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'))
index aae2a6273f9835594ad12b3dac63277c2ffd1b4f..fc78740bb279a7d26e1bed5a66a2d4076d479d22 100644 (file)
@@ -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;
index b3e229087155fdb045d7c2d91f6b991e99517e75..2f8dabc0960dd4ebf2dcdc0f5d1d9f2b6ae69136 100644 (file)
@@ -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;
                }
        }
 
index 42ed8858f022aadc4128af149c382b5b459c8607..ef5ed0e8c3a56b424c9e475645bc21ee5f76de56 100644 (file)
@@ -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 ca5ca85d7213a803be6354b595018d53d1795e8b..351e8b3559cc72c35921d4d8cba2f790da4211ad 100644 (file)
--- 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]