diff options
-rw-r--r-- | src/multimedia/alsa/qalsamediadevices.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/multimedia/alsa/qalsamediadevices.cpp b/src/multimedia/alsa/qalsamediadevices.cpp index 98b4c1362..5a133e9d1 100644 --- a/src/multimedia/alsa/qalsamediadevices.cpp +++ b/src/multimedia/alsa/qalsamediadevices.cpp @@ -41,6 +41,8 @@ static QList<QAudioDevice> availableDevices(QAudioDevice::Mode mode) filter = "Output"; } + QAlsaAudioDeviceInfo* sysdefault = nullptr; + while (*n != NULL) { name = snd_device_name_get_hint(*n, "NAME"); if (name != 0 && qstrcmp(name, "null") != 0) { @@ -50,10 +52,13 @@ static QList<QAudioDevice> availableDevices(QAudioDevice::Mode mode) if ((descr != NULL) && ((io == NULL) || (io == filter))) { auto *infop = new QAlsaAudioDeviceInfo(name, QString::fromUtf8(descr), mode); devices.append(infop->create()); - if (strcmp(name, "default") == 0) { + if (!hasDefault && strcmp(name, "default") == 0) { infop->isDefault = true; hasDefault = true; } + else if (!sysdefault && !hasDefault && strcmp(name, "sysdefault") == 0) { + sysdefault = infop; + } } free(descr); @@ -64,6 +69,11 @@ static QList<QAudioDevice> availableDevices(QAudioDevice::Mode mode) } snd_device_name_free_hint(hints); + if (!hasDefault && sysdefault) { + // Make "sysdefault" the default device if there is no "default" device exists + sysdefault->isDefault = true; + hasDefault = true; + } if (!hasDefault && devices.size() > 0) { auto infop = new QAlsaAudioDeviceInfo("default", QString(), QAudioDevice::Output); infop->isDefault = true; |