diff mbox

[alsa-lib] pcm: rate: Don't return negative frame count on success in rewind

Message ID 20140404182725.GQ24575@foghorn.codeweavers.com (mailing list archive)
State Accepted
Headers show

Commit Message

Andrew Eikum April 4, 2014, 6:27 p.m. UTC
snd_pcm_rewind is documented to return <0 on failure and >=0 on
success.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
---
I checked all other rewind implementations, and this was the only one
that obviously had this bug.

Comments

Raymond Yau April 6, 2014, 2:46 a.m. UTC | #1
2014-04-05 2:27 GMT+08:00 Andrew Eikum <aeikum@codeweavers.com>:

> snd_pcm_rewind is documented to return <0 on failure and >=0 on
> success.
>


does all resampler  support rewind ?

why do rate plugin assume all hardware support rewind ?
Takashi Iwai April 7, 2014, 10:43 a.m. UTC | #2
At Fri, 4 Apr 2014 13:27:25 -0500,
Andrew Eikum wrote:
> 
> snd_pcm_rewind is documented to return <0 on failure and >=0 on
> success.
> 
> Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>

Thanks, applied now.


Takashi

> ---
> I checked all other rewind implementations, and this was the only one
> that obviously had this bug.
> 
> diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c
> index 54a3e67..2eb4b1b 100644
> --- a/src/pcm/pcm_rate.c
> +++ b/src/pcm/pcm_rate.c
> @@ -702,7 +702,7 @@ static snd_pcm_sframes_t snd_pcm_rate_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t f
>  	snd_atomic_write_begin(&rate->watom);
>  	n = snd_pcm_rate_move_applptr(pcm, -frames);
>  	snd_atomic_write_end(&rate->watom);
> -	return n;
> +	return n < 0 ? -n : n;
>  }
>  
>  static snd_pcm_sframes_t snd_pcm_rate_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
> -- 
> 1.9.1
> 
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
diff mbox

Patch

diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c
index 54a3e67..2eb4b1b 100644
--- a/src/pcm/pcm_rate.c
+++ b/src/pcm/pcm_rate.c
@@ -702,7 +702,7 @@  static snd_pcm_sframes_t snd_pcm_rate_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t f
 	snd_atomic_write_begin(&rate->watom);
 	n = snd_pcm_rate_move_applptr(pcm, -frames);
 	snd_atomic_write_end(&rate->watom);
-	return n;
+	return n < 0 ? -n : n;
 }
 
 static snd_pcm_sframes_t snd_pcm_rate_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)