]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm_hw: Always use delay ioctl in snd_pcm_delay()
authorKai Vehmanen <kvehmanen@eca.cx>
Thu, 10 Sep 2009 22:07:21 +0000 (01:07 +0300)
committerTakashi Iwai <tiwai@suse.de>
Fri, 11 Sep 2009 07:18:36 +0000 (09:18 +0200)
As the result of snd_pcm_delay() is affected not only by hw_ptr
and appl_ptr, but also by 'runtime->delay' property,
either SNDRV_PCM_IOCTL_DELAY or SNDRV_PCM_IOCTL_STATUS ioctl
must be used to get the correct result.

Previously 'runtime->delay' was ignored in case 'hw->sync_ptr'
was used.

Signed-off-by: Kai Vehmanen <kvehmanen@eca.cx>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/pcm/pcm_hw.c

index c46d14ff36d8fa1e9980e7dd8706ee3f2318faf3..8abb20452815cf27cb3b305dbddf5a9599767ae2 100644 (file)
@@ -507,28 +507,6 @@ static int snd_pcm_hw_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
 {
        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");