From 675a12ef339f0164f4d6e860aeb52a1d7857d3ab Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 20 Jan 2021 11:54:19 +0100 Subject: [PATCH] alsa: clamp elapsed time to delay If the elapsed time is larger than the delay, we are dealing with an older timestamp. Fixes #597 --- pipewire-alsa/alsa-plugins/pcm_pipewire.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pipewire-alsa/alsa-plugins/pcm_pipewire.c b/pipewire-alsa/alsa-plugins/pcm_pipewire.c index 9d1eb78bb..e02810dcb 100644 --- a/pipewire-alsa/alsa-plugins/pcm_pipewire.c +++ b/pipewire-alsa/alsa-plugins/pcm_pipewire.c @@ -192,6 +192,8 @@ static int snd_pcm_pipewire_delay(snd_pcm_ioplug_t *io, snd_pcm_sframes_t *delay clock_gettime(CLOCK_MONOTONIC, &ts); diff = SPA_TIMESPEC_TO_NSEC(&ts) - pw->time.now; elapsed = (pw->time.rate.denom * diff) / (pw->time.rate.num * SPA_NSEC_PER_SEC); + if (elapsed > pw->time.delay) + elapsed = pw->time.delay; } filled = pw->time.delay + snd_pcm_ioplug_hw_avail(io, pw->hw_ptr, io->appl_ptr);