From: Takashi Iwai Date: Thu, 12 May 2016 14:30:44 +0000 (+0200) Subject: namehint: Don't enumerate as duplex if only a single direction is defined X-Git-Tag: v1.1.2~127 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=8cdbdae73109c901aec4984f6ba65e5b25722f13;p=alsa-lib.git namehint: Don't enumerate as duplex if only a single direction is defined When a hint description has only either device_input or device_output, we shouldn't handle it as a full duplex but rather a single direction. In that way, we can avoid to list up a playback stream like dmix or surround51 as a capture stream in the namehint. Reported-by: Trent Reed Signed-off-by: Takashi Iwai --- diff --git a/src/control/namehint.c b/src/control/namehint.c index 856957c7..ad8dda37 100644 --- a/src/control/namehint.c +++ b/src/control/namehint.c @@ -28,6 +28,7 @@ #include "local.h" #ifndef DOC_HIDDEN +#define DEV_SKIP 9999 /* some non-existing device number */ struct hint_list { char **list; unsigned int count; @@ -90,7 +91,7 @@ static int get_dev_name1(struct hint_list *list, char **res, int device, int stream) { *res = NULL; - if (device < 0) + if (device < 0 || device == DEV_SKIP) return 0; switch (list->iface) { #ifdef BUILD_HWDEP @@ -317,7 +318,9 @@ static int try_config(snd_config_t *config, err = -EINVAL; goto __cleanup; } - list->device_output = -1; + /* skip the counterpart if only a single direction is defined */ + if (list->device_output < 0) + list->device_output = DEV_SKIP; } if (snd_config_search(cfg, "device_output", &n) >= 0) { if (snd_config_get_integer(n, &list->device_output) < 0) { @@ -325,6 +328,9 @@ static int try_config(snd_config_t *config, err = -EINVAL; goto __cleanup; } + /* skip the counterpart if only a single direction is defined */ + if (list->device_input < 0) + list->device_input = DEV_SKIP; } } else if (level == 1 && !list->show_all) goto __skip_add;