From 175bdda34701fb3ee9688b40a974a402975b910f Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Thu, 6 Mar 2014 12:33:41 +0100 Subject: CoreAudio: Set default audio category to Playback on iOS This fixes the issue that when we use QSoundEffect we dont need to get permission to use the microphone. This was because we were defaulting to PlayAndRecord. Now we only switch to the PlayAndRecord category when we try and use an input device. [ChangeLog][QtMultimedia][iOS] Using QSoundEffect (or SoundEffect in QML) no longer requires permission to use the microphone. Change-Id: I94535215497a718005c280bfd84b428b4bf1b16a Reviewed-by: Yoann Lopes --- src/plugins/coreaudio/coreaudiodeviceinfo.mm | 11 +++++++++++ src/plugins/coreaudio/coreaudioinput.mm | 4 ++++ src/plugins/coreaudio/coreaudiosessionmanager.mm | 3 ++- 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src/plugins/coreaudio') diff --git a/src/plugins/coreaudio/coreaudiodeviceinfo.mm b/src/plugins/coreaudio/coreaudiodeviceinfo.mm index bb1f046a6..74a692c10 100644 --- a/src/plugins/coreaudio/coreaudiodeviceinfo.mm +++ b/src/plugins/coreaudio/coreaudiodeviceinfo.mm @@ -61,6 +61,11 @@ 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 } @@ -379,6 +384,12 @@ QList 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) diff --git a/src/plugins/coreaudio/coreaudioinput.mm b/src/plugins/coreaudio/coreaudioinput.mm index c41e1a51e..a0b9e9d25 100644 --- a/src/plugins/coreaudio/coreaudioinput.mm +++ b/src/plugins/coreaudio/coreaudioinput.mm @@ -47,6 +47,10 @@ # include #endif +#if defined(Q_OS_IOS) +# include "coreaudiosessionmanager.h" +#endif + #include #include diff --git a/src/plugins/coreaudio/coreaudiosessionmanager.mm b/src/plugins/coreaudio/coreaudiosessionmanager.mm index 4b3bdb7dc..0e795e786 100644 --- a/src/plugins/coreaudio/coreaudiosessionmanager.mm +++ b/src/plugins/coreaudio/coreaudiosessionmanager.mm @@ -216,7 +216,8 @@ CoreAudioSessionManager::CoreAudioSessionManager() : { m_sessionObserver = [[CoreAudioSessionObserver alloc] initWithAudioSessionManager:this]; setActive(true); - setCategory(CoreAudioSessionManager::PlayAndRecord, CoreAudioSessionManager::MixWithOthers); + //set default category to just Playback and only switch if we need more permissions + setCategory(CoreAudioSessionManager::Playback, CoreAudioSessionManager::MixWithOthers); } CoreAudioSessionManager::~CoreAudioSessionManager() -- cgit v1.2.3