summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
authorKurt Korbatits <kurt.korbatits@nokia.com>2010-04-07 22:51:53 (GMT)
committerKurt Korbatits <kurt.korbatits@nokia.com>2010-04-07 22:51:53 (GMT)
commit49218ff73ee151a5820d83c5ec87dc2cf0025235 (patch)
treee05b359d4999c94a43baf2d723a53ff0b24a5a3c /src/multimedia
parentbc190d195a20d5e87547e27265df2ce9668ab545 (diff)
downloadQt-49218ff73ee151a5820d83c5ec87dc2cf0025235.zip
Qt-49218ff73ee151a5820d83c5ec87dc2cf0025235.tar.gz
Qt-49218ff73ee151a5820d83c5ec87dc2cf0025235.tar.bz2
Mismatch between reported and actual supported sample rates in
QtMultimedia backend for Windows -Added 8000 as long as another frequency is available. -options available changed from hard-coded to detected options. Task-number:QTBUG-9100 Reviewed-by:Derick Hawcroft
Diffstat (limited to 'src/multimedia')
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp74
1 files changed, 63 insertions, 11 deletions
diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
index f6b8154..465bc98 100644
--- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
@@ -78,6 +78,8 @@ QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode
{
device = QLatin1String(dev);
this->mode = mode;
+
+ updateLists();
}
QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
@@ -176,22 +178,70 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const
// See if what is in settings will work (return value).
bool failed = false;
+ bool match = false;
- // For now, just accept only audio/pcm codec
- if(!format.codec().startsWith(QLatin1String("audio/pcm")))
- failed = true;
+ // check codec
+ for( int i = 0; i < codecz.count(); i++) {
+ if (format.codec() == codecz.at(i))
+ match = true;
+ }
+ if (!match) failed = true;
+
+ // check channel
+ match = false;
+ if (!failed) {
+ for( int i = 0; i < channelz.count(); i++) {
+ if (format.channels() == channelz.at(i)) {
+ match = true;
+ break;
+ }
+ }
+ }
+ if (!match) failed = true;
+
+ // check frequency
+ match = false;
+ if (!failed) {
+ for( int i = 0; i < freqz.count(); i++) {
+ if (format.frequency() == freqz.at(i)) {
+ match = true;
+ break;
+ }
+ }
+ }
- if(!failed && !(format.channels() == 1 || format.channels() == 2))
- failed = true;
+ // check sample size
+ match = false;
+ if (!failed) {
+ for( int i = 0; i < sizez.count(); i++) {
+ if (format.sampleSize() == sizez.at(i)) {
+ match = true;
+ break;
+ }
+ }
+ }
- if(!failed) {
- if(!(format.frequency() == 8000 || format.frequency() == 11025 || format.frequency() == 22050 ||
- format.frequency() == 44100 || format.frequency() == 48000 || format.frequency() == 96000))
- failed = true;
+ // check byte order
+ match = false;
+ if (!failed) {
+ for( int i = 0; i < byteOrderz.count(); i++) {
+ if (format.byteOrder() == byteOrderz.at(i)) {
+ match = true;
+ break;
+ }
+ }
}
- if(!failed && !(format.sampleSize() == 8 || format.sampleSize() == 16))
- failed = true;
+ // check sample type
+ match = false;
+ if (!failed) {
+ for( int i = 0; i < typez.count(); i++) {
+ if (format.sampleType() == typez.at(i)) {
+ match = true;
+ break;
+ }
+ }
+ }
if(!failed) {
// settings work
@@ -332,6 +382,8 @@ void QAudioDeviceInfoInternal::updateLists()
codecz.append(QLatin1String("audio/pcm"));
}
+ if (freqz.count() > 0)
+ freqz.prepend(8000);
}
QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)