summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLing Hu <ling.hu@nokia.com>2010-12-08 12:05:29 +1000
committerLing Hu <ling.hu@nokia.com>2010-12-08 13:13:58 +1000
commitcf1a57723227f84e81a40b8355241edb69b408c7 (patch)
tree9dbf9cc48df6af2e650ce769a16f5707820d05ef
parent98c2e36e0d6a9f597ccc936aa6fda4f2fb238c50 (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.cpp43
-rw-r--r--src/multimedia/audio/qaudioinput_win32_p.cpp18
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.cpp18
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) {