From fd1458ce1bfef0d8f8baba0aff5edb5cfa0940a4 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 8 Jun 2018 05:02:47 -0700 Subject: Always prepare the ALSA PCM handle before starting capture Draining the ALSA device via stopping puts it into a setup state, which requires re-preparing before playback can start again. Preparing it prior to the first start seems to cause no harm, so just always do it before starting. --- Alc/backends/alsa.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'Alc/backends/alsa.c') diff --git a/Alc/backends/alsa.c b/Alc/backends/alsa.c index e0fdc070..409be7fa 100644 --- a/Alc/backends/alsa.c +++ b/Alc/backends/alsa.c @@ -1153,10 +1153,17 @@ error2: static ALCboolean ALCcaptureAlsa_start(ALCcaptureAlsa *self) { - int err = snd_pcm_start(self->pcmHandle); + int err = snd_pcm_prepare(self->pcmHandle); + if(err < 0) + ERR("prepare failed: %s\n", snd_strerror(err)); + else + { + err = snd_pcm_start(self->pcmHandle); + if(err < 0) + ERR("start failed: %s\n", snd_strerror(err)); + } if(err < 0) { - ERR("start failed: %s\n", snd_strerror(err)); aluHandleDisconnect(STATIC_CAST(ALCbackend, self)->mDevice, "Capture state failure: %s", snd_strerror(err)); return ALC_FALSE; -- cgit v1.2.3