Take the current cycle times early and in all cases. We can use this to
get the current frame time for debugging purposes instead of the more
heavy jack_frame_time().
Rate limit the xrun warnings.
So that we can have different versions per FFT.
One possible optimization would be to split the complex number in
separate real and imag arrays. This would speed up the multiply
operations.
When we get a process callback from the capture stream but we can't
trigger the playback stream, simply consume the buffers from the capture
stream.
This can happen when the playback stream is not ready yet, for example.
If we don't consume the buffers that are ready, the converter might run
out of buffers and complain.
The current implementation uses the slope variable S to define the
filter slope. Setting S = 1 results in a constant Q value of
sqrt(2)/2, or 0.7071, which is a good default value.
However, calculating alpha from the Q value instead, as done in
RBJ's cookbook [1], the filter shape can be changed which might
be desired for certain applications and provides flexibility.
Since the current implementation always defaulted to using S = 1,
make sure that configurations missing Q uses the same slope value.
[1] = https://www.w3.org/TR/audio-eq-cookbook/
First make instances of all the plugins and then try to link them up.
Otherwise, depending on the order the plugins are defined in the config,
a link will try to create port data and set it on the instance, which is
still NULL and we crash.
So that a config override can disable the execution of the command by
setting the property to false in the pulse.properties config override.
Expose some conf.c method for this purpose.
Add support for some modules to use a module.$NAME.args config section
to override the arguments of the module. Update the docs.
Add more conditions to the module loading, use !false to also load the
module when the condition is not set and so that we don't have to
explicitly set each condition to true.
Improve module-profiler example config.
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.
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.
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.