commit 9047d9b84e9d94d193e77abd81f5980eff77d73a Author: Stephen Hurd Date: Thu Apr 14 19:11:01 2016 -0700 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 +++ 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); --- src/plugins/alsa/qalsaaudiooutput.cpp +++ 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;