Unfortunately, we cannot use status->avail from slave, because this value
does not wrap to the buffer size and it may even overflow slave boundary
(endless run). We can use only hw_ptr from slave.
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
case SNDRV_PCM_STATE_DRAINING:
case SNDRV_PCM_STATE_RUNNING:
snd_pcm_dmix_sync_ptr0(pcm, status->hw_ptr);
- status->delay += snd_pcm_mmap_playback_delay(pcm)
- + status->avail - dmix->spcm->buffer_size;
+ status->delay = snd_pcm_mmap_playback_delay(pcm);
break;
default:
break;
case SNDRV_PCM_STATE_PREPARED:
case SNDRV_PCM_STATE_SUSPENDED:
case STATE_RUN_PENDING:
- *delayp = snd_pcm_mmap_playback_hw_avail(pcm);
+ *delayp = snd_pcm_mmap_playback_delay(pcm);
return 0;
case SNDRV_PCM_STATE_XRUN:
return -EPIPE;
case SNDRV_PCM_STATE_DRAINING:
case SNDRV_PCM_STATE_RUNNING:
snd_pcm_dshare_sync_ptr0(pcm, status->hw_ptr);
- status->delay += snd_pcm_mmap_playback_delay(pcm)
- + status->avail - dshare->spcm->buffer_size;
+ status->delay += snd_pcm_mmap_playback_delay(pcm);
break;
default:
break;
case SNDRV_PCM_STATE_PREPARED:
case SNDRV_PCM_STATE_SUSPENDED:
case STATE_RUN_PENDING:
- *delayp = snd_pcm_mmap_playback_hw_avail(pcm);
+ *delayp = snd_pcm_mmap_playback_delay(pcm);
return 0;
case SNDRV_PCM_STATE_XRUN:
return -EPIPE;