[alsa-devel] [pulseaudio-discuss] idea: a reserve alsa plugin
david.henningsson at canonical.com
Thu May 2 16:37:47 CEST 2013
On 05/02/2013 04:28 PM, Tvrtko Ursulin wrote:
> Hi David,
> On Thursday 02 May 2013 12:55:05 David Henningsson wrote:
>> Just had an idea which I'll write down here before I forget it
>> again...and I'm not saying I'll implement this anytime soon either, but
>> here goes:
>> There is a device reserve protocol between PulseAudio and JACK2 - when
>> JACK needs the sound card, it'll send a dbus message to PulseAudio and
>> grab a name in D-Bus.
>> However, there are plenty of applications who like to access ALSA
>> directly, without going through JACK2 or PulseAudio. By making a
>> "reserve" plugin, we could have this functionality for those apps too.
>> In practice, if the app usually opens "plughw:0" or "hw:0", it could
>> instead open "reserve:plughw:0" or "reserve:hw:0" to also reserve the
>> device from PulseAudio usage while the device is open. Meanwhile,
>> PulseAudio is free to use other audio devices (which is not the case
>> when using e g pasuspender).
>> How does that sound?
> If I understand correctly you are saying essentially this:
> 1. There is an existing device control protocol which works over DBus.
> 2. Your idea is to add a equivalent device control protocol using ALSA PCM
> plugin (well in fact not add but create a new proxy interface to it).
> Is that right? If so, how do you provide this functionality to existing
> applications without teaching them about the reserve plugin?
Many ALSA applications lets you specify the device string on e g the
command line or through a configuration interface. So the end user would
configure the application to use "reserve:plughw:0" instead of "plughw:0".
The applications that do not follow this will have to be taught, and
they have a extremely simple way to implement it - just add "reserve:"
do the device string.
> And if you have to modify the applications, is the only advantage then that
> you do not have to add DBus dependency to them? Or a PA dependency to talk
> directly to the server? If so then this solution feels a bit kludgy.
> Perhaps you would want an extension to snd_pcm_open (or whatever, I am going
> from vague memory here) to have something like "SND_PCM_EXCLUSIVE |
> SND_PCM_NOTIFY_BUSY_OPEN" mode (if the former is not implied) which would
> notify the original owner that the second application is attempting to open
> it. Perhaps using SIGURG or something while returing -EBUSY or something to
> the caller signalling they should retry. Not sure if this would be doable
> completely in userspace so I might be leading you toward a generic
> kernel/glibc solution here. :)
> What about the policy control as to which applications are allowed to take
> over? It sounds sub optimal to allow any ALSA application which knows about
> this new plugin or other release mechanism to take over just like that. That
> would create a bit of a mess.
That is a valid point - but so far the only app that can *give away* a
sound card is PulseAudio. All of the others (at least in the simplest
scenario), can only *take* a sound card. If the card is already used by
some app that can't give away its sound card, it's going to be -EBUSY as
David Henningsson, Canonical Ltd.
More information about the Alsa-devel