summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/multimedia/alsa/qalsamediadevices.cpp12
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;