From bac29a930f2cd5825f6edb400d87eea2171b0cc1 Mon Sep 17 00:00:00 2001 From: Anton Date: Sun, 4 Jul 2021 03:03:50 +0400 Subject: pica-client/audio: enumerate ALSA devices on Linux --- pica-client/audiodevice.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) (limited to 'pica-client/audiodevice.cpp') diff --git a/pica-client/audiodevice.cpp b/pica-client/audiodevice.cpp index 16bf0b1..d2995e3 100644 --- a/pica-client/audiodevice.cpp +++ b/pica-client/audiodevice.cpp @@ -1,5 +1,9 @@ #include "audiodevice.h" +#ifdef Q_OS_LINUX +#include +#endif + AudioDevice::AudioDevice() { @@ -10,7 +14,57 @@ AudioDevice::~AudioDevice() } -QList AudioDevice::Enumerate() +void AudioDevice::Capture() +{ +} + +void AudioDevice::Play() +{ +} + +void AudioDevice::Close() { +} + +QList AudioDevice::Enumerate(enum MediaDeviceStreamDirection dir) +{ + QList result; + int index = 0; + +#ifdef Q_OS_LINUX + void **hints, **n; + char *name = NULL, *descr = NULL, *io = NULL; + const char *direction = (dir == PLAYBACK) ? "Output" : "Input"; + + if (snd_device_name_hint(-1, "pcm", &hints) < 0) + return result; + n = hints; + while(*n) + { + MediaDeviceInfo d; + + name = snd_device_name_get_hint(*n, "NAME"); + descr = snd_device_name_get_hint(*n, "DESC"); + io = snd_device_name_get_hint(*n, "IOID"); + + if (io && strcmp(io, direction)) + goto release_resources; + + d.device = QLatin1String(name); + d.humanReadable = QLatin1String(descr); + d.index = index++; + if (strstr(name, "default") == name) + result.prepend(d); + else + result << d; + release_resources: + free(io); + free(descr); + free(name); + n++; + } + snd_device_name_free_hint(hints); +#endif + return result; } -- cgit v1.2.1