Don't create empty SMPTE subtitles files with empty <SubtitleList>
authorCarl Hetherington <cth@carlh.net>
Sun, 21 Feb 2021 19:26:37 +0000 (20:26 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 23 Feb 2021 19:09:39 +0000 (20:09 +0100)
Files like this fail validation against the XSD.  Perhaps the XSD
is wrong; for now though, create an empty 1-second-long subtitle
in such files.

src/lib/reel_writer.cc

index 4888a1567d5150b145c235c90dd6024c6094410c..136d2405e3aabff47f266b27409a751b5babdc67 100644 (file)
@@ -790,7 +790,7 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track) const
                s->set_reel_number (raw_convert<string> (_reel_index + 1));
                asset = s;
        } else {
-               shared_ptr<dcp::SMPTESubtitleAsset> s (new dcp::SMPTESubtitleAsset ());
+               auto s = make_shared<dcp::SMPTESubtitleAsset>();
                s->set_content_title_text (film()->name());
                s->set_metadata (mxf_metadata());
                if (type == TextType::OPEN_SUBTITLE && !lang.empty()) {
@@ -805,6 +805,29 @@ ReelWriter::empty_text_asset (TextType type, optional<DCPTextTrack> track) const
                if (film()->encrypted()) {
                        s->set_key (film()->key());
                }
+               s->add (
+                       std::make_shared<dcp::SubtitleString>(
+                               optional<std::string>(),
+                               false,
+                               false,
+                               false,
+                               dcp::Colour(),
+                               42,
+                               1.0,
+                               dcp::Time(0, 0, 0, 0, 24),
+                               dcp::Time(0, 0, 1, 0, 24),
+                               0.5,
+                               dcp::HAlign::CENTER,
+                               0.5,
+                               dcp::VAlign::CENTER,
+                               dcp::Direction::LTR,
+                               "",
+                               dcp::Effect::NONE,
+                               dcp::Colour(),
+                               dcp::Time(),
+                               dcp::Time()
+                               )
+                      );
                asset = s;
        }