mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-07 13:30:07 -05:00
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>
This commit is contained in:
parent
76659453ef
commit
d0ebce5928
5 changed files with 16 additions and 22 deletions
|
|
@ -2120,22 +2120,22 @@ int snd_pcm_direct_parse_open_conf(snd_config_t *root, snd_config_t *conf,
|
||||||
return 0;
|
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 ||
|
if (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_ROUNDUP ||
|
||||||
(dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
|
(dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
|
||||||
pcm->buffer_size <= pcm->period_size * 2))
|
pcm->buffer_size <= pcm->period_size * 2))
|
||||||
dmix->slave_appl_ptr =
|
dmix->slave_appl_ptr =
|
||||||
((dmix->slave_appl_ptr + dmix->slave_period_size - 1) /
|
((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 ||
|
else if (dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_ROUNDDOWN ||
|
||||||
(dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
|
(dmix->hw_ptr_alignment == SND_PCM_HW_PTR_ALIGNMENT_AUTO &&
|
||||||
(dmix->slave_period_size * SEC_TO_MS) /
|
((dmix->slave_period_size * SEC_TO_MS) / pcm->rate) < LOW_LATENCY_PERIOD_TIME))
|
||||||
pcm->rate < LOW_LATENCY_PERIOD_TIME))
|
|
||||||
dmix->slave_appl_ptr = dmix->slave_hw_ptr =
|
dmix->slave_appl_ptr = dmix->slave_hw_ptr =
|
||||||
((dmix->slave_hw_ptr / dmix->slave_period_size) *
|
((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,
|
int _snd_pcm_direct_new(snd_pcm_t **pcmp, snd_pcm_direct_t **_dmix, int type,
|
||||||
|
|
|
||||||
|
|
@ -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_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);
|
int snd_timer_async(snd_timer_t *timer, int sig, pid_t pid);
|
||||||
struct timespec snd_pcm_hw_fast_tstamp(snd_pcm_t *pcm);
|
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 {
|
struct snd_pcm_direct_open_conf {
|
||||||
key_t ipc_key;
|
key_t ipc_key;
|
||||||
|
|
|
||||||
|
|
@ -531,8 +531,7 @@ static int snd_pcm_dmix_reset(snd_pcm_t *pcm)
|
||||||
snd_pcm_direct_t *dmix = pcm->private_data;
|
snd_pcm_direct_t *dmix = pcm->private_data;
|
||||||
dmix->hw_ptr %= pcm->period_size;
|
dmix->hw_ptr %= pcm->period_size;
|
||||||
dmix->appl_ptr = dmix->last_appl_ptr = dmix->hw_ptr;
|
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, *dmix->spcm->hw.ptr);
|
||||||
snd_pcm_direct_reset_slave_ptr(pcm, dmix);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -541,8 +540,7 @@ static int snd_pcm_dmix_start_timer(snd_pcm_t *pcm, snd_pcm_direct_t *dmix)
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
snd_pcm_hwsync(dmix->spcm);
|
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, *dmix->spcm->hw.ptr);
|
||||||
snd_pcm_direct_reset_slave_ptr(pcm, dmix);
|
|
||||||
err = snd_timer_start(dmix->timer);
|
err = snd_timer_start(dmix->timer);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
|
||||||
|
|
@ -305,8 +305,7 @@ static int snd_pcm_dshare_reset(snd_pcm_t *pcm)
|
||||||
snd_pcm_direct_t *dshare = pcm->private_data;
|
snd_pcm_direct_t *dshare = pcm->private_data;
|
||||||
dshare->hw_ptr %= pcm->period_size;
|
dshare->hw_ptr %= pcm->period_size;
|
||||||
dshare->appl_ptr = dshare->last_appl_ptr = dshare->hw_ptr;
|
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, *dshare->spcm->hw.ptr);
|
||||||
snd_pcm_direct_reset_slave_ptr(pcm, dshare);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -315,8 +314,7 @@ static int snd_pcm_dshare_start_timer(snd_pcm_t *pcm, snd_pcm_direct_t *dshare)
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
snd_pcm_hwsync(dshare->spcm);
|
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, *dshare->spcm->hw.ptr);
|
||||||
snd_pcm_direct_reset_slave_ptr(pcm, dshare);
|
|
||||||
err = snd_timer_start(dshare->timer);
|
err = snd_timer_start(dshare->timer);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
|
||||||
|
|
@ -251,8 +251,7 @@ static int snd_pcm_dsnoop_reset(snd_pcm_t *pcm)
|
||||||
snd_pcm_direct_t *dsnoop = pcm->private_data;
|
snd_pcm_direct_t *dsnoop = pcm->private_data;
|
||||||
dsnoop->hw_ptr %= pcm->period_size;
|
dsnoop->hw_ptr %= pcm->period_size;
|
||||||
dsnoop->appl_ptr = dsnoop->hw_ptr;
|
dsnoop->appl_ptr = dsnoop->hw_ptr;
|
||||||
dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr;
|
snd_pcm_direct_reset_slave_ptr(pcm, dsnoop, dsnoop->slave_hw_ptr);
|
||||||
snd_pcm_direct_reset_slave_ptr(pcm, dsnoop);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -265,8 +264,7 @@ static int snd_pcm_dsnoop_start(snd_pcm_t *pcm)
|
||||||
return -EBADFD;
|
return -EBADFD;
|
||||||
snd_pcm_hwsync(dsnoop->spcm);
|
snd_pcm_hwsync(dsnoop->spcm);
|
||||||
snoop_timestamp(pcm);
|
snoop_timestamp(pcm);
|
||||||
dsnoop->slave_appl_ptr = dsnoop->slave_hw_ptr;
|
snd_pcm_direct_reset_slave_ptr(pcm, dsnoop, dsnoop->slave_hw_ptr);
|
||||||
snd_pcm_direct_reset_slave_ptr(pcm, dsnoop);
|
|
||||||
err = snd_timer_start(dsnoop->timer);
|
err = snd_timer_start(dsnoop->timer);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue