Add patch to fix underrun errors in the ALSA plugin.

The ALSA plugin doesn'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.

PR:		208598
Submitted by:	shurd
MFH:		2016Q2
This commit is contained in:
Raphael Kubo da Costa 2016-04-16 17:17:12 +00:00
parent 40d5590e76
commit c031e35484
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=413463
2 changed files with 37 additions and 0 deletions

View file

@ -2,6 +2,7 @@
PORTNAME= multimedia
DISTVERSION= ${QT5_VERSION}
PORTREVISION= 1
CATEGORIES= multimedia
PKGNAMEPREFIX= qt5-

View file

@ -0,0 +1,36 @@
commit 9047d9b84e9d94d193e77abd81f5980eff77d73a
Author: Stephen Hurd <shurd@freebsd.org>
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 <christian.stromme@theqtcompany.com>
--- 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;