diff options
author | Wim Taymans <wtaymans@redhat.com> | 2019-11-08 15:52:10 +0100 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2019-11-08 15:53:14 +0100 |
commit | c63f0ed562ac8fe991a2ff6e4d58772a54290b55 (patch) | |
tree | ceb145be8f65426793702903962d8d4f90500c97 /doc | |
parent | cbf495fa359d8b4a913c40f382143ae0be3a3e73 (diff) |
doc: add session-manager <-> pulseaudio mapping
Diffstat (limited to 'doc')
-rw-r--r-- | doc/pulseaudio.md | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/doc/pulseaudio.md b/doc/pulseaudio.md new file mode 100644 index 00000000..51f49260 --- /dev/null +++ b/doc/pulseaudio.md @@ -0,0 +1,68 @@ +# ALSA + +This explains the mapping between alsa cards and streams and session manager +objects. + + +## ALSA Cards + +An ALSA card is exposed as a PipeWire device + +## Streams + +Each alsa PCM is opened and a Node is created for each PCM stream. + +# Session Manager + +## ALSA UCM + +The mapping of the PipeWire object hierarchy to the ALSA object hierarchy is the following: + +One PipeWire device is created for every ALSA card. + +For each UCM verb, a Node is created for the associated PCM devices. +For each UCM verb, an Endpoint is created. + +In a first step: For each available combination of UCM device and modifier, +a stream is created. Streams are marked with compatible other streams. + +Streams with the same modifier and mutually exclusive devices are grouped +into one stream and the UCM devices are exposed on the endpoint as destinations. + + +## ALSA fallback + +Each PCM stream (node) becomes an endpoint. The endpoint references the +alsa device id + +Each endpoint has 1 stream (for now) called HiFi Playback / HiFi Capture. + +More streams can be created depending on the format of the node. + + +## ALSA pulse UCM + +Using the alsa backend of pulseaudio we can create the following streams + + +## ALSA pulse fallback + +The pulse alsa backend will use the mixer controls and some probing to +create the following nodes and endpoints + + +# PulseAudio + +PulseAudio uses the session manager API to construct cards with profiles +and sink/source with ports. + +If an Endpoint references a Device, a card object is created for the device. + +Each Endpoint becomes a sink/source. + +Each Stream in the endpoint becomes a profile on the PulseAudio card. Because +only one profile is selected on the device, only 1 stream is visible on +the endpoint. This clashes with the notion that multiple streams can be +active at the same time but is a pulseaudio limitation. + +Each Endpoint destination becomes a port on the sink/source. |