From cf693669efd43c0ac565c61a074a1c7f0290921e Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 7 Jul 2019 23:12:23 +0100 Subject: [PATCH] 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. --- src/lib/decoder.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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); + } } } -- 2.30.2