summaryrefslogtreecommitdiffstats
path: root/src/plugins/coreaudio
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@digia.com>2014-03-02 16:19:37 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-03 14:54:54 +0100
commit4d31ec0793af1e4eb79f88888399641678d4a39e (patch)
tree5472e5f54652c496e2d66f485806e415d275b3f4 /src/plugins/coreaudio
parentd5dfef66bb5b12ade920d3bf2d171186e9b7e8dc (diff)
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 <yoann.lopes@digia.com>
Diffstat (limited to 'src/plugins/coreaudio')
-rw-r--r--src/plugins/coreaudio/coreaudiodeviceinfo.mm9
1 files changed, 6 insertions, 3 deletions
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<CoreAudioDeviceInfo*>(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<int> 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;