Allow disabling real time thread, this is useful to run inside
valgrind without being killed.
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Add a function to recalculate all nodes associated with a driver by
iterating the graph for each driver node. We used to do this in an
incremental way, which is easy to join graph but expensive to
split.
A full scan simplifies some things and we can't avoid it when we
need to calculate latencies later. It will also simplifies assigning
master and slave roles to drivers when the graphs are joined/split.
When we link/unlink or add/remove nodes, recalc the graph.
Depending on the compiler configuration 'char' may be an unsigned type
which will not work as expected.
Signed-off-by: Matthias Fend <matthias.fend@wolfvision.net>
Pass some state to convert and channelmix functions. This makes it
possible to select per channel optimized convert functions but
also makes it possible to implement noise shaping later.
Pass the channelmix matrix and volume in the state.
Handle specialized 2 channel s16 -> f32 conversion
Add a sinc based resampler that, unlike speex, avoids memcpy and
works directly on the source data. It also allows for ssse3
optimizations and aligned loads. It will later switch to table
interpolation when doing variable rate.
Add some const and SPA_RESTRICT to methods
When the input and output is the same, work in passthrough mode
where we simply copy place the input pointer onto the output buffer
without doing a memcpy.
Do memcpy when the resampler is not active.
Pass a message around to make things more extensible later.
Keep fds per message if we ever want to write individual
messages.
Pass number of fds in the message header. We might need this to
close the fds when the proxy is gone.
Add a node subscribe params method that automatically emits the new
params when they change so that we can avoid an enum_params.
Use this in the stream object.
Remove the control messages to update controls in stream, use the
set_param. This is more overhead but allows for notifications to other
clients.
Make it possible to update many controls in one go.