From 4e1b10073a86c964aae1412b8347cca5804bb4d9 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 30 Nov 2023 12:05:41 +0100 Subject: [PATCH] alsa: handle period events When the period events are enabled, we need to wake up whenver there is a period elapsed. Otherwise, we only wake up when there is avail_min. Fixes #3676 --- pipewire-alsa/alsa-plugins/pcm_pipewire.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pipewire-alsa/alsa-plugins/pcm_pipewire.c b/pipewire-alsa/alsa-plugins/pcm_pipewire.c index 3464692dc..cab24e914 100644 --- a/pipewire-alsa/alsa-plugins/pcm_pipewire.c +++ b/pipewire-alsa/alsa-plugins/pcm_pipewire.c @@ -504,7 +504,12 @@ static int snd_pcm_pipewire_prepare(snd_pcm_ioplug_t *io) snd_pcm_sw_params_alloca(&swparams); if (snd_pcm_sw_params_current(io->pcm, swparams) == 0) { - snd_pcm_sw_params_get_avail_min(swparams, &pw->min_avail); + int event; + snd_pcm_sw_params_get_period_event(swparams, &event); + if (event) + pw->min_avail = io->period_size; + else + snd_pcm_sw_params_get_avail_min(swparams, &pw->min_avail); snd_pcm_sw_params_get_boundary(swparams, &pw->boundary); snd_pcm_sw_params_dump(swparams, pw->output); fflush(pw->log_file);