diff options
author | Ling Hu <ling.hu@nokia.com> | 2010-12-08 12:05:29 +1000 |
---|---|---|
committer | Ling Hu <ling.hu@nokia.com> | 2010-12-08 13:13:58 +1000 |
commit | cf1a57723227f84e81a40b8355241edb69b408c7 (patch) | |
tree | 9dbf9cc48df6af2e650ce769a16f5707820d05ef | |
parent | 98c2e36e0d6a9f597ccc936aa6fda4f2fb238c50 (diff) |
Use device Id instead of device name for internal identification for audio devices on win32
Task-number:QTMOBILITY-820
Reviewed-by:Andrew den Exter
-rw-r--r-- | src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp | 43 | ||||
-rw-r--r-- | src/multimedia/audio/qaudioinput_win32_p.cpp | 18 | ||||
-rw-r--r-- | src/multimedia/audio/qaudiooutput_win32_p.cpp | 18 |
3 files changed, 23 insertions, 56 deletions
diff --git a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp index 52fbaa081a..1220d295ac 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_win32_p.cpp @@ -77,7 +77,13 @@ QT_BEGIN_NAMESPACE QAudioDeviceInfoInternal::QAudioDeviceInfoInternal(QByteArray dev, QAudio::Mode mode) { - device = QLatin1String(dev); + if (dev == "default") { + device = QString::fromLatin1("default"); + } else { + QDataStream ds(&dev, QIODevice::ReadOnly); + quint32 devID; + ds >> devID >> device; + } this->mode = mode; updateLists(); @@ -397,6 +403,7 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) { Q_UNUSED(mode) + QList<QByteArray> devices; //enumerate device fullnames through directshow api CoInitialize(NULL); ICreateDevEnum *pDevEnum = NULL; @@ -407,7 +414,6 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) reinterpret_cast<void **>(&pDevEnum)); unsigned long iNumDevs = mode == QAudio::AudioOutput ? waveOutGetNumDevs() : waveInGetNumDevs(); - QVector<QString> deviceNames(iNumDevs); if (SUCCEEDED(hr)) { // Create the enumerator for the video capture category hr = pDevEnum->CreateClassEnumerator( @@ -430,14 +436,17 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) hr = pPropBag->Read(mode == QAudio::AudioOutput ? L"WaveOutID" : L"WaveInID", &var, 0); if (SUCCEEDED(hr)) { LONG waveID = var.lVal; - if (waveID >= 0 && waveID < deviceNames.size()) { + if (waveID >= 0 && waveID < LONG(iNumDevs)) { VariantClear(&var); // Find the description hr = pPropBag->Read(L"FriendlyName", &var, 0); if (SUCCEEDED(hr)) { WCHAR str[120]; StringCchCopyW(str, sizeof(str) / sizeof(str[0]), var.bstrVal); - deviceNames[waveID] = QString::fromUtf16(reinterpret_cast<unsigned short *>(str)); + QByteArray device; + QDataStream ds(&device, QIODevice::WriteOnly); + ds << quint32(waveID) << QString::fromUtf16(reinterpret_cast<unsigned short *>(str)); + devices.append(device); } } } @@ -448,32 +457,6 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) } CoUninitialize(); - QList<QByteArray> devices; - - if (mode == QAudio::AudioOutput) { - WAVEOUTCAPS woc; - for (unsigned long i = 0; i < iNumDevs; i++) { - if (waveOutGetDevCaps(i, &woc, sizeof(WAVEOUTCAPS)) - == MMSYSERR_NOERROR) { - if (deviceNames[i].isNull() || deviceNames[i].isEmpty()) - devices.append(QString::fromUtf16(reinterpret_cast<const unsigned short *>(woc.szPname)).toLocal8Bit()); - else - devices.append(deviceNames[i].toLocal8Bit()); - } - } - } else { - WAVEINCAPS woc; - for (unsigned long i = 0; i < iNumDevs; i++) { - if (waveInGetDevCaps(i, &woc, sizeof(WAVEINCAPS)) - == MMSYSERR_NOERROR) { - if (deviceNames[i].isNull() || deviceNames[i].isEmpty()) - devices.append(QString::fromUtf16(reinterpret_cast<const unsigned short *>(woc.szPname)).toLocal8Bit()); - else - devices.append(deviceNames[i].toLocal8Bit()); - } - } - - } if (devices.count() > 0) devices.append("default"); diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp index ba09d949f5..a9036dbaf3 100644 --- a/src/multimedia/audio/qaudioinput_win32_p.cpp +++ b/src/multimedia/audio/qaudioinput_win32_p.cpp @@ -282,19 +282,11 @@ bool QAudioInputPrivate::open() UINT_PTR devId = WAVE_MAPPER; - WAVEINCAPS wic; - unsigned long iNumDevs,ii; - iNumDevs = waveInGetNumDevs(); - for(ii=0;ii<iNumDevs;ii++) { - if(waveInGetDevCaps(ii, &wic, sizeof(WAVEINCAPS)) - == MMSYSERR_NOERROR) { - QString tmp; - tmp = QString::fromWCharArray(wic.szPname); - if (m_device.startsWith(tmp.toLocal8Bit())) { - devId = ii; - break; - } - } + if (m_device != "default") { + QDataStream ds(&m_device, QIODevice::ReadOnly); + quint32 deviceId; + ds >> deviceId; + devId = UINT_PTR(deviceId); } if(waveInOpen(&hWaveIn, devId, &wfx, diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp index f4890ba7f3..bffd00b5cb 100644 --- a/src/multimedia/audio/qaudiooutput_win32_p.cpp +++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp @@ -329,19 +329,11 @@ bool QAudioOutputPrivate::open() UINT_PTR devId = WAVE_MAPPER; - WAVEOUTCAPS woc; - unsigned long iNumDevs,ii; - iNumDevs = waveOutGetNumDevs(); - for(ii=0;ii<iNumDevs;ii++) { - if(waveOutGetDevCaps(ii, &woc, sizeof(WAVEOUTCAPS)) - == MMSYSERR_NOERROR) { - QString tmp; - tmp = QString::fromWCharArray(woc.szPname); - if (m_device.startsWith(tmp.toLocal8Bit())) { - devId = ii; - break; - } - } + if (m_device != "default") { + QDataStream ds(&m_device, QIODevice::ReadOnly); + quint32 deviceId; + ds >> deviceId; + devId = UINT_PTR(deviceId); } if (!surround) { |