From c92969845d6ad0c980ea6c7927ab2beeba70fd30 Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Mon, 7 Feb 2005 09:13:58 +0000 Subject: [PATCH] start pcm when draining in prepared state For consistency with hw pcms, dmix/dshare pcms are started when draining in the prepared state with a non-empty buffer. --- src/pcm/pcm_dmix.c | 3 +++ src/pcm/pcm_dshare.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c index 45b17fde..3add0645 100644 --- a/src/pcm/pcm_dmix.c +++ b/src/pcm/pcm_dmix.c @@ -595,6 +595,9 @@ static int snd_pcm_dmix_drain(snd_pcm_t *pcm) stop_threshold = pcm->stop_threshold; if (pcm->stop_threshold > pcm->buffer_size) pcm->stop_threshold = pcm->buffer_size; + if (dmix->state == SND_PCM_STATE_PREPARED && + snd_pcm_mmap_playback_hw_avail(pcm) > 0) + snd_pcm_dmix_start(pcm); while (dmix->state == SND_PCM_STATE_RUNNING) { err = snd_pcm_dmix_sync_ptr(pcm); if (err < 0) diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c index 19e9351f..9b09a8b0 100644 --- a/src/pcm/pcm_dshare.c +++ b/src/pcm/pcm_dshare.c @@ -326,6 +326,9 @@ static int snd_pcm_dshare_drain(snd_pcm_t *pcm) stop_threshold = pcm->stop_threshold; if (pcm->stop_threshold > pcm->buffer_size) pcm->stop_threshold = pcm->buffer_size; + if (dshare->state == SND_PCM_STATE_PREPARED && + snd_pcm_mmap_playback_hw_avail(pcm) > 0) + snd_pcm_dshare_start(pcm); while (dshare->state == SND_PCM_STATE_RUNNING) { err = snd_pcm_dshare_sync_ptr(pcm); if (err < 0) -- 2.47.1