From af985a697a47cc887625e06c05f5cb785ee66d35 Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Fri, 2 Sep 2016 11:01:29 +0200 Subject: winrt: Fix QAudioDeviceInfo::default*Device to return name instead id 3c5bbb0dac7bed3199ddddc88c0175d5a2ac1036 added the default* functions to query a default device. However, IMediaDeviceStatics can only return ids and not the device names. Hence we need to invoke availableDevices to create the internal mapping and return the device name to properly initialize audio devices afterwards. Task-number: QTBUG-55631 Change-Id: I38b9205a933de5e41296a2e5880d0379db41ad97 Reviewed-by: Oliver Wolff --- src/plugins/wasapi/qwasapiutils.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/plugins') diff --git a/src/plugins/wasapi/qwasapiutils.cpp b/src/plugins/wasapi/qwasapiutils.cpp index 6340a3b01..727c94c23 100644 --- a/src/plugins/wasapi/qwasapiutils.cpp +++ b/src/plugins/wasapi/qwasapiutils.cpp @@ -182,6 +182,13 @@ QByteArray QWasapiUtils::defaultDevice(QAudio::Mode mode) { qCDebug(lcMmUtils) << __FUNCTION__ << mode; + QList &deviceNames = mode == QAudio::AudioInput ? gMapping->inputDeviceNames : gMapping->outputDeviceNames; + QList &deviceIds = mode == QAudio::AudioInput ? gMapping->inputDeviceIds : gMapping->outputDeviceIds; + if (deviceNames.isEmpty() || deviceIds.isEmpty()) // Initialize + availableDevices(mode); + if (deviceNames.isEmpty() || deviceIds.isEmpty()) // No audio devices at all + return QByteArray(); + ComPtr mediaDeviceStatics; HRESULT hr; @@ -198,7 +205,9 @@ QByteArray QWasapiUtils::defaultDevice(QAudio::Mode mode) const wchar_t *dadWStr = defaultAudioDevice.GetRawBuffer(&dADSize); const QString defaultAudioDeviceId = QString::fromWCharArray(dadWStr, dADSize); - return defaultAudioDeviceId.toLocal8Bit(); + Q_ASSERT(deviceIds.indexOf(defaultAudioDeviceId) != -1); + + return deviceNames.at(deviceIds.indexOf(defaultAudioDeviceId)); } QList QWasapiUtils::availableDevices(QAudio::Mode mode) -- cgit v1.2.3