On Tue, 12.05.09 14:42, Jaroslav Kysela (perex@perex.cz) wrote:
On Tue, 12 May 2009, Lennart Poettering wrote:
With my original patch there are no superfluous opens.
If application uses more *open() calls from alsa-lib for one card (for example to open ctl handle and pcm handle), it's better to obtain card index at first, because each conversion requires one or more (card id) open/close sequence for control device to get card_info. Providing direct card index eliminates this conversion. It's just suggested optimization.
I think if apps want to open ctl and hw at the same time the most elegant way would be this:
<snip> snd_pcm_open(&pcm, "hw:/dev/snd/by-path/yaddayadda", ...); snd_pcm_info(pcm, &info); snd_ctl_open(&ctl, snprint("hw:%i", snd_pcm_info_get_card(info))); </snip>
With my patch that costs exactly two open() calls. It's also more flexible since it will handle arbitrary device strings, doesn't need to hardcode "hw:".
You seem to suggest this:
<snip> i = snd_card_index("hw:/dev/snd/by-path/yaddayadda"); snd_hw_open(&hw, snprint("hw:%i", i)); snd_ctl_open(&ctl, snprint("hw:%i", i)); </snip>
Which your patch that costs three open()s. And hardcodes "hw".
I really would like to know why my patch was so bad?
Lennart