summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2022-05-03 19:08:59 +0200
committerJaroslav Kysela <perex@perex.cz>2022-05-03 19:09:01 +0200
commitd0ebce59286b53e094fbf87f722148ecb3cfb2c0 (patch)
tree3eb8e2a424a0f71987256918b1bcadb32db08995
parent76659453efecc6a4807fc270af8216f05cfa3dfe (diff)
downloadalsa-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.c18
-rw-r--r--src/pcm/pcm_direct.h2
-rw-r--r--src/pcm/pcm_dmix.c6
-rw-r--r--src/pcm/pcm_dshare.c6
-rw-r--r--src/pcm/pcm_dsnoop.c6
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;