mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-02 09:01:48 -05:00
Finer sync of dmix in delay callback
Sync pointers in delay callback in dmix. This solves some problems of aoss with apps that don't check poll_revents. The rate plugin is fixed to call delay of slave appropriately, too.
This commit is contained in:
parent
a2ee8e20e8
commit
4c06a75a2f
2 changed files with 6 additions and 0 deletions
|
|
@ -437,6 +437,7 @@ static int snd_pcm_dmix_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
/* fallthru */
|
/* fallthru */
|
||||||
|
snd_pcm_dmix_sync_area(pcm);
|
||||||
case SNDRV_PCM_STATE_PREPARED:
|
case SNDRV_PCM_STATE_PREPARED:
|
||||||
case SNDRV_PCM_STATE_SUSPENDED:
|
case SNDRV_PCM_STATE_SUSPENDED:
|
||||||
case STATE_RUN_PENDING:
|
case STATE_RUN_PENDING:
|
||||||
|
|
|
||||||
|
|
@ -617,7 +617,12 @@ static int snd_pcm_rate_hwsync(snd_pcm_t *pcm)
|
||||||
|
|
||||||
static int snd_pcm_rate_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
|
static int snd_pcm_rate_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
|
||||||
{
|
{
|
||||||
|
snd_pcm_rate_t *rate = pcm->private_data;
|
||||||
snd_pcm_rate_hwsync(pcm);
|
snd_pcm_rate_hwsync(pcm);
|
||||||
|
/* call slave's delay callback although the value is overwritten.
|
||||||
|
* it's needed for a better sync of dmix on aoss.
|
||||||
|
*/
|
||||||
|
snd_pcm_delay(rate->gen.slave, delayp);
|
||||||
if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
|
if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
|
||||||
*delayp = snd_pcm_mmap_playback_hw_avail(pcm);
|
*delayp = snd_pcm_mmap_playback_hw_avail(pcm);
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue