Similarly as in spa_dbus, don't exit if bus goes down. Neither the
audio or midi Bluetooth backend reconnects to DBus, but they shouldn't
exit the process.
The convolver will parse integers as a sample delay (as before) but will
now also fall back to parsing it as a float in the time domain.
Specifying the delay in time is better because it does not depend on the
samplerate of the graph or the IR.
Store the biquad type in the biquad, remove some unused fields.
Init all the biquads with the identify before loading the channel
specific biquads. We will process the max of all the channel biquads.
Make sure we skip processing for the indentity ones.
Use a wrap around delay ringbuffer. We can then avoid some modulo
arithmetic and read more efficiently.
Also handle the delay convolver case better by reversing the taps and
reading the taps and delay buffer without extra overhead.
When we allocate data on an output port, always set it immediately on
the plugin. We let output nodes allocate data and input ports consume
it.
When we have no data on an output port, use discard data or NULL.
This ensure that the ports only have data when they are used by an input
port and otherwise use discards or NULL data.
Add sse optimized biquads.
Make a new dsp function to run multiple biquads on multiple channels.
This makes it possible to unroll some operations and run the channels
in parallel later.
Simply load a filter-chain with the new param_eq node and the
given filename in the config.
This fixes a number of issues such as not copying global properties to the
streams, setting a unique node.name etc...
Don't use %f to serialize floats to JSON but use the json formatter
because in some locales, the decimal point becomes a , which does not
parse as a float anymore.
Also reformat some lines.
Add a new followerClock block in the profiler info. This is only set
when the follower could be a driver and it contains the clock info used
for following the driver, mostly the rate difference and delay.
Dump this info in pw-profiler -J
Make sure we always set the info in the clock, especially also when we
are following.
Use node.param.Props for the patternType on videotestsr.
Make the audiotestsrc non-live. Otherwise it will be live but not a
driver and fail to schedule things.
See #4341
It's broken because it only iterates one Props property and most nodes
have an adapter, and so two sets of Props.
The node.param.Props = { } property is a better way of doing things
these days.
Flush with drain calls the drained callback for each cycle until paused
or resumed. Setting the stream to active again, clears the drained state
and makes things resume.
Flush without drain does not set the state to PAUSED but simply clears
the queued data. This is mostly useful when pausing or stopping.
At no point should the flush operation result in a PAUSED state change.
When the follower doesn't produce enough data for this many attempts,
bail and cause an xrun to avoid an infinite loop.
The limit of 8 cause real-life problems and should be larger. It should
probably depend on the expected size per cycle (node.latency) and the
current quantum but we don't always have this information.
See #4334
When we are asked to clear the mix io areas, actually do it, otherwise
the process thread might still be accessing the old memory and crash.
Also check that we have set io on the port before we decrement the
counter with active io or else we have a negative value and cause
problems later. This can happen when we susupend and set io to NULL but
there was never any io set on the port.
Fixes#4337
Keep a running average and variance of the error. Use this to
periodically update the DLL bandwidth. When the variance gets smaller,
we update the DLL more slowly to stay closer to the ideal rate.
This seems to improve the rate stability.
Put the newline and comma right after printing the line so that it gets
flushed immediately. Otherwise we only see the last line in the next
cycle. We then need to end the JSON output with an empty object.
Pretty print the node status instead of the value.