static void pcm_list(void)
{
- char **hints, **n, *delim, *filter;
+ void **hints, **n;
+ char *name, *descr, *descr1, *io;
+ const char *filter;
if (snd_device_name_hint(-1, "pcm", &hints) < 0)
return;
n = hints;
- filter = stream == SND_PCM_STREAM_CAPTURE ? "{Playback}" : "{Capture}";
+ filter = stream == SND_PCM_STREAM_CAPTURE ? "Input" : "Output";
while (*n != NULL) {
- delim = strchr(*n, '|');
- if (delim) {
- *delim = '\0';
- if (strstr(delim + 1, filter) != NULL)
- goto __end;
- }
- printf("%s\n", *n);
- if (delim++) {
+ name = snd_device_name_get_hint(*n, "NAME");
+ descr = snd_device_name_get_hint(*n, "DESC");
+ io = snd_device_name_get_hint(*n, "IOID");
+ printf("%s\n", name);
+ if (io != NULL && strcmp(io, filter) == 0)
+ goto __end;
+ if ((descr1 = descr) != NULL) {
printf(" ");
- while (*delim) {
- if (*delim == '\n')
+ while (*descr1) {
+ if (*descr1 == '\n')
printf("\n ");
else
- putchar(*delim);
- delim++;
+ putchar(*descr1);
+ descr1++;
}
putchar('\n');
}
__end:
+ if (name != NULL)
+ free(name);
+ if (descr != NULL)
+ free(descr);
+ if (io != NULL)
+ free(io);
n++;
}
snd_device_name_free_hint(hints);