From 9c0c757b854a063c476014cfba935517383326cd Mon Sep 17 00:00:00 2001 From: Yutao Yuan Date: Wed, 4 May 2022 11:01:34 +0800 Subject: [PATCH] pcm: multi: return correct hwptr and avail from snd_pcm_multi_status() Ensure the logic of snd_pcm_multi_status() is consistent with snd_pcm_multi_avail_update(). Fixes: https://github.com/alsa-project/alsa-lib/pull/224 Fixes: https://github.com/alsa-project/alsa-lib/issues/217 Signed-off-by: Yutao Yuan Signed-off-by: Jaroslav Kysela --- src/pcm/pcm_multi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pcm/pcm_multi.c b/src/pcm/pcm_multi.c index 7fb21276..bec6d06f 100644 --- a/src/pcm/pcm_multi.c +++ b/src/pcm/pcm_multi.c @@ -388,11 +388,21 @@ static int snd_pcm_multi_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params) return 0; } +static snd_pcm_sframes_t snd_pcm_multi_avail_update(snd_pcm_t *pcm); static int snd_pcm_multi_status(snd_pcm_t *pcm, snd_pcm_status_t *status) { snd_pcm_multi_t *multi = pcm->private_data; snd_pcm_t *slave = multi->slaves[multi->master_slave].pcm; - return snd_pcm_status(slave, status); + + int err = snd_pcm_status(slave, status); + if (err < 0) + return err; + snd_pcm_sframes_t avail = snd_pcm_multi_avail_update(pcm); + if (avail < 0) + return avail; + status->hw_ptr = *pcm->hw.ptr; + status->avail = avail; + return 0; } static snd_pcm_state_t snd_pcm_multi_state(snd_pcm_t *pcm) -- 2.47.1