summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVal Doroshchuk <valentyn.doroshchuk@qt.io>2020-04-28 13:18:52 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-06-09 12:49:05 +0000
commit956fbd3f352f8bba5b8bf985b1787fc7b71aff24 (patch)
tree7842addafa71b08282c5346c1c80c4fe379cbda2
parent099bddad51d0924a3f1c8a4271754e5cc3d964a7 (diff)
downloadqtmultimedia-956fbd3f352f8bba5b8bf985b1787fc7b71aff24.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. Fixes: QTBUG-83776 Change-Id: I9364bdea2882bc23039817207eca62b311841ba6 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit b5a55492a63cb2cda75d6f980acb7fc5ae8dfc22) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/coreaudio/coreaudiodeviceinfo.mm13
-rw-r--r--src/plugins/coreaudio/coreaudioinput.mm5
-rw-r--r--src/plugins/coreaudio/coreaudiooutput.mm7
-rw-r--r--src/plugins/coreaudio/coreaudiosessionmanager.mm5
4 files changed, 12 insertions, 18 deletions
diff --git a/src/plugins/coreaudio/coreaudiodeviceinfo.mm b/src/plugins/coreaudio/coreaudiodeviceinfo.mm
index 1a79438cb..05d6c613d 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()