diff options
author | 2020-04-30 12:30:47 +0000 | |
---|---|---|
committer | 2020-04-30 12:30:47 +0000 | |
commit | 9b9c0fff89b28a278ea535e7935c8e9104e903f2 (patch) | |
tree | 6c43477c5233b3ca4f428cdb9461d1a83071b4ea /lib/libsndio/sioctl_sun.c | |
parent | Add an expandtab option, similar to what vim supports. (diff) | |
download | wireguard-openbsd-9b9c0fff89b28a278ea535e7935c8e9104e903f2.tar.xz wireguard-openbsd-9b9c0fff89b28a278ea535e7935c8e9104e903f2.zip |
If no "xxx.mute" control is found, try "xxx_mute"
Certain drivers (azalia, uaudio) use a control with the "_mute" suffix to
expose the "mute" knob.
Diffstat (limited to 'lib/libsndio/sioctl_sun.c')
-rw-r--r-- | lib/libsndio/sioctl_sun.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/libsndio/sioctl_sun.c b/lib/libsndio/sioctl_sun.c index c1d3ac33dc7..9547e7c2d19 100644 --- a/lib/libsndio/sioctl_sun.c +++ b/lib/libsndio/sioctl_sun.c @@ -82,14 +82,24 @@ static int initmute(struct sioctl_sun_hdl *hdl, struct mixer_devinfo *info) { struct mixer_devinfo mi; + char name[MAX_AUDIO_DEV_LEN]; - mi.index = info->next; for (mi.index = info->next; mi.index != -1; mi.index = mi.next) { if (ioctl(hdl->fd, AUDIO_MIXER_DEVINFO, &mi) < 0) break; if (strcmp(mi.label.name, AudioNmute) == 0) return mi.index; } + + /* try "_mute" suffix */ + snprintf(name, sizeof(name), "%s_mute", info->label.name); + for (mi.index = 0; ; mi.index++) { + if (ioctl(hdl->fd, AUDIO_MIXER_DEVINFO, &mi) < 0) + break; + if (info->mixer_class == mi.mixer_class && + strcmp(mi.label.name, name) == 0) + return mi.index; + } return -1; } |