[pulseaudio-commits] Changes to 'routing'
Tanu Kaskinen
tanuk at kemper.freedesktop.org
Tue Sep 17 06:24:07 PDT 2013
New branch 'routing' available with the following commits:
commit 32112b9739742340b13c6b46094959e6e983b475
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:21 2013 +0300
pactl: Add "pactl list nodes" functionality
commit fd8578a5578bc99e3120f8acaa638130f0aef067
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:20 2013 +0300
native: Add node querying to the protocol
commit 7aec90fb416723cf94a7963a737f9b67cb2e4a2f
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:19 2013 +0300
tagstruct: Accept only valid UTF-8 strings
If we agree that all strings sent over the native protocol must be
valid UTF-8, then it can be checked in pa_tagstruct_gets(), so
callers don't have to the checking themselves. There were not many
callers that were checking the UTF-8 validity, but there probably
should have been many more.
commit 9e598bfec5dce6e454ba4376c12681f340cc6e09
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:18 2013 +0300
tagstruct: Add pa_tagstruct_put/get_direction()
This will be used for dealing with node directions. Someone might ask
what's the point of adding functions for serializing just one byte;
the point is the validation in pa_tagstruct_get_direction(). It's nice
to be able to assume that the function will return a valid direction,
instead of an arbitrary 8-bit value.
commit dd2b54282ad9b22050488dd7059b1cad8b376c4b
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:17 2013 +0300
native: Add node support to streams
commit b1b4be48bd8cc3f6d2ed523b92d387d96db0d2d5
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:16 2013 +0300
sink-input, source-output: Add support for nodes
commit c5e1d505cb765ffc266178a2764fce1b10503050
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:15 2013 +0300
sink-input, source-output: Add pa_sink_input/source_output_get_description()
commit 94345677dc224030e25cf8e45a3a799f76f23041
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:14 2013 +0300
jack: Add node support
commit 433240c75cf587ed3b08dbaf5fe3c37e12a195db
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:13 2013 +0300
bluetooth: Add node support
commit d72c46c7c5c778e7ceeaebf676c09bfb476f4bb3
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:12 2013 +0300
alsa: Add node support
commit a9e38da109eb275f78d4a82b7670326d858ccb8e
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:11 2013 +0300
device-port: Add support for nodes
commit c7a53cb22d7382e1ccb46174fb196e3243875946
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:10 2013 +0300
bluetooth: Handle pa_device_port_new() failures
pa_device_port_new() can't currently fail, but it soon can.
commit c2c00ce6c2e22bf4bb0dad17952dd3af2c447d6a
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:09 2013 +0300
alsa: Handle pa_device_port_new() failures
pa_device_port_new() can't currently fail, but it soon can.
commit 66f5a687324d54f63a5018ec1732498118aacaeb
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:08 2013 +0300
sink, source: Add support for nodes
commit b7bf725f501a75a443083d31d3c73139bef90795
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:07 2013 +0300
sink, source: Simplify pa_sink/source_new() error handling
Now the only exit from the function is either via "goto fail" or
normal success. I changed pa_hook_fire() return value checking into
assertions, because it's simpler (and I verified that none of the
hooks can ever fail in the current code base). I also changed all
pa_return_null_if_fail() calls into assertions.
Further simplification could be achieved if adding the sinks and
sources to the idxsets in pa_core were moved to _put() and if
unregistering the sink and source names was moved to _free(). Then
_new() wouldn't have to call _unlink() and _unlink() would have fewer
things to worry about.
The pa_sink/pa_source field initialization order was changed somewhat,
because _unlink() and _unref() rely on certain fields to be
initialized, so they had to be initialized before the first "goto
fail" line in _new().
commit 85d0b0bd5159fbb041146498cc0436d28cc4f7e9
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:06 2013 +0300
sink, source: Add pa_sink/source_get_description()
commit 8d00e420f71ee758aa3cf3afd87d7331c1417350
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:05 2013 +0300
sink, source: Disallow NULL or empty description
commit 3f2eb1e09f5280af07d227aec5d97bc4caccbb31
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date: Wed Jul 3 14:09:04 2013 +0300
node: Introduce pa_node
This commit adds very basic node objects to the core. This is just
a starting point, the nodes don't do anything useful yet.
A node represents a "routing endpoint" - the purpose is to make
routing easier. There are input nodes and output nodes, which can be
connected together. Generally speaking, sources and sink inputs map to
input nodes and sinks and source outputs map to output nodes. The
nodes form a new logical routing layer, which is an addition, not
replacement, to the current "low level" layer of sinks, sink inputs
and so on.
One goal is to be able to easily route any input to any output. For
example, with the node interface it should be easy to route a source
to a sink, without needing to care about the details, such as setting
up module-loopback. Routing sink inputs to source outputs should be
possible too, perhaps causing a null sink to be created between the
streams.
Another goal is to support new kinds of routing endpoints
that are not well suited to be implemented as sinks, sources or
streams. One example would be audio paths that exist in hardware only
(like cellular audio in many phone designs) that still have some
routing options. Another example would be a "gateway node" that makes
streams go to a remote PulseAudio as separate streams. The gateway
node implementation could dynamically create private tunnel sinks for
each stream.
In this first version the nodes have very few attributes, but the
intention is to add as much attributes as necessary for routing policy
modules to make good automatic routing decisions.
This patch is based on work by Janos Kovacs.
More information about the pulseaudio-commits
mailing list