]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: express the rewind size limitation logic better
authorAlexander E. Patrakov <patrakov@gmail.com>
Sat, 13 Sep 2014 18:30:14 +0000 (00:30 +0600)
committerJaroslav Kysela <perex@perex.cz>
Sat, 13 Sep 2014 19:04:13 +0000 (21:04 +0200)
There are a few places where the argument of the .rewind or .forward
callback is checked against the same value as returned by .rewindable or
.forwardable. Express this "don't rewind more than rewindable" logic
explicitly, so that the future fixes to the rewindable size can go to
one function instead of two.

While at it, take advantage of the fact that snd_pcm_mmap_avail() cannot
return negative values (except due to integer overflow, which is AFAICS
impossible given the current boundary choice).

Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm_dmix.c
src/pcm/pcm_dshare.c
src/pcm/pcm_dsnoop.c
src/pcm/pcm_plugin.c

index 73cbe3f8d0b20b58de8f1f2810a19a38774b5661..ffde12a1a46cd3177c5f1e31320da7d7992d30d8 100644 (file)
@@ -751,9 +751,7 @@ static snd_pcm_sframes_t snd_pcm_dmix_forward(snd_pcm_t *pcm, snd_pcm_uframes_t
 {
        snd_pcm_sframes_t avail;
 
-       avail = snd_pcm_mmap_playback_avail(pcm);
-       if (avail < 0)
-               return 0;
+       avail = snd_pcm_dmix_forwardable(pcm);
        if (frames > (snd_pcm_uframes_t)avail)
                frames = avail;
        snd_pcm_mmap_appl_forward(pcm, frames);
index b985172825e73474672591dc1e6b354cca5dae90..f1a1a1d7522916abc5cc6b7f84c8f84b9e9fbcc0 100644 (file)
@@ -419,7 +419,7 @@ static snd_pcm_sframes_t snd_pcm_dshare_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
 {
        snd_pcm_sframes_t avail;
 
-       avail = snd_pcm_mmap_playback_hw_avail(pcm);
+       avail = snd_pcm_dshare_rewindable(pcm);
        if (avail < 0)
                return 0;
        if (frames > (snd_pcm_uframes_t)avail)
@@ -437,9 +437,7 @@ static snd_pcm_sframes_t snd_pcm_dshare_forward(snd_pcm_t *pcm, snd_pcm_uframes_
 {
        snd_pcm_sframes_t avail;
 
-       avail = snd_pcm_mmap_playback_avail(pcm);
-       if (avail < 0)
-               return 0;
+       avail = snd_pcm_dshare_forwardable(pcm);
        if (frames > (snd_pcm_uframes_t)avail)
                frames = avail;
        snd_pcm_mmap_appl_forward(pcm, frames);
index 0f9c9df481bc356e07c56aa248e51021b25c1659..e56e4022becffedd210eb7da98ab57ee60cff1a7 100644 (file)
@@ -342,9 +342,7 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
 {
        snd_pcm_sframes_t avail;
 
-       avail = snd_pcm_mmap_capture_avail(pcm);
-       if (avail < 0)
-               return 0;
+       avail = snd_pcm_dsnoop_rewindable(pcm);
        if (frames > (snd_pcm_uframes_t)avail)
                frames = avail;
        snd_pcm_mmap_appl_backward(pcm, frames);
@@ -360,7 +358,7 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_forward(snd_pcm_t *pcm, snd_pcm_uframes_
 {
        snd_pcm_sframes_t avail;
 
-       avail = snd_pcm_mmap_capture_hw_avail(pcm);
+       avail = snd_pcm_dsnoop_forwardable(pcm);
        if (avail < 0)
                return 0;
        if (frames > (snd_pcm_uframes_t)avail)
index 4ddf10c1989e4918325472976b85179fd503d7f9..a607ccfe27de437743824c0fec19016aff340fda 100644 (file)
@@ -204,7 +204,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_rewindable(snd_pcm_t *pcm)
 snd_pcm_sframes_t snd_pcm_plugin_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
 {
        snd_pcm_plugin_t *plugin = pcm->private_data;
-       snd_pcm_sframes_t n = snd_pcm_mmap_hw_avail(pcm);
+       snd_pcm_sframes_t n = snd_pcm_plugin_rewindable(pcm);
        snd_pcm_sframes_t sframes;
 
        if ((snd_pcm_uframes_t)n < frames)
@@ -232,7 +232,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_forwardable(snd_pcm_t *pcm)
 snd_pcm_sframes_t snd_pcm_plugin_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
 {
        snd_pcm_plugin_t *plugin = pcm->private_data;
-       snd_pcm_sframes_t n = snd_pcm_mmap_avail(pcm);
+       snd_pcm_sframes_t n = snd_pcm_plugin_forwardable(pcm);
        snd_pcm_sframes_t sframes;
 
        if ((snd_pcm_uframes_t)n < frames)