summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKai Vehmanen <kvehmanen@eca.cx>2009-09-11 01:07:21 +0300
committerTakashi Iwai <tiwai@suse.de>2009-09-11 09:18:36 +0200
commitecf4b5af8632a17af3c84cfceeaaf0a1609e2928 (patch)
treefd765487bf12e3b4f3dad58332054c6b1bef9218 /src
parenta4e7033f8d0aec42d8ca29a9e500c50c1627afff (diff)
pcm_hw: Always use delay ioctl in snd_pcm_delay()
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>
Diffstat (limited to 'src')
-rw-r--r--src/pcm/pcm_hw.c22
1 files changed, 0 insertions, 22 deletions
diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c
index c46d14ff..8abb2045 100644
--- a/src/pcm/pcm_hw.c
+++ b/src/pcm/pcm_hw.c
@@ -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");