summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-07-07 23:12:23 +0100
committerCarl Hetherington <cth@carlh.net>2019-07-07 23:12:23 +0100
commitcf693669efd43c0ac565c61a074a1c7f0290921e (patch)
tree564a4705c2eaa06cb09be8b74ec9099c2ada8223
parent09063d5958cad17ce89935f38f12c4fcbaaedf4f (diff)
Only take subtitle data into account for position() if there is nothingv2.15.10
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.
-rw-r--r--src/lib/decoder.cc15
1 files 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<TextDecoder> 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<TextDecoder> i, text) {
+ if (!i->ignore() && (!pos || i->position(f) < *pos)) {
+ pos = i->position(f);
+ }
}
}