From 9047d9b84e9d94d193e77abd81f5980eff77d73a Mon Sep 17 00:00:00 2001 From: Stephen Hurd Date: Thu, 14 Apr 2016 19:11:01 -0700 Subject: ALSA: Call snd_pcm_drain() on suspend The ALSA plugin previously didn't suspend the ALSA device when the ::suspend() method is called. This results in underrun errors when it's resumed. In ALSA, stopping a pcm doesn't close it, so the ALSA stop/start functions map to the QAudioInput suspend/resume functions. Change-Id: I2507065a1b7472af29eef70c531b9f6e8e5b3072 Reviewed-by: Christian Stromme --- src/plugins/alsa/qalsaaudioinput.cpp | 1 + src/plugins/alsa/qalsaaudiooutput.cpp | 1 + 2 files changed, 2 insertions(+) (limited to 'src/plugins/alsa') diff --git a/src/plugins/alsa/qalsaaudioinput.cpp b/src/plugins/alsa/qalsaaudioinput.cpp index d9c775148..5f7a788a6 100644 --- a/src/plugins/alsa/qalsaaudioinput.cpp +++ b/src/plugins/alsa/qalsaaudioinput.cpp @@ -701,6 +701,7 @@ qint64 QAlsaAudioInput::processedUSecs() const void QAlsaAudioInput::suspend() { if(deviceState == QAudio::ActiveState||resuming) { + snd_pcm_drain(handle); timer->stop(); deviceState = QAudio::SuspendedState; emit stateChanged(deviceState); diff --git a/src/plugins/alsa/qalsaaudiooutput.cpp b/src/plugins/alsa/qalsaaudiooutput.cpp index 5702cfc78..02681a4df 100644 --- a/src/plugins/alsa/qalsaaudiooutput.cpp +++ b/src/plugins/alsa/qalsaaudiooutput.cpp @@ -673,6 +673,7 @@ QAudioFormat QAlsaAudioOutput::format() const void QAlsaAudioOutput::suspend() { if(deviceState == QAudio::ActiveState || deviceState == QAudio::IdleState || resuming) { + snd_pcm_drain(handle); timer->stop(); deviceState = QAudio::SuspendedState; errorState = QAudio::NoError; -- cgit v1.2.3