From: Jaroslav Kysela Date: Thu, 18 Nov 2010 08:27:07 +0000 (+0100) Subject: pcm: fix snd_pcm_avail_delay() function X-Git-Tag: v1.0.24~12 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=ba9332e9192814a5431a3a2505d25d74a9232124;p=alsa-lib.git pcm: fix snd_pcm_avail_delay() function For capture stream, the delay must be obtained as last, but we need to update the ring buffer pointers for the avail_update call. So, rearrange the code a bit and add hwsync call as first. Signed-off-by: Jaroslav Kysela --- diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index f378779a..74099438 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -2470,18 +2470,22 @@ int snd_pcm_avail_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp) { snd_pcm_sframes_t sf; + int err; assert(pcm && availp && delayp); if (CHECK_SANITY(! pcm->setup)) { SNDMSG("PCM not set up"); return -EIO; } - sf = pcm->fast_ops->delay(pcm->fast_op_arg, delayp); - if (sf < 0) - return (int)sf; + err = pcm->fast_ops->hwsync(pcm->fast_op_arg); + if (err < 0) + return err; sf = pcm->fast_ops->avail_update(pcm->fast_op_arg); if (sf < 0) return (int)sf; + err = pcm->fast_ops->delay(pcm->fast_op_arg, delayp); + if (err < 0) + return err; *availp = sf; return 0; }