src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp
changeset 22 79de32ba3296
parent 18 2f34d5167611
child 30 5dc02b23752f
--- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp	Mon May 03 13:17:34 2010 +0300
+++ b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp	Fri May 14 16:40:13 2010 +0300
@@ -78,6 +78,8 @@
 {
     device = QLatin1String(dev);
     this->mode = mode;
+
+    updateLists();
 }
 
 QAudioDeviceInfoInternal::~QAudioDeviceInfoInternal()
@@ -176,22 +178,70 @@
     // 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;
 
-    if(!failed && !(format.channels() == 1 || format.channels() == 2))
-        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;
 
-    if(!failed) {
-        if(!(format.frequency() == 8000 || format.frequency() == 11025 || format.frequency() == 22050 ||
-	   format.frequency() == 44100 || format.frequency() == 48000 || format.frequency() == 96000))
-	    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.sampleSize() == 8 || format.sampleSize() == 16))
-        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;
+            }
+        }
+    }
+
+    // check byte order
+    match = false;
+    if (!failed) {
+        for( int i = 0; i < byteOrderz.count(); i++) {
+            if (format.byteOrder() == byteOrderz.at(i)) {
+                match = true;
+                break;
+            }
+        }
+    }
+
+    // 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 @@
 
 	codecz.append(QLatin1String("audio/pcm"));
     }
+    if (freqz.count() > 0)
+        freqz.prepend(8000);
 }
 
 QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode)