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.
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:
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