From: Carl Hetherington Date: Sun, 7 Jul 2019 22:12:23 +0000 (+0100) Subject: Only take subtitle data into account for position() if there is nothing X-Git-Tag: v2.15.10 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=cf693669efd43c0ac565c61a074a1c7f0290921e Only take subtitle data into account for position() if there is nothing else to go on. This fixes problems at the end of muxed files when subtitle data runs out before video/audio. There is no (easy) way to know that this has happened, and this seems to be the next best thing. Fixes #1581. --- diff --git a/src/lib/decoder.cc b/src/lib/decoder.cc index f912c473c..3cadcca47 100644 --- a/src/lib/decoder.cc +++ b/src/lib/decoder.cc @@ -52,9 +52,18 @@ Decoder::position () const pos = audio->position(f); } - BOOST_FOREACH (shared_ptr i, text) { - if (!i->ignore() && (!pos || i->position(f) < *pos)) { - pos = i->position(f); + /* Only decide position based on subtitle sources if there is nothing else + to go on. Otherwise we can have problems with muxed sources which have + (for example) video, audio and a subtitle. If the subtitle data runs out + before the video/audio the position() call will return the position of the + end of the subs. This causes this file to be pass()ed in favour of others, + which can cause bugs like #1581. + */ + if (!pos) { + BOOST_FOREACH (shared_ptr i, text) { + if (!i->ignore() && (!pos || i->position(f) < *pos)) { + pos = i->position(f); + } } }