summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c1
-rw-r--r--player/playloop.c7
2 files changed, 3 insertions, 5 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 8ddfd3f89c..6b4f25be51 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1187,6 +1187,7 @@ static int cached_demux_control(struct demux_internal *in, int cmd, void *arg)
}
}
r->idle = (in->idle && !r->underrun) || r->eof;
+ r->underrun &= !r->idle;
if (r->ts_range[0] != MP_NOPTS_VALUE && r->ts_range[1] != MP_NOPTS_VALUE)
r->ts_duration = r->ts_range[1] - r->ts_range[0];
return DEMUXER_CTRL_OK;
diff --git a/player/playloop.c b/player/playloop.c
index 319e4a89f1..694c3e6f25 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -527,19 +527,16 @@ static void handle_pause_on_low_cache(struct MPContext *mpctx)
struct demux_ctrl_reader_state s = {.idle = true, .ts_duration = -1};
demux_control(mpctx->demuxer, DEMUXER_CTRL_GET_READER_STATE, &s);
- // disable on unknown/broken timestamps
- double range = s.ts_duration >= 0 ? s.ts_duration : 1e20;
-
if (mpctx->restart_complete && idle != -1) {
if (mpctx->paused && mpctx->paused_for_cache) {
- if (!opts->cache_pausing || range >= 2.0 || s.idle) {
+ if (!opts->cache_pausing || s.ts_duration >= 2.0 || s.idle) {
mpctx->paused_for_cache = false;
if (!opts->pause)
unpause_player(mpctx);
}
mpctx->sleeptime = MPMIN(mpctx->sleeptime, 0.2);
} else {
- if (opts->cache_pausing && range < 0.5 && !s.idle) {
+ if (opts->cache_pausing && s.underrun) {
bool prev_paused_user = opts->pause;
pause_player(mpctx);
mpctx->paused_for_cache = true;