[pulseaudio-discuss] [PATCH 0/2] Patches for supporting ALSA UCM
Jaska Uimonen
jaska.uimonen at helsinki.fi
Thu Nov 3 04:18:45 PDT 2011
Hello,
If someone is going to test Janos' patches, please
download the latest alsa-lib from git and compile/install.
At least my fedora15 version was older and quite buggy
(considering ucm).
br,
Jaska
Quoting jankovac503 at gmail.com:
>
> Goals
> - Logical device based policy decision making was one of our main
> motivation to utilize UCM. Use of logical devices allows abstract
> policy rules that are independent of the actual hardware. The policy
> decisions are made in terms of 'speakers', 'headsets', 'HDMI' connected
> external TV sets etc. instead of dealing with sinks like
>
> 'alsa_output.usb-Logitech_Logitech_USB_Headset-00-Headset.analog-stereo'.
>
> The main idea is to prototype a device-manager that would
> accept logical
> device names (instead of sink names) for role based preferences.
>
> - Profiles and ports should be automatically added based on the UCM
> configuration.
>
> - For notification purposes policy might need to route certain streams to
> both headphones and speakers, in other words we would need in
> some cases
> ports that represent roots to dual devices. Ports for such dual devices
> should also be added automatically.
>
> - On the other hand it did not appeared to be a good idea to break
> existing things so
> * the UCM based configuration should integrate smootly to the
> existing configuration and co-exist with it.
> * the automatically generated profile/port names should make sense
> when showing up in the existing desktop applets for
> audio control.
> * the UCM based configuration should utilize upcoming port
> detection
> mechanism (ie. work with David Henningsson's Jack Detection
> Patches)
>
> - Due to the complexity of the things I wanted to build a prototype that
> could serve as a basis for discussing the possible issues, challenges
> etc.
>
> Another goal with prototyping was to gain deeper understanding of UCM
> and generate some requirements or patches to the ALSA folks if needed.
>
> The prototype
> - If the ALSA card has corresponding UCM configuration (ie. a directory
> under /usr/share/alsa/ucm) the UCM configuration will be used.
> Otherwise
> business is as usual. I did not bother to add module parameters to the
> alsa card that would enforce/disable what method should be used. Such
> mechanisms can be easily added later on however.
>
> - The automatically generated profiles are like
> {verb}-{direction}-for-{modifier}[-and-{modifier}]
> e.g. profile name
> 'hifi-output-for-music'
> and in the sound applets it would show up as
> 'music playback in HiFi mode'
>
> - The generated ports are like
> {device}-{verb}-{direction}
> e.g. port name
> 'Headset-HiFi-output'
> and in the sound applets it would show up as
> 'Headset'
>
> - If the UCM configuration contains a "Play Tone" modifier a
> corresponding
> dual device port is automaticaly generated based on the
> 'SupportedDevice'
> entries. The pattern is
> {device}+Speaker-{verb}-output
> For the above example the dual device would be
> 'Headset+Speaker-HiFi-output'
> and in the sound applet it would appear as
> 'Headset+Speaker'
>
> - The proto is built top on David's earlier patches where the actual jack
> detection worked. We needed some extra entries in the UCM values:
> InputDeviceName "HDA Intel PCH Headphone"
> InputDeviceCode "Headphone"
> They seemed to work. However, the input device based jack detection is
> history, and we have new patches to work top on. The old one is still
> there behind the INPUT_DEVICE_BASED_JACK_DETECTION define.
>
> - currently we have two patches:
> * '0001-new-files-for-ALSA-UCM-support.patch' that contains
> alsa-ucm.[hc] that is basic UCM stuff
> * '0002-chnages-in-pulseaudio-alsa-module-to-support-UCM.patch' that
> contains the modifications needed to integrate the UCM stuff.
> Basically those changes are:
> - some new members to the data structures to store UCM related
> things
> - some static alsa mixer functions needed to be accessed from
> alsa-ucm.c; so those are not static any more and prefixed
> with 'pa_alsa_'.
> - the logic to call the UCM stuff.
>
> - we also prototyped UCM configuration to a 'HDA Intel PCH' card.
>
> - this is just a prototype to see how things might work. So it
> might leak,
> crash, etc. The next step is to see what kind of facelift the device
> manager might need to have to support logical device based routing and
> to support dual devices (that are not all ALSA) e.g. route ringtone to
> a bluetooth headset and to the 'speaker'.
>
> UCM config files
> here are the files we used for testing (the author was Jaska Uimonen)
>
>
> ----------- /usr/share/alsa/ucm/HDA Intel PCH/HDA Intel PCH.conf
> --------------
>
> # UCM configuration for HDA Intel PCH
>
> SectionUseCase."HiFi" {
> File "hifi"
> Comment "Play HiFi quality music."
> }
>
> ValueDefaults {
> PlaybackCTL "hw:PCH"
> CaptureCTL "hw:PCH"
> }
>
> SectionDefaults [
> cdev "hw:PCH"
> exec "echo Setting defaults for PCH"
> cset "name='Master Playback Volume' 0,0"
> cset "name='Master Playback Switch' off,off"
> cset "name='Headphone Playback Volume' 0,0"
> cset "name='Headphone Playback Switch' off,off"
> cset "name='PCM Playback Volume' 0,0"
> cset "name='Front Mic Boost Volume' 0,0"
> cset "name='Front Mic Playback Volume' 0,0"
> cset "name='Front Mic Playback Switch' off,off"
> cset "name='Front Playback Volume' 0,0"
> cset "name='Front Playback Switch', off,off"
> cset "name='Surround Playback Volume' 0,0"
> cset "name='Surround Playback Switch' off,off"
> cset "name='Center Playback Volume' 0,0"
> cset "name='Center Playback Switch' off,off"
> cset "name='LFE Playback Volume' 0,0"
> cset "name='LFE Playback Switch' off,off"
> cset "name='Line Playback Volume' 0,0"
> cset "name='Line Playback Switch' off,off"
> cset "name='Capture Volume' 0,0"
> cset "name='Capture Switch' off,off"
> cset "name='Capture Volume',index=1, 0"
> cset "name='Capture Switch',index=1, off,off"
> cset "name='IEC958 Default PCM Playback Switch', off"
> cset "name='IEC958 Playback Switch', off"
> cset "name='IEC958 Playback Switch',index=1, off"
> cset "name='Auto-Mute Mode', 0"
> cset "name='Input Source', 0"
> cset "name='Input Source',index=1, 0"
> cset "name='Rear Mic Boost Volume', 0"
> cset "name='Rear Mic Playback Volume' 0,0"
> cset "name='Rear Mic Playback Switch' off,off"
> cset "name='Side Playback Volume' 0,0"
> cset "name='Side Playback Switch' off,off"
> ]
>
> ------------------ /usr/share/alsa/ucm/HDA Intel PCH/hifi
> --------------------
>
> # Use case Configuration for HDA Intel PCH / HiFi Music
>
> SectionVerb {
> EnableSequence [
> exec "echo HiFi enable sequence"
> ]
>
> DisableSequence [
> exec "echo HiFi disable sequence"
> cdev "hw:PCH"
> ]
>
> # QoS and ALSA PCMs
> Value {
> TQ Music
> CapturePCM "hw:PCH"
> PlaybackPCM "hw:PCH"
> }
> }
>
>
> SectionDevice."Headphones" {
> Comment "PCH 3.5mm Headphone"
>
> EnableSequence [
> exec "echo Enabling headphones"
> cdev "hw:PCH"
> cset "name='Headphone Playback Switch' on,on"
> cset "name='Master Playback Switch' on,on"
> cset "name='Master Playback Volume' 64,64"
> cset "name='PCM Playback Volume' 255,255"
> ]
>
> DisableSequence [
> exec "echo Disabling headphones"
> cdev "hw:PCH"
> cset "name='Headphone Playback Volume' 0,0"
> cset "name='Master Playback Volume' 0,0"
> cset "name='PCM Playback Volume' 0,0"
> cset "name='Headphone Playback Switch' off,off"
> cset "name='Master Playback Switch' off,off"
> ]
>
> Value {
> PlaybackVolume "Headphone"
> CaptureVolume "Capture"
> InputDeviceName "HDA Intel PCH Headphone"
> InputDeviceCode "Headphone"
> }
> }
>
>
> SectionDevice."Headset" {
> Comment "PCH 3.5mm Headset"
>
> EnableSequence [
> exec "echo Enabling headset"
> cdev "hw:PCH"
> cset "name='Headphone Playback Switch' on,on"
> cset "name='Master Playback Switch' on,on"
> cset "name='Master Playback Volume' 64,64"
> cset "name='PCM Playback Volume' 255,255"
> ]
>
> DisableSequence [
> exec "echo Disabling headset"
> cdev "hw:PCH"
> cset "name='Headphone Playback Volume' 0,0"
> cset "name='Master Playback Volume' 0,0"
> cset "name='PCM Playback Volume' 0,0"
> cset "name='Headphone Playback Switch' off,off"
> cset "name='Master Playback Switch' off,off"
> ]
>
> Value {
> PlaybackVolume "Headphone"
> CaptureVolume "Capture"
> InputDeviceName "HDA Intel PCH Headphone"
> InputDeviceCode "Headphone"
> }
> }
>
>
> SectionDevice."Speaker" {
> Comment "PCH external speakers"
>
> EnableSequence [
> exec "echo Enabling Speakers"
> cdev "hw:PCH"
> cset "name='Front Playback Switch' on,on"
> cset "name='Master Playback Switch' on,on"
> cset "name='Master Playback Volume' 64,64"
> cset "name='PCM Playback Volume' 255,255"
> ]
>
> DisableSequence [
> exec "echo Disabling Speakers"
> cdev "hw:PCH"
> cset "name='Front Playback Volume' 0,0"
> cset "name='Front Playback Switch' off,off"
> cset "name='Master Playback Volume' 0,0"
> cset "name='Master Playback Switch' off,off"
> cset "name='PCM Playback Volume' 0,0"
> ]
>
> Value {
> PlaybackVolume "Front"
> }
> }
>
> SectionModifier."Play Tone" {
> Comment "Playing notifications dual"
>
> SupportedDevice [
> "Headset"
> "Headphones"
> ]
>
> EnableSequence [
> exec "echo 'Go to Speaker and Headset mode'"
> cset "name='Front Playback Switch' on,on"
> cset "name='Front Playback Volume' 255,255"
> cset "name='Headphone Playback Switch' on,on"
> cset "name='Headphone Playback Volume' 64,64"
> ]
>
> DisableSequence [
> exec "echo 'Leave Speaker & Headset mode'"
> cset "name='Front Playback Volume' 0,0"
> cset "name='Front Playback Switch' off,off"
> cset "name='Headphone Playback Switch' off,off"
> cset "name='Headphone Playback Volume' 0,0"
> ]
>
> Value {
> PlaybackVolume "Master"
> }
> }
>
>
> SectionModifier."Play Music" {
> Comment "Playing music"
>
> SupportedDevice [
> "Headphones"
> "Headset"
> "Speaker"
> ]
>
> EnableSequence [
> exec "echo 'Enable music playback'"
> ]
>
> DisableSequence [
> exec "echo 'Disable music playback'"
> ]
> }
>
> SectionModifier."Capture Music" {
> Comment "Playing music"
>
> SupportedDevice [
> "Headset"
> ]
>
> EnableSequence [
> exec "echo 'Enable music capturing'"
> ]
>
> DisableSequence [
> exec "echo 'Disable music capturing'"
> ]
> }
>
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
>
>
More information about the pulseaudio-discuss
mailing list