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:
Takashi Iwai 2006-04-06 19:01:02 +02:00
parent a2ee8e20e8
commit 4c06a75a2f
2 changed files with 6 additions and 0 deletions

View file

@ -437,6 +437,7 @@ static int snd_pcm_dmix_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
if (err < 0)
return err;
/* fallthru */
snd_pcm_dmix_sync_area(pcm);
case SNDRV_PCM_STATE_PREPARED:
case SNDRV_PCM_STATE_SUSPENDED:
case STATE_RUN_PENDING:

View file

@ -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)
{
snd_pcm_rate_t *rate = pcm->private_data;
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)
*delayp = snd_pcm_mmap_playback_hw_avail(pcm);
else