Hello,
I've been working on the ALSA output for the upcoming 2.2 release of Audacious media player and have run into some problems in snd_device_name_hint, which is now used to show the user a list of possible output devices. I've written patches which correct those problems.
The biggest problem is that in several places, functions called by snd_device_name_hint call snd_config_delete on sections of the config returned by snd_config_search. Once these sections are deleted, future calls to snd_pcm_open fail miserably.
ALSA lib conf.c:4600:(snd_config_expand) Unknown parameters CARD=ICH6,DEV=0 ALSA lib pcm.c:2211:(snd_pcm_open_noupdate) Unknown PCM front:CARD=ICH6,DEV=0 alsa-gapless: snd_pcm_open failed: Invalid argument.
ALSA lib pcm.c:2211:(snd_pcm_open_noupdate) Unknown PCM pulse alsa-gapless: snd_pcm_open failed: No such file or directory.
A smaller but still annoying problem shows up only once the offending snd_config_delete calls are taken out: software devices, such as "pulse" and "null" are listed twice or three times depending on how many hardware devices I have plugged in.
A third problem is that "ctl" seems to be arbitrarily left out of the list of device types that snd_device_name_hint will search for. I've added it to the list in this patch, and it seems to work fine.
Finally, a performance issue: snd_device_name_hint indirectly calls snd_dlopen frequently with the parameter name == NULL, meaning to open libasound.so itself. In this case, snd_dlopen calls dladdr every call to find out the path to libasound.so. Caching this path within snd_dlopen so that dladdr is called only once speeds up the execution time of snd_device_name_hint (a somewhat slow call) by 40%.
I am attaching three patches that fix these problems: - src/conf.c - src/dlmisc.c - src/control/namehint.c
Peace, John Lindgren