On Sun, 04.05.08 14:15, Tanu Kaskinen (tanuk at iki.fi) wrote: > > On Sat, May 03, 2008 at 04:48:05PM -0700, Nick Thompson wrote: > > Given what you say (above) about per device routing not being possible I > > think the area I'd like to concentrate on is figuring out how a module > > can detect streams as they are being created. That way it could get the > > call in to switch sink input before the stream is started. So figuring > > this out would be a great start. > > This is how I think it might work: > > 1. Register yourself to listen to new sink input events. The > pa_core structure (core.h) has an array of hooks, each > corresponding to one type of event. The following will do > the registration: > > pa_hook_connect(core->hooks[PA_CORE_HOOK_SINK_INPUT_NEW], > my_callback, > my_userdata); > > There the "core" variable is a pointer to pa_core. > my_callback is a function that gets called when the event > happens, and my_userdata is pointer to any data you want the > callback function to have access to. > > 2. Change the destination sink. The callback gets as > parameters a pointer to pa_core, a pointer to > pa_sink_input_new_data, and the userdata pointer you gave in > the registration function. pa_sink_input_new_data has the > field "sink", which you can set in the callback to be the > sink you want the sink input to connect to. This is exactly how it should be done! Lennart -- Lennart Poettering Red Hat, Inc. lennart [at] poettering [dot] net ICQ# 11060553 http://0pointer.net/lennart/ GnuPG 0x1A015CC4