diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index b7026e83b9..daca11bb91 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -618,12 +618,11 @@ void AudioClient::start() { void AudioClient::stop() { - // "switch" to invalid devices in order to shut down the state - qCDebug(audioclient) << "AudioClient::stop(), about to call switchInputToAudioDevice(null)"; - switchInputToAudioDevice(QAudioDeviceInfo()); + qCDebug(audioclient) << "AudioClient::stop(), requesting switchInputToAudioDevice() to shut down"; + switchInputToAudioDevice(QAudioDeviceInfo(), true); - qCDebug(audioclient) << "AudioClient::stop(), about to call switchOutputToAudioDevice(null)"; - switchOutputToAudioDevice(QAudioDeviceInfo()); + qCDebug(audioclient) << "AudioClient::stop(), requesting switchOutputToAudioDevice() to shut down"; + switchOutputToAudioDevice(QAudioDeviceInfo(), true); } void AudioClient::handleAudioEnvironmentDataPacket(QSharedPointer message) { @@ -1411,7 +1410,7 @@ void AudioClient::outputFormatChanged() { _receivedAudioStream.outputFormatChanged(_outputFormat.sampleRate(), OUTPUT_CHANNEL_COUNT); } -bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo) { +bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo, bool isShutdownRequest) { qCDebug(audioclient) << __FUNCTION__ << "inputDeviceInfo: [" << inputDeviceInfo.deviceName() << "]"; bool supportedFormat = false; @@ -1451,6 +1450,11 @@ bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceIn _audioGate = nullptr; } + if (isShutdownRequest) { + qCDebug(audioclient) << "The audio input device has shut down."; + return true; + } + if (!inputDeviceInfo.isNull()) { qCDebug(audioclient) << "The audio input device " << inputDeviceInfo.deviceName() << "is available."; _inputDeviceInfo = inputDeviceInfo; @@ -1559,9 +1563,8 @@ void AudioClient::outputNotify() { } } -bool AudioClient::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo) { +bool AudioClient::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo, bool isShutdownRequest) { qCDebug(audioclient) << "AudioClient::switchOutputToAudioDevice() outputDeviceInfo: [" << outputDeviceInfo.deviceName() << "]"; - bool supportedFormat = false; // NOTE: device start() uses the Qt internal device list @@ -1605,6 +1608,11 @@ bool AudioClient::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDevice _localToOutputResampler = NULL; } + if (isShutdownRequest) { + qCDebug(audioclient) << "The audio output device has shut down."; + return true; + } + if (!outputDeviceInfo.isNull()) { qCDebug(audioclient) << "The audio output device " << outputDeviceInfo.deviceName() << "is available."; _outputDeviceInfo = outputDeviceInfo; diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index b3bce0b450..26a07235d5 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -352,8 +352,8 @@ private: void handleLocalEchoAndReverb(QByteArray& inputByteArray); - bool switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo); - bool switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo); + bool switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceInfo, bool isShutdownRequest = false); + bool switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo, bool isShutdownRequest = false); // Callback acceleration dependent calculations int calculateNumberOfInputCallbackBytes(const QAudioFormat& format) const;