From 4fca1856e15e5294fb127ffd9d9a434ec4a2c2df Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 3 Nov 2017 14:58:13 +0100 Subject: demux: don't allow subtitles to mess up buffered time display In a shit show of subtle corner case interactions, making the demuxer cache buffer the entire file can display a small buffered time if subtitles are enabled. The reason is that some subtitle decoders may read in advance infinitely, i.e. they read the entire subtitle stream. Then, since the other streams (audio/video) have logically reached EOF, and the subtitle stream is set to ds->active==true. This will have to be fixed properly later to account buffering for subtitle-only files (another corner case) correctly, but for now this is less annoying. --- demux/demux.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/demux/demux.c b/demux/demux.c index 036045f1c2..f00a1c8069 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -2014,7 +2014,8 @@ static int cached_demux_control(struct demux_internal *in, int cmd, void *arg) double ts_max = MP_NOPTS_VALUE; for (int n = 0; n < in->num_streams; n++) { struct demux_stream *ds = in->streams[n]->ds; - if (ds->active && !(!ds->queue_head && ds->eof) && !ds->ignore_eof) + if (ds->active && !(!ds->queue_head && ds->eof) && + !ds->ignore_eof && ds->type != STREAM_SUB) { r->underrun |= !ds->reader_head && !ds->eof; r->ts_reader = MP_PTS_MAX(r->ts_reader, ds->base_ts); -- cgit v1.2.3