From: Yutao Yuan Date: Wed, 4 May 2022 03:01:34 +0000 (+0800) Subject: pcm: multi: return correct hwptr and avail from snd_pcm_multi_status() X-Git-Tag: v1.2.7~43 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=9c0c757b854a063c476014cfba935517383326cd;p=alsa-lib.git 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 --- 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)