Use the control changes to load a new IR, then signal to data thread to
use the new IR. In the data thread, signal the main thread to free the old
IR after we swapped it out.
THis moves all allocations from the data thread into the main thread.
SOFA is a file format used for storing and accessing spatial audio data, namely head-related transfer functions. These can be used to create binaural spatial sound using head- or earphones.
This commit introduces libmysofa as an optional dependency for loading SOFA files and creates a spatializer plugin for the filter-chain
ci: install libmysofa-devel for full build
ci: bump FDO_DISTRIBUTION_TAG
For lower than default rates, limit the upsampling to 2 times the default
rate. This avoid 8000Hz to the upsampled to 192000 when a 44100 is
available (but not 48000).
For higher rates limit the upsampling to *3.
Try to upsample to something in the same rate family so that the amount
of resample filter is minimal.
If that doesn't work, try to downsample to something in the same rate
family above the 44100 threshold.
If that also doesn't work, downsample to the highest available samplerate.
When the driver has no followers to run, we can keep the current rate
and don't need to switch. This avoids a useless switch to the default
samplerate when all followers are removed.
In theory, the pipewiresrc element is a live element by default.
However, that is not reflected in code, as the element never sets
that flag unless explicltly requested through stream properties.
Make it live by default, but still respect if consumers of the
element mark it as not live.
Try to keep half the packet size in the ringbuffer as well. This helps
us adapt to the packet size of the sender.
Drop samples from the ringbuffer for the first packet we read. This
makes us lock onto the stream with the exact requested latency.
Audinate AES67 devices send SAP messages with 30-second interval, so hardcoded timeout has to be bumped. Just bumping it will reduce efficiency of common RTP module use-case, so a config is introduced for this. 70 second will be set as default for AES67 mode.
Make jack.merge-monitor true by default because this is what JACK also
does.
Add an exception for Mixxx because that makes it easier to select the
capture/monitor ports.
Fixes#1760
Always first use the env var and then check the properties. So that
PIPEWIRE_CORE=pipewire-1 PIPEWIRE_REMOTE=pipewire-1 make run runs
everything on pipewire-1 sockets regardless of the config files.
Also PIPEWIRE_NODE always needs to be taken into account first.
Implement the combine-sink module with the native module.
Make sure we use the same logic to wait with emitting the module loaded
signal until we have seen all the sink_inputs of our module.
Make sure we also use the timeout to signal module failure when we don't
see the nodes.
FFmpeg integration in pw-cat does not strictly require Compress-Offload;
for example, there could be other nodes in the graph that can handle
compressed audio.
Signed-off-by: Carlos Rafael Giani <crg7475@mailbox.org>
* Decouple FFmpeg integration in pw-cat from the ffmpeg option; if
one wants to use Compress-Offload but not the ffmpeg SPA plugin,
it is then possible to just pass -Dpw-cat-ffmpeg=enabled to meson.
Likewise, this also makes it possible to build the ffmpeg plugin
without extending pw-cat.
* tinycompress does not need to be detected in the root meson.build,
since it is only needed by the alsa plugin.
The module can:
- Make a sink that sends all or some channels to other sinks.
- Make a source that combines multiple sources into one.
The selection of what streams to combine is implemented with rules so
that the selection is very configurable. By default all Audio/Sink or
Audio/Source nodes are selected.