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.
In our current world, it is possible to have a negative delay. This
means that the stream should be delayed to sync with other streams.
The pulse-server sets negative delay and the Latency message can hold
those negative values so make sure we handle them in the helper
functions as well.
Do the delay calculations in pw_stream and JACK with signed values to
correctly handle negative values. Clamp JACK latency range to 0 because
negative latency is not supported in JACK.
We should also probably make sure we never end up with negative
latency, mostly in ALSA when we set a Latency offset, but that is
another detail.
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.
Make the xrun reporting as info. This can generate a lot of logging if
the error is persistent and the errors are also reported in pw-top etc.
Fixes#4361
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.
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.
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.
Convert the RequestProcess event to a command and send this to the
driver node. This ensures that any future properties on the Event will be
passed to the Command as well, such as timestamps etc.
Save the complete RequestProcess command when we need to send it later
when the node is RUNNING so that we preserver the properties.
Make a function to emit an event from a stream. Use this function
internally to emit the RequestProcess.
Make the RequestProcess event construction a little more efficient.