]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: multi plugin - adjust appl_ptr on rewind/forward operations
authorSava Jakovljev <sava.jakovljev@teufel.de>
Mon, 5 Jul 2021 18:28:34 +0000 (20:28 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 3 Sep 2021 06:54:56 +0000 (08:54 +0200)
When doing rewind or forward operations, application pointer needs to
be properly adjusted, in the same way when doing commit/write
operations.

Fixes: https://github.com/alsa-project/alsa-lib/pull/161
Signed-off-by: Sava Jakovljev <sava.jakovljev@teufel.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm_multi.c

index 5fa09b9bf5d09432238c96a35320173c2a43cfa2..7fb212765a1e364e22e58a86366c70a63d5d2ce5 100644 (file)
@@ -669,6 +669,7 @@ static snd_pcm_sframes_t snd_pcm_multi_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
                                return -EIO;
                }
        }
+       snd_pcm_mmap_appl_backward(pcm, frames);
        return frames;
 }
 
@@ -699,6 +700,7 @@ static snd_pcm_sframes_t snd_pcm_multi_forward(snd_pcm_t *pcm, snd_pcm_uframes_t
                                return -EIO;
                }
        }
+       snd_pcm_mmap_appl_forward(pcm, frames);
        return frames;
 }
 
@@ -782,8 +784,7 @@ static snd_pcm_sframes_t snd_pcm_multi_mmap_commit(snd_pcm_t *pcm,
                if ((snd_pcm_uframes_t)result != size)
                        return -EIO;
        }
-       multi->appl_ptr += size;
-       multi->appl_ptr %= pcm->boundary;
+       snd_pcm_mmap_appl_forward(pcm, size);
        return size;
 }