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>
This commit is contained in:
@@ -187,6 +187,7 @@ private:
|
|||||||
QTimer *m_intervalTimer;
|
QTimer *m_intervalTimer;
|
||||||
CoreAudioDeviceInfo *m_audioDeviceInfo;
|
CoreAudioDeviceInfo *m_audioDeviceInfo;
|
||||||
qreal m_cachedVolume;
|
qreal m_cachedVolume;
|
||||||
|
bool m_pullMode;
|
||||||
|
|
||||||
QAudio::Error m_errorCode;
|
QAudio::Error m_errorCode;
|
||||||
QAudio::State m_stateCode;
|
QAudio::State m_stateCode;
|
||||||
|
|||||||
@@ -222,6 +222,7 @@ CoreAudioOutput::CoreAudioOutput(const QByteArray &device)
|
|||||||
, m_startTime(0)
|
, m_startTime(0)
|
||||||
, m_audioBuffer(0)
|
, m_audioBuffer(0)
|
||||||
, m_cachedVolume(1.0)
|
, m_cachedVolume(1.0)
|
||||||
|
, m_pullMode(false)
|
||||||
, m_errorCode(QAudio::NoError)
|
, m_errorCode(QAudio::NoError)
|
||||||
, m_stateCode(QAudio::StoppedState)
|
, m_stateCode(QAudio::StoppedState)
|
||||||
{
|
{
|
||||||
@@ -271,6 +272,7 @@ void CoreAudioOutput::start(QIODevice *device)
|
|||||||
m_stateCode = QAudio::ActiveState;
|
m_stateCode = QAudio::ActiveState;
|
||||||
|
|
||||||
// Start
|
// Start
|
||||||
|
m_pullMode = true;
|
||||||
m_errorCode = QAudio::NoError;
|
m_errorCode = QAudio::NoError;
|
||||||
m_totalFrames = 0;
|
m_totalFrames = 0;
|
||||||
m_startTime = CoreAudioUtils::currentTime();
|
m_startTime = CoreAudioUtils::currentTime();
|
||||||
@@ -296,6 +298,7 @@ QIODevice *CoreAudioOutput::start()
|
|||||||
m_stateCode = QAudio::IdleState;
|
m_stateCode = QAudio::IdleState;
|
||||||
|
|
||||||
// Start
|
// Start
|
||||||
|
m_pullMode = false;
|
||||||
m_errorCode = QAudio::NoError;
|
m_errorCode = QAudio::NoError;
|
||||||
m_totalFrames = 0;
|
m_totalFrames = 0;
|
||||||
m_startTime = CoreAudioUtils::currentTime();
|
m_startTime = CoreAudioUtils::currentTime();
|
||||||
@@ -347,7 +350,7 @@ void CoreAudioOutput::resume()
|
|||||||
if (m_stateCode == QAudio::SuspendedState) {
|
if (m_stateCode == QAudio::SuspendedState) {
|
||||||
audioThreadStart();
|
audioThreadStart();
|
||||||
|
|
||||||
m_stateCode = QAudio::ActiveState;
|
m_stateCode = m_pullMode ? QAudio::ActiveState : QAudio::IdleState;
|
||||||
m_errorCode = QAudio::NoError;
|
m_errorCode = QAudio::NoError;
|
||||||
emit stateChanged(m_stateCode);
|
emit stateChanged(m_stateCode);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user