diff --git a/src/plugins/coreaudio/coreaudiodeviceinfo.mm b/src/plugins/coreaudio/coreaudiodeviceinfo.mm index 56765caf..ac41a310 100644 --- a/src/plugins/coreaudio/coreaudiodeviceinfo.mm +++ b/src/plugins/coreaudio/coreaudiodeviceinfo.mm @@ -196,38 +196,14 @@ QList CoreAudioDeviceInfo::supportedSampleRates() QList CoreAudioDeviceInfo::supportedChannelCounts() { - QList supportedChannels; - int maxChannels = 0; + static QList supportedChannels; -#if defined(Q_OS_OSX) - UInt32 propSize = 0; - AudioObjectPropertyScope scope = m_mode == QAudio::AudioInput ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; - AudioObjectPropertyAddress streamConfigurationPropertyAddress = { kAudioDevicePropertyStreamConfiguration, - scope, - kAudioObjectPropertyElementMaster }; - - if (AudioObjectGetPropertyDataSize(m_deviceId, &streamConfigurationPropertyAddress, 0, NULL, &propSize) == noErr) { - AudioBufferList* audioBufferList = static_cast(malloc(propSize)); - - if (audioBufferList != 0) { - if (AudioObjectGetPropertyData(m_deviceId, &streamConfigurationPropertyAddress, 0, NULL, &propSize, audioBufferList) == noErr) { - for (int i = 0; i < int(audioBufferList->mNumberBuffers); ++i) - maxChannels += audioBufferList->mBuffers[i].mNumberChannels; - } - - free(audioBufferList); - } + if (supportedChannels.isEmpty()) { + // If the number of channels is not supported by an audio device, Core Audio will + // automatically convert the audio data. + for (int i = 1; i <= 16; ++i) + supportedChannels.append(i); } -#else //iOS - if (m_mode == QAudio::AudioInput) - maxChannels = CoreAudioSessionManager::instance().inputChannelCount(); - else if (m_mode == QAudio::AudioOutput) - maxChannels = CoreAudioSessionManager::instance().outputChannelCount(); -#endif - - // Assume all channel configurations are supported up to the maximum number of channels - for (int i = 1; i <= maxChannels; ++i) - supportedChannels.append(i); return supportedChannels; } diff --git a/src/plugins/coreaudio/coreaudiosessionmanager.h b/src/plugins/coreaudio/coreaudiosessionmanager.h index 61d8967b..26f8fee0 100644 --- a/src/plugins/coreaudio/coreaudiosessionmanager.h +++ b/src/plugins/coreaudio/coreaudiosessionmanager.h @@ -92,9 +92,6 @@ public: QList inputDevices(); QList outputDevices(); - int inputChannelCount(); - int outputChannelCount(); - float currentIOBufferDuration(); float preferredSampleRate(); diff --git a/src/plugins/coreaudio/coreaudiosessionmanager.mm b/src/plugins/coreaudio/coreaudiosessionmanager.mm index 0e795e78..04c8b6ed 100644 --- a/src/plugins/coreaudio/coreaudiosessionmanager.mm +++ b/src/plugins/coreaudio/coreaudiosessionmanager.mm @@ -377,16 +377,6 @@ QList CoreAudioSessionManager::outputDevices() return outputDevices; } -int CoreAudioSessionManager::inputChannelCount() -{ - return [[m_sessionObserver audioSession] inputNumberOfChannels]; -} - -int CoreAudioSessionManager::outputChannelCount() -{ - return [[m_sessionObserver audioSession] outputNumberOfChannels]; -} - float CoreAudioSessionManager::currentIOBufferDuration() { return [[m_sessionObserver audioSession] IOBufferDuration];