Commit graph

13220 commits

Author SHA1 Message Date
Wim Taymans
2ad8904ac8 spa: update the UNPOSITIONED flag
When we can't parse valid positions, make sure the UNPOSITIONED flag is
set for raw audio info.
2024-11-14 11:06:11 +01:00
Wim Taymans
388f330700 module-vban: add stream.rules support
Make it possible to match the new VBAN streams on ip/port/name and media
properties and create a stream with custom properties.

See #4402
2024-11-14 09:59:12 +01:00
Wim Taymans
1a5514e5cf module-vban: create streams per stream_name
Always listen on the receive socket. Find the stream with the given
stream_name of the packet and create it if it doesn't exist.

Also take the sample-rate, channels and format from the packet
parameters instead of the config.

Fixes #4400
2024-11-13 16:47:34 +01:00
Wim Taymans
567b484386 filter-chain: move the filter-graph to plugins 2024-11-13 11:12:06 +01:00
Wim Taymans
2e157f7248 filter-chain: make filter-graph SPA plugins
Make SPA plugins from all the filter-graph plugins and use the plugin
loader to load them.

Because they are not in the standard plugin path in development, add
the module dir to the plugin path for now.
2024-11-13 10:20:54 +01:00
Wim Taymans
201455eecd filter-chain: don't link plugins to libpipewire
Reorganize some things so that we only link the pipewire module to
libpipewire. We don't need to link the filter-graph plugins to pipewire
anymore.
2024-11-12 16:32:54 +01:00
Wim Taymans
c3e668049b filter-chain: pass quantum-limit to plugins 2024-11-12 16:11:51 +01:00
Wim Taymans
13b8e3a75d filter-graph: Make dsp-ops and interface
Rename dsp-ops to audio-dsp and make it a SPA interface.

Pass the audio-dsp interface around with the support.
2024-11-12 15:54:28 +01:00
Wim Taymans
0a71911796 filter-chain: move the plugin to an audio-plugin
Make an interface of the audio plugins.
2024-11-12 12:51:15 +01:00
Wim Taymans
c8c89f7517 pulse: also set channels in the map
When converting a position to a channel-map, copy the number of channels
as well.

This broke with commit e2991f6398
2024-11-12 11:55:14 +01:00
Wim Taymans
22f7a1de28 filter-chain: move filter-chain to a spa_interface
Move the filter-chain code to a filter-graph SPA interface.

The idea is to make this more useful outside of the filter-chain.
2024-11-12 11:32:58 +01:00
Wim Taymans
d17c3fb72d filter-chain: move some biquad functions around
Make just 1 biquad function in dsp-ops.

Move the implementation prototypes to a separate header.
2024-11-11 17:59:10 +01:00
Wim Taymans
aad3d1eafa filter-chain: improve biquad run a little
We only need to copy source to dest on the first run.
2024-11-11 16:41:17 +01:00
Wim Taymans
02edfba21a filter-chain: don't let plugins depend on pipewire, just spa 2024-11-11 16:36:09 +01:00
Wim Taymans
44340fde05 module-rtp: allocate receive buffer based on MTU
Use the MTU to allocate the receive buffer instead of using a hardcoded
size.

Fixes #4394
2024-11-11 12:03:32 +01:00
Wim Taymans
a53bc035c0 module-rtp: calculate payload_size based on MTU
The actual payload size depends on the MTU but should not include the
IP/UDP and RTP headers.

Fixes #4396
2024-11-11 11:49:20 +01:00
Anders Jonsson
73b5a10021 po: Update Swedish translation 2024-11-11 08:21:02 +00:00
Wim Taymans
bebad7888f gst: take the thread lock before calling pw_stream functions 2024-11-08 12:22:35 +01:00
Wim Taymans
1661f15b9c filter-chain: pass dict in plugin load function
So that we can pass some more properties around and remove the
quantum_limit hardcoded value.
2024-11-07 16:40:38 +01:00
George Kiagiadakis
c7854e1da4 filter-chain: move dsp_ops pointers to dynamically allocated memory
Make a plugin structure that is dynamically allocated for each plugin
and pass it around to the descriptor instance structures, so that they
all have access to dsp_ops without sharing a static pointer.

The problem with the static pointer is that the dsp_ops structure is
actually allocated in module-filter-chain's instance structure,
so it always points to the instance of the last filter-chain that was
loaded in the process. When this is unloaded, the other filter-chains
crash.
2024-11-07 15:15:03 +00:00
Wim Taymans
b2dd733520 v4l2: Add mmap fallback when USERPTR is not supported
When we don't support EXPBUF according to the probe, the host will
allocate memory for us. We will then try to use USERPTR to import the
memory into v4l2.

If this is not supported, try to fall back to MMAP support, mmap the
buffers and memcpy the MMAP buffer to the host allocated buffers.
2024-11-07 15:55:38 +01:00
Wim Taymans
c4df4a0371 v4l2: improve debug a little 2024-11-07 15:55:38 +01:00
Wim Taymans
b9df297e2a v4l2: use a separate flag to skip the first buffer
The buf.sequence value might stay to 0 (v4l2loopback)
2024-11-07 15:55:38 +01:00
Wim Taymans
877c262e78 v4l2: probe number of buffers as well
Instead of just probing with 2 buffers, probe with the MAX_BUFFERS and
remember how many buffers we received.

Some drivers (v4l2loopback) work with less than MAX_BUFFERS (8) and we
need to set the max number of buffers in the Buffers param.
2024-11-07 15:55:33 +01:00
Wim Taymans
71f6d269db v4l2: first probe and then update port flags
The probe is to decide it we can use EXPBUF or not and this is used to
decide on the flags.

This got broken with 842ac9e110
2024-11-07 11:17:33 +01:00
Wim Taymans
f7e97ab157 examples: update the examples with new lazy scheduling flags
The src can listen to RequestProcess commands and so gets the
node.supports-request = 1 property.

The play-pull example can both be a driver that listens to
RequestProcess or a lazy driver so set this in properties as well.
We can now remove the priority.driver property because automatic
priority selection will make us a driver or not.

With this change, video-src to video-play-pull will use lazy scheduling
with play-pull as the driver. video-play-pull to v4l2src will use
normal scheduling and video-src to video-play will also use normal
scheduling.
2024-11-06 12:57:48 +01:00
Wim Taymans
7abf11210d stream: expose the lazy flag with pw_stream_is_lazy()
Together with the is_driver() status, this can be used to check if the
stream is using lazy scheduling or not.
2024-11-06 12:57:48 +01:00
Wim Taymans
f16f074725 context: set lazy scheduling flags in clock
Collect the request scheduling flags and when there is a lazy driver,
set the lazy scheduling flag in its clock. This means that the driver
can expect RequestProcess commands to start the scheduling.

Pass the lazy scheduling clock flag to the node.

Make sure lazy scheduling driver have a higher priority than their
request drivers.
2024-11-06 12:57:48 +01:00
Wim Taymans
9c49bffc22 keys: add lazy scheduling flags and docs 2024-11-06 12:57:48 +01:00
Wim Taymans
ae0dd9195a modules: add ratelimit to xrun warnings in jack-tunnel
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.
2024-11-06 12:29:21 +01:00
Wim Taymans
68877dcee7 audioconvert: only output when there is something to output
Or else we get 0 sized output buffers.
2024-11-06 09:28:09 +01:00
Robert Mader
2ab11d0f6c filter-chain: Fix build error without FFTW
And some style changes while on it.

Fixes: c67232718 ("filter-chain: move fft mem function to dsp_ops")
2024-11-05 18:25:21 +01:00
Wim Taymans
c672327181 filter-chain: move fft mem function to dsp_ops
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.
2024-11-05 16:12:28 +01:00
Wim Taymans
79baeb8d18 modules: handle stream trigger errors
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.
2024-11-05 15:59:01 +01:00
Wim Taymans
bc57b9ec86 impl-node: return a result from pw_impl_node_trigger()
Return 0 when the peer was not triggered, 1 when it was triggered and
an error when there was an error.
2024-11-05 15:53:12 +01:00
George Kiagiadakis
f12d37a421 pw-dot: fix information on the link labels 2024-11-05 12:09:43 +02:00
Wim Taymans
c0fcc9b83f videoconvert: add more ffmpeg format mappings 2024-11-05 10:40:14 +01:00
Pauli Virtanen
1b5c244ee0 bluez5: clean up route/profile building
Clean up route/profile building a bit so that it is easier to add new
device profiles.

Use names instead of magic numbers for the routes.

Fix marking BAP set input route unavailable by error due to magic number
off by one.
2024-11-04 21:54:29 +02:00
Pauli Virtanen
8504e58120 bluez5: reduce quirks logspam
There's no need to log quirks every time they are used, it's enough to
log them once when a device connects.
2024-11-04 21:41:24 +02:00
George Kiagiadakis
726234c82f audioconvert: always push out data when the out_offset reaches max_out
No matter if the input data (n_samples) is > 0, the code here should
flush out existing data if the output buffer is full
2024-11-04 20:36:12 +02:00
Elliot Chen
d5e2a0df6c libcamera: update buffers datas information according to plane info 2024-11-04 17:00:18 +00:00
Andika Triwidada
359b70e2ba Update Indonesian translation 2024-11-04 16:59:03 +00:00
Niklas Carlsson
08af555e90 filter-chain: use Q value for biquad shelving filters
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/
2024-11-04 16:54:55 +00:00
Christian K
74fed1d208 Update German translation - from https://l10n.gnome.org/vertimus/PipeWire/master/po/de/ 2024-11-04 16:52:34 +00:00
Pauli Virtanen
0d80a13771 modules: support config overrides for access & protocol-native
These modules are loaded in default config, but to configure sockets and
their permissions, the args need to be overridden.
2024-11-04 16:50:30 +00:00
Pauli Virtanen
5e8a7f434b doc: suggest fragment file name in example configs 2024-11-04 16:50:30 +00:00
Wim Taymans
9c19284f7f support: make the loop queue handling lockfree
Don't use TSS to store per-thread queues but keep a lockfree stack of
queues. We can then pick off a queue and write to that one and place it
back after use.

We need to keep the queues indexed by id in the stack because otherwise
we would need to compare-and-swap 128 bits (pointer + tag), which is
more problematic.

Because we keep the queues in an array and no queue is ever removed and
the array can only grow, we can quite easily just iterate the array
without a lock. Without the lock we also fix one of the potential
problems with ardour where the queue_flush thread is canceled while
flushing and the queue_mutex remains locked.

Because we end up with all queues in the array now, we can overflow the
fixed max amount of queues we can manage. When that happens, sleep for a
while and try again. This is a case where more than QUEUES_MAX (128) threads
are invoking at the same time and is rather unlikely.

There is also the queue overflow case which we now also must handle with
a retry. This potentially uses more eventfds but again this should be
unlikely and cause no further problems.

See #4356
2024-11-04 17:41:14 +01:00
Wim Taymans
9ed57c1dba impl-node: improve property parsing
Use pw_properties_get_uint32() and friends to parse properties and have
a fallback when the property is not there.
2024-11-04 16:52:09 +01:00
Niklas Carlsson
18148e7add filter-chain: fix unmap indexing for LV2 plugins
The index returned to the LV2 plugin starts from 1, but the array
index starts from 0.
2024-10-31 13:07:04 +01:00
Pauli Virtanen
c9acdd2f1f bluez5: backend-native: update HFP SDP records
Advertise SWB since we implement it.  Update HFP version to 1.9
accordingly.
2024-10-31 08:18:45 +00:00