At Tue, 30 Jun 2009 02:11:01 +0400, Paul Fertser wrote:
Hi,
I've tried to implement an external shared object to be able to execute arbitrary functions on PCM device opening and closing. After quite some source code reading i had an almost working but segfaulting example. This segfault is because snd_dlclose is called right after calling a hook install function and therefore i can't snd_pcm_hook_add functions from the same shared object. To me it looks like a bug but probably i just don't see how this functionality is intended to be used. Takashi, git-blame showed that it's you who stuffed this dlclose call that bothers me ;)
Well, right now, a plugin is designed to be bound with a single PCM instance. That's why dlcolse is called in snd_pcm_close(). Other use-cases are out of design, thus we need to extend something.
Can you give your code to grasp more implementation images?
TIA
Background information:
We're working on audio subsystem for OpenMoko Freerunner. It's an idea of Joerg Reisenweber to have virtual alsa devices for every reasonable use-case (like dedicated device for stereout, dedicated device for recording from gsm etc), for that we need a hook on every device opening and closing mostly to set up routing inside WM8753 codec. ctl_elems is not enough because we need a more complex locking scheme (with priorities, some kind of callbacks to the apps using particular devices etc) and other flexibility.
To hook off snd_pcm_open and snd_pcm_close, you could use LD_PRELOAD. But, a plugin sounds more interesting.
Takashi