[pulseaudio-discuss] [ANNOUNCE] [PACKAGERS] New mixer logic in PA
Bastian, Waldo
waldo.bastian at intel.com
Fri Jun 19 12:10:38 PDT 2009
Is this targetted at 0.9.16?
Cheers,
Waldo
--
Intel Corporation - Hillsboro, Oregon
Ultra Mobility Group - Platform Software Architecture
Tel: +1 503 264 6237 - Mobile: +1 503 703-7327
> -----Original Message-----
> From: pulseaudio-discuss-bounces at mail.0pointer.de [mailto:pulseaudio-
> discuss-bounces at mail.0pointer.de] On Behalf Of Lennart Poettering
> Sent: Friday, June 19, 2009 10:08 AM
> To: PulseAudio Discussion List
> Subject: [pulseaudio-discuss] [ANNOUNCE] [PACKAGERS] New mixer logic in PA
>
> Heya,
>
> just a quick heads-up on the new ALSA mixer handling logic in PA which
> I merged a few days ago, for packagers and other interested folks:
>
> Previously PA was picking one ALSA (simple) mixer element to control
> and then was sticking to it for all hardware volume/mute
> handling. Usually that was the 'Master' element for output and
> 'Capture' for input. This had many drawbacks, among them:
>
> a) we needed to rely on alsactl to fully initialize the ALSA mixer by
> default correctly, so that we can get away with controlling only
> one of them.
>
> b) we were limited to the features of the mixer element we chose,
> i.e. it's granularity and range
>
> c) often enough we picked the wrong control, for example on headphone
> setups where the controls we picked didn't actually do what we
> expected it would be doing.
>
> d) ALSA tends to split up multichannel controls into seperate fake
> stereo pairs, which PA couldn't make use of.
>
> e) no support for input port/output port selection, i.e. line-in
> vs. mic or speaker out vs. headphones and so on
>
> f) on laptops like thinkpads no way to handle the builtin external hw
> volume control combined with the maste volume.
>
> The new logic tries to more comprehensively control ALSA mixers. We
> don't want to want to expose all features of an ALSA mixer, but we do
> want to control more elements than we previously did. So what the new
> stuff odes is this:
>
> It is possible to define a "mixer path" which basically is a list of
> mixer elements PA should control, with a bit of information how to
> control them. Only one mixer path can be active at a time. Elements in
> the path may be used for the following functions:
>
> switches:
> - can be declared to be used as "mute" switch
> - can always be set to off, or to on
> - can be exposed as a configurable option in the UI
> - can be ignored
>
> volumes:
> - can be declared to be integrated in one big volume slider
> - can always bet set to minimal or 0dB olume
> - can be ignored
>
> enumerations:
> - can be exposed as a configurable option in the UI
> - can be ignored
>
> How does such a path definition look like?
>
> This directory knows all currently defined paths:
>
> http://git.0pointer.de/?p=pulseaudio.git;a=tree;f=src/modules/alsa/mixer/p
> aths
>
> An interesting example is for example the definition for a "Mic" path:
>
> http://git.0pointer.de/?p=pulseaudio.git;a=blob;f=src/modules/alsa/mixer/p
> aths/analog-input-mic.conf
>
> What you see there is basically that the Mic and Capture volume
> sliders are merged and all other capture sources are switched off.
>
> What does "merging" volume sliders mean? If a volume slider in ALSA
> has dB information then PA can multiply the two volume factors
> and get a result factor of it. When we need to set a volume we start
> from the beginning in the path and try to set the first slider to the
> target dB value or the next closest value higher than it. Then we
> divide our target volume by what we just set and apply that to the
> next element in the mixer path and so on. WHich basically means that
> the "largest part" of the volume adjustment happens on the most
> outermost mixer control and the remaining controls are configured to
> something next to 0dB. If the first mixer control does not have dB
> information we will expose it and only it, since going through the
> path won't help.
>
> Enuemrations and switches that are marked for "exposing in the UI"
> will be made available as "ports" on a sink/source. If multiply mixer
> paths are found valid for a device they too will be exposed as
> "ports". If multiple paths and multiple exposed options exist then
> this will create a list of all possible combinations. This can get
> quite large if too many are exposed. So don't do it. For all cards I
> have here I never head more than 8 ports in the end, most only 2 or
> 0. And that's how it should be.
>
> Ports are currently not exposed in pavucontrol/g-v-c but this will
> hopefully change soon.
>
> So what does all of this give us?
>
> - we control a full set of volume sliders/mute switches not just one
> - we can control the surround channel volume sliders properly
> - we can select output/input port properly
> - since the configuration happens in files this is easy to extend
> - we have larger granularity and range of the hw volume sliders.
> - issues a-f pointed out above are all fixed
>
> On top of all of these path definitions, I also made the profile
> definition configurable. The predefined ones are found here:
>
> http://git.0pointer.de/?p=pulseaudio.git;a=tree;f=src/modules/alsa/mixer/p
> rofile-sets
>
> These files basically list the ways how an ALSA device may be opened,
> i.e. which device string to use ("front:xxx" vs "surround51:xxx"
> vs. "spdif:xxx"), which channel mappings and mixer paths apply then
> and so on.
>
> There is one default profile set which should work for almost all
> consumer devices. At least on the 10 consumer devices I tested this
> with it worked fine and exposed exactly the feature set I wanted to
> have exposed.
>
> However, for some devices it makes sense to define your own profile
> sets. The folks from Caiaq borrowed me a Native Instruments Audio 8 DJ
> to define one for this device which can also be used as an example for
> further definitions. Which profile set to use is defined via udev
> rules. I'd be interested to merge support for more exotic devices like
> this one into the PA, I am happy to take patches. Generally if you
> don't have such a per-device profile set your device will be treated
> as normal consumer device. So even if you lack this your devices will
> at least basically work.
>
> So much about all this new complexity. Feel free to browse through
> the git repo dirs linked abvoe and read through the files, they
> contain a few comments to lighten up things a bit beyond what I wrote
> in this mail.
>
> I expect that the default profile we now have in git might need tweaks
> and fixes for some card. The point of this mail is to make you and the
> distributors aware that this whole stuff is now available and can be
> even be updated without recompiling PA.
>
> I only have access to 10 cards here or so, I am relying on you folks
> to make sure the current default profile works for as many cards as
> possible.
>
> Questions?
>
> Lennart
>
> --
> Lennart Poettering Red Hat, Inc.
> lennart [at] poettering [dot] net
> http://0pointer.net/lennart/ GnuPG 0x1A015CC4
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at mail.0pointer.de
> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
More information about the pulseaudio-discuss
mailing list