{
snd_pcm_hw_t *hw = pcm->private_data;
int fd = hw->fd, err;
- if (hw->sync_ptr) {
- err = sync_ptr1(hw, SNDRV_PCM_SYNC_PTR_HWSYNC);
- if (err < 0)
- return err;
- switch (FAST_PCM_STATE(hw)) {
- case SNDRV_PCM_STATE_RUNNING:
- case SNDRV_PCM_STATE_DRAINING:
- case SNDRV_PCM_STATE_PAUSED:
- case SNDRV_PCM_STATE_PREPARED:
- case SNDRV_PCM_STATE_SUSPENDED:
- break;
- case SNDRV_PCM_STATE_XRUN:
- return -EPIPE;
- default:
- return -EBADFD;
- }
- if (pcm->stream == SND_PCM_STREAM_PLAYBACK)
- *delayp = snd_pcm_mmap_playback_hw_avail(pcm);
- else
- *delayp = snd_pcm_mmap_capture_avail(pcm);
- return 0;
- }
if (ioctl(fd, SNDRV_PCM_IOCTL_DELAY, delayp) < 0) {
err = -errno;
SYSMSG("SNDRV_PCM_IOCTL_DELAY failed");