From 4d31ec0793af1e4eb79f88888399641678d4a39e Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Sun, 2 Mar 2014 16:19:37 +0100 Subject: CoreAudio: Allow more flexability when specifying SampleRates The available sample rates for a given device are the nominal sample rates reported by the device. It is possible to use other sample rates and CoreAudio will take care of the conversion. So what we will do is report what rates are available for a device, but not explicitly require those sample rates to have a valid format. Task-number: QTBUG-36265 Change-Id: Idbbdeacbb6bc1fe434bcd8dec519ad70d4ccd545 Reviewed-by: Yoann Lopes --- src/plugins/coreaudio/coreaudiodeviceinfo.mm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/plugins/coreaudio') diff --git a/src/plugins/coreaudio/coreaudiodeviceinfo.mm b/src/plugins/coreaudio/coreaudiodeviceinfo.mm index 92ce9886f..5d07ca48a 100644 --- a/src/plugins/coreaudio/coreaudiodeviceinfo.mm +++ b/src/plugins/coreaudio/coreaudiodeviceinfo.mm @@ -130,9 +130,11 @@ bool CoreAudioDeviceInfo::isFormatSupported(const QAudioFormat &format) const { CoreAudioDeviceInfo *self = const_cast(this); + //Sample rates are more of a suggestion with CoreAudio so as long as we get a + //sane value then we can likely use it. return format.isValid() && format.codec() == QString::fromLatin1("audio/pcm") - && self->supportedSampleRates().contains(format.sampleRate()) + && format.sampleRate() > 0 && self->supportedChannelCounts().contains(format.channelCount()) && self->supportedSampleSizes().contains(format.sampleSize()); } @@ -168,8 +170,9 @@ QList CoreAudioDeviceInfo::supportedSampleRates() AudioValueRange* vr = new AudioValueRange[pc]; if (AudioObjectGetPropertyData(m_deviceId, &availableNominalSampleRatesAddress, 0, NULL, &propSize, vr) == noErr) { - for (int i = 0; i < pc; ++i) - sampleRates << vr[i].mMaximum; + for (int i = 0; i < pc; ++i) { + sampleRates << vr[i].mMinimum << vr[i].mMaximum; + } } delete vr; -- cgit v1.2.1