]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: direct - cleanups for snd_pcm_direct_reset_slave_ptr()
authorJaroslav Kysela <perex@perex.cz>
Tue, 3 May 2022 17:08:59 +0000 (19:08 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 3 May 2022 17:09:01 +0000 (19:09 +0200)
- improve readability
- pass slave hw_ptr as argument - improves the code flow

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm_direct.c
src/pcm/pcm_direct.h
src/pcm/pcm_dmix.c
src/pcm/pcm_dshare.c
src/pcm/pcm_dsnoop.c

index 9096315df33b7a778a6ef1a177844f1a167f73eb..ea8950c8a867c855074d3acab0815814ba6b5813 100644 (file)
@@ -2120,22 +2120,22 @@ int snd_pcm_direct_parse_open_conf(snd_config_t *root, snd_config_t *conf,
        return 0;
 }
 
-void snd_pcm_direct_reset_slave_ptr(snd_pcm_t *pcm, snd_pcm_direct_t *dmix)
+void snd_pcm_direct_reset_slave_ptr(snd_pcm_t *pcm, snd_pcm_direct_t *dmix,
+                                   snd_pcm_uframes_t hw_ptr)
 {
-
+       dmix->slave_appl_ptr = dmix->slave_hw_ptr = hw_ptr;
        if (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_ROUNDUP ||
-               (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
-               pcm->buffer_size <= pcm->period_size * 2))
+           (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
+            pcm->buffer_size <= pcm->period_size * 2))
                dmix->slave_appl_ptr =
                        ((dmix->slave_appl_ptr + dmix->slave_period_size - 1) /
-                       dmix->slave_period_size) * dmix->slave_period_size;
+                                       dmix->slave_period_size) * dmix->slave_period_size;
        else if (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_ROUNDDOWN ||
-               (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
-               (dmix->slave_period_size * SEC_TO_MS) /
-               pcm->rate < LOW_LATENCY_PERIOD_TIME))
+                (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
+                 ((dmix->slave_period_size * SEC_TO_MS) / pcm->rate) < LOW_LATENCY_PERIOD_TIME))
                dmix->slave_appl_ptr = dmix->slave_hw_ptr =
                        ((dmix->slave_hw_ptr / dmix->slave_period_size) *
-                       dmix->slave_period_size);
+                                                       dmix->slave_period_size);
 }
 
 int _snd_pcm_direct_new(snd_pcm_t **pcmp, snd_pcm_direct_t **_dmix, int type,
index 3e0c8bfcc9bc278bab3f19af4f5f7120e9d33606..181f45ee71fe5b750899ce385146793dac849d7a 100644 (file)
@@ -348,7 +348,7 @@ int snd_pcm_direct_slave_recover(snd_pcm_direct_t *direct);
 int snd_pcm_direct_check_xrun(snd_pcm_direct_t *direct, snd_pcm_t *pcm);
 int snd_timer_async(snd_timer_t *timer, int sig, pid_t pid);
 struct timespec snd_pcm_hw_fast_tstamp(snd_pcm_t *pcm);
-void snd_pcm_direct_reset_slave_ptr(snd_pcm_t *pcm, snd_pcm_direct_t *dmix);
+void snd_pcm_direct_reset_slave_ptr(snd_pcm_t *pcm, snd_pcm_direct_t *dmix, snd_pcm_uframes_t hw_ptr);
 
 struct snd_pcm_direct_open_conf {
        key_t ipc_key;
index c6cb47f0f840cebeaea9614398742c731e3d5d15..02be00301a4abbce3fbffb988c3dde19062b597c 100644 (file)
@@ -531,8 +531,7 @@ static int snd_pcm_dmix_reset(snd_pcm_t *pcm)
        snd_pcm_direct_t *dmix = pcm->private_data;
        dmix->hw_ptr %= pcm->period_size;
        dmix->appl_ptr = dmix->last_appl_ptr = dmix->hw_ptr;
-       dmix->slave_appl_ptr = dmix->slave_hw_ptr = *dmix->spcm->hw.ptr;
-       snd_pcm_direct_reset_slave_ptr(pcm, dmix);
+       snd_pcm_direct_reset_slave_ptr(pcm, dmix, *dmix->spcm->hw.ptr);
        return 0;
 }
 
@@ -541,8 +540,7 @@ static int snd_pcm_dmix_start_timer(snd_pcm_t *pcm, snd_pcm_direct_t *dmix)
        int err;
 
        snd_pcm_hwsync(dmix->spcm);
-       dmix->slave_appl_ptr = dmix->slave_hw_ptr = *dmix->spcm->hw.ptr;
-       snd_pcm_direct_reset_slave_ptr(pcm, dmix);
+       snd_pcm_direct_reset_slave_ptr(pcm, dmix, *dmix->spcm->hw.ptr);
        err = snd_timer_start(dmix->timer);
        if (err < 0)
                return err;
index 461adafc77f86b0c70c282312bf9aafbf0d313e2..a890c3d71a8359a1c1cff3e82869ea2460cf66d6 100644 (file)
@@ -305,8 +305,7 @@ static int snd_pcm_dshare_reset(snd_pcm_t *pcm)
        snd_pcm_direct_t *dshare = pcm->private_data;
        dshare->hw_ptr %= pcm->period_size;
        dshare->appl_ptr = dshare->last_appl_ptr = dshare->hw_ptr;
-       dshare->slave_appl_ptr = dshare->slave_hw_ptr = *dshare->spcm->hw.ptr;
-       snd_pcm_direct_reset_slave_ptr(pcm, dshare);
+       snd_pcm_direct_reset_slave_ptr(pcm, dshare, *dshare->spcm->hw.ptr);
        return 0;
 }
 
@@ -315,8 +314,7 @@ static int snd_pcm_dshare_start_timer(snd_pcm_t *pcm, snd_pcm_direct_t *dshare)
        int err;
 
        snd_pcm_hwsync(dshare->spcm);
-       dshare->slave_appl_ptr = dshare->slave_hw_ptr = *dshare->spcm->hw.ptr;
-       snd_pcm_direct_reset_slave_ptr(pcm, dshare);
+       snd_pcm_direct_reset_slave_ptr(pcm, dshare, *dshare->spcm->hw.ptr);
        err = snd_timer_start(dshare->timer);
        if (err < 0)
                return err;
index 9abbbef2c1b67f157119fff6da77194a399524ca..64f93a1aaad09d9a5fd568dff1985970d5ec798e 100644 (file)
@@ -251,8 +251,7 @@ static int snd_pcm_dsnoop_reset(snd_pcm_t *pcm)
        snd_pcm_direct_t *dsnoop = pcm->private_data;
        dsnoop->hw_ptr %= pcm->period_size;
        dsnoop->appl_ptr = dsnoop->hw_ptr;
-       dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr;
-       snd_pcm_direct_reset_slave_ptr(pcm, dsnoop);
+       snd_pcm_direct_reset_slave_ptr(pcm, dsnoop, dsnoop->slave_hw_ptr);
        return 0;
 }
 
@@ -265,8 +264,7 @@ static int snd_pcm_dsnoop_start(snd_pcm_t *pcm)
                return -EBADFD;
        snd_pcm_hwsync(dsnoop->spcm);
        snoop_timestamp(pcm);
-       dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr;
-       snd_pcm_direct_reset_slave_ptr(pcm, dsnoop);
+       snd_pcm_direct_reset_slave_ptr(pcm, dsnoop, dsnoop->slave_hw_ptr);
        err = snd_timer_start(dsnoop->timer);
        if (err < 0)
                return err;