Fix dying butler on changing CPL from one without to one with v2.15.28
authorCarl Hetherington <cth@carlh.net>
Wed, 30 Oct 2019 21:39:58 +0000 (21:39 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 30 Oct 2019 21:43:55 +0000 (22:43 +0100)
subtitles (#1641).

Forward-port from da39ed1516f2463f8a9bf4795a94f23d420c9ca3 in master.

src/lib/dcp_decoder.cc

index 4b189189e0b61fc395e83658968a1b34cf44947b..826b4e8d387ba44d709cb77bff36fe40bda318c5 100644 (file)
@@ -223,8 +223,14 @@ void
 DCPDecoder::pass_texts (ContentTime next, dcp::Size size)
 {
        list<shared_ptr<TextDecoder> >::const_iterator decoder = text.begin ();
+       if (decoder == text.end()) {
+               /* It's possible that there is now a main subtitle but no TextDecoders, for example if
+                  the CPL has just changed but the TextContent's texts have not been recreated yet.
+               */
+               return;
+       }
+
        if ((*_reel)->main_subtitle()) {
-               DCPOMATIC_ASSERT (decoder != text.end ());
                pass_texts (
                        next,
                        (*_reel)->main_subtitle()->asset(),
@@ -235,8 +241,8 @@ DCPDecoder::pass_texts (ContentTime next, dcp::Size size)
                        );
                ++decoder;
        }
+
        BOOST_FOREACH (shared_ptr<dcp::ReelClosedCaptionAsset> i, (*_reel)->closed_captions()) {
-               DCPOMATIC_ASSERT (decoder != text.end ());
                pass_texts (
                        next, i->asset(), _dcp_content->reference_text(TEXT_CLOSED_CAPTION), i->entry_point().get_value_or(0), *decoder, size
                        );