From 8bf399e02ef7390becf8efddb312417ee0b82a9c Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 25 Oct 2017 12:41:22 +0200 Subject: demux: don't report unknown queue state if no packets were added Restores some behavior from before the demuxer cache changes, though affects mostly just OSD display. The unknown queue state is reserved for streams with missing or messed up timestamps. --- demux/demux.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/demux/demux.c b/demux/demux.c index 73bf9dd1c2..03895610a6 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -1946,6 +1946,7 @@ static int cached_demux_control(struct demux_internal *in, int cmd, void *arg) .ts_reader = MP_NOPTS_VALUE, .ts_duration = -1, }; + bool any_packets = false; 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) @@ -1961,6 +1962,7 @@ static int cached_demux_control(struct demux_internal *in, int cmd, void *arg) r->ts_min = MP_PTS_MAX(r->ts_min, ds->back_pts); r->ts_max = MP_PTS_MAX(r->ts_max, ds->last_ts); if (ds->queue_head) { + any_packets = true; double ts = PTS_OR_DEF(ds->queue_head->dts, ds->queue_head->pts); r->ts_start = MP_PTS_MIN(r->ts_start, ts); @@ -1974,7 +1976,7 @@ static int cached_demux_control(struct demux_internal *in, int cmd, void *arg) r->ts_max = MP_ADD_PTS(r->ts_max, in->ts_offset); if (r->ts_reader != MP_NOPTS_VALUE && r->ts_reader <= r->ts_max) r->ts_duration = r->ts_max - r->ts_reader; - if (in->seeking) { + if (in->seeking || !any_packets) { r->ts_max = r->ts_min = MP_NOPTS_VALUE; r->ts_duration = 0; } -- cgit v1.2.3