diff options
author | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2016-01-19 13:58:06 +0100 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2016-01-19 15:30:40 +0000 |
commit | 94c846fb48baec9f1a6ddcc974d6db61c95658d8 (patch) | |
tree | 97ea6cc1782572c7b1088d36b0c8c5426e76a03d /src | |
parent | f97c4aaa86a8a0a5694e0e534892e7a3aa76d2ca (diff) |
CoreAudio: fix QAudioOutput state after resume().
In push mode, the state must be IdleState after resume(), and only
change to ActiveState once it receives some data.
Task-number: QTBUG-50390
Change-Id: I4a38aa84a55e90d7a2db3e1d504674b2a688bbde
Reviewed-by: Pasi Petäjäjärvi <pasi.petajajarvi@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/coreaudio/coreaudiooutput.h | 1 | ||||
-rw-r--r-- | src/plugins/coreaudio/coreaudiooutput.mm | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/plugins/coreaudio/coreaudiooutput.h b/src/plugins/coreaudio/coreaudiooutput.h index 4b4b781f5..cc391f783 100644 --- a/src/plugins/coreaudio/coreaudiooutput.h +++ b/src/plugins/coreaudio/coreaudiooutput.h @@ -187,6 +187,7 @@ private: QTimer *m_intervalTimer; CoreAudioDeviceInfo *m_audioDeviceInfo; qreal m_cachedVolume; + bool m_pullMode; QAudio::Error m_errorCode; QAudio::State m_stateCode; diff --git a/src/plugins/coreaudio/coreaudiooutput.mm b/src/plugins/coreaudio/coreaudiooutput.mm index 149b5a8c0..2db26297a 100644 --- a/src/plugins/coreaudio/coreaudiooutput.mm +++ b/src/plugins/coreaudio/coreaudiooutput.mm @@ -222,6 +222,7 @@ CoreAudioOutput::CoreAudioOutput(const QByteArray &device) , m_startTime(0) , m_audioBuffer(0) , m_cachedVolume(1.0) + , m_pullMode(false) , m_errorCode(QAudio::NoError) , m_stateCode(QAudio::StoppedState) { @@ -271,6 +272,7 @@ void CoreAudioOutput::start(QIODevice *device) m_stateCode = QAudio::ActiveState; // Start + m_pullMode = true; m_errorCode = QAudio::NoError; m_totalFrames = 0; m_startTime = CoreAudioUtils::currentTime(); @@ -296,6 +298,7 @@ QIODevice *CoreAudioOutput::start() m_stateCode = QAudio::IdleState; // Start + m_pullMode = false; m_errorCode = QAudio::NoError; m_totalFrames = 0; m_startTime = CoreAudioUtils::currentTime(); @@ -347,7 +350,7 @@ void CoreAudioOutput::resume() if (m_stateCode == QAudio::SuspendedState) { audioThreadStart(); - m_stateCode = QAudio::ActiveState; + m_stateCode = m_pullMode ? QAudio::ActiveState : QAudio::IdleState; m_errorCode = QAudio::NoError; emit stateChanged(m_stateCode); } |