[PATCH 1/1] pcm_hw: Always use delay ioctl in snd_pcm_delay()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxx>

---
  src/pcm/pcm_hw.c |   22 ----------------------
  1 files changed, 0 insertions(+), 22 deletions(-)

diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c
index c46d14f..8abb204 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");
-- 
1.5.6.5
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux