From 4255b1f9aa71bcac16af27ec162e0d4bdea22ce9 Mon Sep 17 00:00:00 2001 From: Howard Stearns Date: Tue, 16 Feb 2016 11:22:01 -0800 Subject: [PATCH] Change output buffer size on correct thread, and turn on automatic resizing on all platforms instead of just mac. --- libraries/audio-client/src/AudioClient.cpp | 6 ++++-- libraries/audio-client/src/AudioClient.h | 7 ++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 60c9287912..73343b510e 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -976,7 +976,8 @@ void AudioClient::outputNotify() { setOutputBufferSize(newOutputBufferSizeFrames); newOutputBufferSizeFrames = _outputBufferSizeFrames.get(); if (newOutputBufferSizeFrames > oldOutputBufferSizeFrames) { - qCDebug(audioclient) << "Starve detection threshold met, increasing buffer size to " << newOutputBufferSizeFrames; + qCDebug(audioclient) << "Starve detection threshold met, increasing buffer size to " << newOutputBufferSizeFrames << + "on period size" << _audioOutput->periodSize() << "bytes."; } } } @@ -1041,6 +1042,7 @@ bool AudioClient::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDevice _audioOutput->setBufferSize(_outputBufferSizeFrames.get() * _outputFrameSize * sizeof(int16_t)); connect(_audioOutput, &QAudioOutput::notify, this, &AudioClient::outputNotify); + connect(this, &AudioClient::changeDevice, this, [=](const QAudioDeviceInfo& outputDeviceInfo) { switchOutputToAudioDevice(outputDeviceInfo); }); qCDebug(audioclient) << "Output Buffer capacity in frames: " << _audioOutput->bufferSize() / sizeof(int16_t) / (float)_outputFrameSize; @@ -1070,7 +1072,7 @@ void AudioClient::setOutputBufferSize(int numFrames) { // The buffer size can't be adjusted after QAudioOutput::start() has been called, so // recreate the device by switching to the default. QAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput); - switchOutputToAudioDevice(outputDeviceInfo); + emit changeDevice(outputDeviceInfo); // On correct thread, please, as setOutputBufferSize can be called from main thread. } } } diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 6b2f39c47c..47eef0762e 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -57,11 +57,7 @@ static const int NUM_AUDIO_CHANNELS = 2; static const int DEFAULT_AUDIO_OUTPUT_BUFFER_SIZE_FRAMES = 3; static const int MIN_AUDIO_OUTPUT_BUFFER_SIZE_FRAMES = 1; static const int MAX_AUDIO_OUTPUT_BUFFER_SIZE_FRAMES = 20; -#if defined(Q_OS_ANDROID) || defined(Q_OS_WIN) - static const int DEFAULT_AUDIO_OUTPUT_STARVE_DETECTION_ENABLED = false; -#else - static const int DEFAULT_AUDIO_OUTPUT_STARVE_DETECTION_ENABLED = true; -#endif +static const int DEFAULT_AUDIO_OUTPUT_STARVE_DETECTION_ENABLED = true; static const int DEFAULT_AUDIO_OUTPUT_STARVE_DETECTION_THRESHOLD = 3; static const quint64 DEFAULT_AUDIO_OUTPUT_STARVE_DETECTION_PERIOD = 10 * 1000; // 10 Seconds @@ -184,6 +180,7 @@ signals: void outputBytesToNetwork(int numBytes); void inputBytesFromNetwork(int numBytes); + void changeDevice(const QAudioDeviceInfo& outputDeviceInfo); void deviceChanged(); void receivedFirstPacket();