diff options
author | Jaroslav Kysela <perex@perex.cz> | 2022-05-03 19:08:59 +0200 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2022-05-03 19:09:01 +0200 |
commit | d0ebce59286b53e094fbf87f722148ecb3cfb2c0 (patch) | |
tree | 3eb8e2a424a0f71987256918b1bcadb32db08995 | |
parent | 76659453efecc6a4807fc270af8216f05cfa3dfe (diff) | |
download | alsa-lib-d0ebce59286b53e094fbf87f722148ecb3cfb2c0.tar.gz |
pcm: direct - cleanups for snd_pcm_direct_reset_slave_ptr()
- improve readability
- pass slave hw_ptr as argument - improves the code flow
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r-- | src/pcm/pcm_direct.c | 18 | ||||
-rw-r--r-- | src/pcm/pcm_direct.h | 2 | ||||
-rw-r--r-- | src/pcm/pcm_dmix.c | 6 | ||||
-rw-r--r-- | src/pcm/pcm_dshare.c | 6 | ||||
-rw-r--r-- | src/pcm/pcm_dsnoop.c | 6 |
5 files changed, 16 insertions, 22 deletions
diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c index 9096315d..ea8950c8 100644 --- a/src/pcm/pcm_direct.c +++ b/src/pcm/pcm_direct.c @@ -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, diff --git a/src/pcm/pcm_direct.h b/src/pcm/pcm_direct.h index 3e0c8bfc..181f45ee 100644 --- a/src/pcm/pcm_direct.h +++ b/src/pcm/pcm_direct.h @@ -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; diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index c6cb47f0..02be0030 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -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; diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c index 461adafc..a890c3d7 100644 --- a/src/pcm/pcm_dshare.c +++ b/src/pcm/pcm_dshare.c @@ -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; diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c index 9abbbef2..64f93a1a 100644 --- a/src/pcm/pcm_dsnoop.c +++ b/src/pcm/pcm_dsnoop.c @@ -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; |