summaryrefslogtreecommitdiffstats
path: root/player/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'player/audio.c')
-rw-r--r--player/audio.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/player/audio.c b/player/audio.c
index 27be10a4de..9634891283 100644
--- a/player/audio.c
+++ b/player/audio.c
@@ -147,8 +147,23 @@ int reinit_audio_filters(struct MPContext *mpctx)
if (!ao_c)
return 0;
+ double delay = 0;
+ if (ao_c->af->initialized > 0)
+ delay = af_calc_delay(ao_c->af);
+
af_uninit(ao_c->af);
- return recreate_audio_filters(mpctx) < 0 ? -1 : 1;
+ if (recreate_audio_filters(mpctx) < 0)
+ return -1;
+
+ // Only force refresh if the amount of dropped buffered data is going to
+ // cause "issues" for the A/V sync logic.
+ if (mpctx->audio_status == STATUS_PLAYING &&
+ mpctx->playback_pts != MP_NOPTS_VALUE && delay > 0.2)
+ {
+ queue_seek(mpctx, MPSEEK_ABSOLUTE, mpctx->playback_pts,
+ MPSEEK_EXACT, true);
+ }
+ return 1;
}
// Call this if opts->playback_speed or mpctx->speed_factor_* change.