diff options
author | Val Doroshchuk <valentyn.doroshchuk@qt.io> | 2020-04-28 13:18:52 +0200 |
---|---|---|
committer | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2020-06-09 09:31:38 +0000 |
commit | b5a55492a63cb2cda75d6f980acb7fc5ae8dfc22 (patch) | |
tree | c07352711f1e6344a3c6fbba1ca8caa655b0c8f8 | |
parent | 19cc3a018f2442221d566ec56bda2bdbdce7ec2e (diff) | |
download | qtmultimedia-b5a55492a63cb2cda75d6f980acb7fc5ae8dfc22.tar.gz |
CoreAudio: Don't apply audio category if it is not needed
If just devices are requested, no need to apply any categories
with activation of audio device.
Postpone setting category and activating audio until
actual playing is requested.
Categories/options for input devices:
AVAudioSessionCategoryPlayAndRecord with AVAudioSessionCategoryOptionMixWithOthers
For output:
AVAudioSessionCategoryAmbient with no options.
Pick-to: 5.15
Fixes: QTBUG-83776
Change-Id: I9364bdea2882bc23039817207eca62b311841ba6
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r-- | src/plugins/coreaudio/coreaudiodeviceinfo.mm | 13 | ||||
-rw-r--r-- | src/plugins/coreaudio/coreaudioinput.mm | 5 | ||||
-rw-r--r-- | src/plugins/coreaudio/coreaudiooutput.mm | 7 | ||||
-rw-r--r-- | src/plugins/coreaudio/coreaudiosessionmanager.mm | 5 |
4 files changed, 12 insertions, 18 deletions
diff --git a/src/plugins/coreaudio/coreaudiodeviceinfo.mm b/src/plugins/coreaudio/coreaudiodeviceinfo.mm index 594ea225b..2cc99f5f9 100644 --- a/src/plugins/coreaudio/coreaudiodeviceinfo.mm +++ b/src/plugins/coreaudio/coreaudiodeviceinfo.mm @@ -60,11 +60,6 @@ CoreAudioDeviceInfo::CoreAudioDeviceInfo(const QByteArray &device, QAudio::Mode m_deviceId = AudioDeviceID(deviceID); #else //iOS m_device = device; - if (mode == QAudio::AudioInput) { - if (CoreAudioSessionManager::instance().category() != CoreAudioSessionManager::PlayAndRecord) { - CoreAudioSessionManager::instance().setCategory(CoreAudioSessionManager::PlayAndRecord); - } - } #endif } @@ -336,14 +331,6 @@ QList<QByteArray> CoreAudioDeviceInfo::availableDevices(QAudio::Mode mode) } } #else //iOS - if (mode == QAudio::AudioInput) { - if (CoreAudioSessionManager::instance().category() != CoreAudioSessionManager::PlayAndRecord) { - CoreAudioSessionManager::instance().setCategory(CoreAudioSessionManager::PlayAndRecord); - } - } - - CoreAudioSessionManager::instance().setActive(true); - if (mode == QAudio::AudioOutput) return CoreAudioSessionManager::instance().outputDevices(); if (mode == QAudio::AudioInput) diff --git a/src/plugins/coreaudio/coreaudioinput.mm b/src/plugins/coreaudio/coreaudioinput.mm index f7d511d27..7f305168f 100644 --- a/src/plugins/coreaudio/coreaudioinput.mm +++ b/src/plugins/coreaudio/coreaudioinput.mm @@ -483,6 +483,11 @@ CoreAudioInput::~CoreAudioInput() bool CoreAudioInput::open() { +#if defined(Q_OS_IOS) + CoreAudioSessionManager::instance().setCategory(CoreAudioSessionManager::PlayAndRecord, CoreAudioSessionManager::MixWithOthers); + CoreAudioSessionManager::instance().setActive(true); +#endif + if (m_isOpen) return true; diff --git a/src/plugins/coreaudio/coreaudiooutput.mm b/src/plugins/coreaudio/coreaudiooutput.mm index caa4a1abb..b8addc1cf 100644 --- a/src/plugins/coreaudio/coreaudiooutput.mm +++ b/src/plugins/coreaudio/coreaudiooutput.mm @@ -549,6 +549,13 @@ OSStatus CoreAudioOutput::renderCallback(void *inRefCon, AudioUnitRenderActionFl bool CoreAudioOutput::open() { +#if defined(Q_OS_IOS) + // Set default category to Ambient (implies MixWithOthers). This makes sure audio stops playing + // if the screen is locked or if the Silent switch is toggled. + CoreAudioSessionManager::instance().setCategory(CoreAudioSessionManager::Ambient, CoreAudioSessionManager::None); + CoreAudioSessionManager::instance().setActive(true); +#endif + if (m_errorCode != QAudio::NoError) return false; diff --git a/src/plugins/coreaudio/coreaudiosessionmanager.mm b/src/plugins/coreaudio/coreaudiosessionmanager.mm index 923a1942f..6c86f0753 100644 --- a/src/plugins/coreaudio/coreaudiosessionmanager.mm +++ b/src/plugins/coreaudio/coreaudiosessionmanager.mm @@ -38,7 +38,6 @@ ****************************************************************************/ #include "coreaudiosessionmanager.h" - #import <AVFoundation/AVAudioSession.h> #import <Foundation/Foundation.h> @@ -215,10 +214,6 @@ CoreAudioSessionManager::CoreAudioSessionManager() : QObject(0) { m_sessionObserver = [[CoreAudioSessionObserver alloc] initWithAudioSessionManager:this]; - setActive(true); - // Set default category to Ambient (implies MixWithOthers). This makes sure audio stops playing - // if the screen is locked or if the Silent switch is toggled. - setCategory(CoreAudioSessionManager::Ambient, CoreAudioSessionManager::None); } CoreAudioSessionManager::~CoreAudioSessionManager() |