Commit graph

2305 commits

Author SHA1 Message Date
Thomas Bernard
5cad844b49 Replace sched_ calls with pthread_ to set realtime priorities 2022-04-24 08:14:01 +00:00
Wim Taymans
49486bceeb filter-chain: add a simple delay
See #2320
2022-04-22 21:40:01 +02:00
Wim Taymans
2dfc41766f filter-chain: fix config parse
We need to advance to the next item.
2022-04-22 21:33:49 +02:00
Wim Taymans
368dd51d04 modules: update docs 2022-04-22 17:29:40 +02:00
Wim Taymans
553bb3f5ed modules: update docs 2022-04-22 17:08:45 +02:00
Wim Taymans
8807aa1dcd module: add docs 2022-04-22 16:51:27 +02:00
Wim Taymans
de4b021b34 modules: add docs 2022-04-22 16:44:15 +02:00
Wim Taymans
89010410eb modules: add more docs 2022-04-22 16:08:26 +02:00
Wim Taymans
e3b17581f2 modules: more docs 2022-04-22 15:18:24 +02:00
Wim Taymans
faf674a327 pulse-server: use config.ext for streams
Use the module config.ext to load extra stream properties and rules.
2022-04-22 14:54:27 +02:00
Wim Taymans
fcc6f7fc7c module-filter-chain: some more docs 2022-04-22 11:33:04 +02:00
Wim Taymans
932bbe4de6 module-filter-chain: add support for double params 2022-04-22 11:04:09 +02:00
Wim Taymans
ad178b8b5c module-filter-chain: add docs 2022-04-22 11:03:51 +02:00
Wim Taymans
10af59bdc2 modules: update docs 2022-04-21 20:22:45 +02:00
Wim Taymans
75f4fca1d7 module-loopback: add docs 2022-04-21 20:12:26 +02:00
Wim Taymans
d1207422e0 make NODE_WANT_DRIVER=true the default
So that all nodes attach to some driver to be scheduled.

For the virtual sink/sources this is a normal thing and we can remove
the custom settings.

For normal stream, this now makes it possible to link pw-play directly
to pw-record and have it transport data.

Fixes #1761
2022-04-21 10:14:53 +02:00
Wim Taymans
fed6f6d834 filter-chain: increase max gain for biquads 2022-04-21 09:38:35 +02:00
Wim Taymans
01a7d6709b modules: don't unload on stream errors
It's possible that the stream is sent an error when the session manager
can't link the node (because, for example, the sink/source is not
available yet). We should not stop but just log this error.

When the session manager actively kills the stream (when it is
reconnected while the DONT_RECONNECT flag is true) we will end up in the
UNCONNECTED state and that's when we can unload the module.
2022-04-21 09:02:02 +02:00
Wim Taymans
f205a09ade module: handle error and unconnected states
Unload the module on error/unconnected
2022-04-20 19:33:18 +02:00
Wim Taymans
26471ff2da module-loopback: unload the module on stream unconnect
When one of the streams is unconnected, unload the module. This is
what happens when the node was set as dont_reconnect with a node
target.

Fixes #1754
2022-04-20 19:25:42 +02:00
Wim Taymans
cc7aadde8a connection: debug when we close fd
Also handle DUP failure.
2022-04-20 12:13:41 +02:00
Wim Taymans
26db2f1ec9 module-pulse-tunnel: clear ringbuffer on cork 2022-04-19 10:51:45 +02:00
Wim Taymans
4cc0082634 module-pulse-tunnel: move some info log to debug 2022-04-19 09:58:18 +02:00
Wim Taymans
cdbdcd6771 module-pulse-tunnel: improve error recovery
Track the end-to-end latency of the stream and use that to drive
the resampler.
Hard reset the ringbuffer when under/overflow happens so that we
can recover quickly.

See #2230
2022-04-19 09:41:28 +02:00
Wim Taymans
c73c852413 pulse-tunnel: improve debug 2022-04-18 16:48:10 +02:00
Wim Taymans
0b96b87331 thread: implement some properties
Make helper method to parse thread properties and add 2 new properties
to control name and stack-size of the thread.
Use properties when creating threads with the default utils.
Use the default thread utils instead of pthread_create so that the
properties are used.
2022-04-18 13:02:27 +02:00
Quentin Wenger
d2250e9d1c Cleanup argument names in methods and events interfaces: object/data, 2nd pass. 2022-04-18 07:49:35 +00:00
Barnabás Pőcze
e28a052105 treewide: retain sections to prevent linker garbage collection
The linker may remove sections that are actually used when
"--gc-sections" and "-z start-stop-gc" is set. Add the `retain`
attribute to prevent that.

Furthermore, fix the alignment for `pwtest_suite_decl` objects.

See: #2292
See: https://lld.llvm.org/ELF/start-stop-gc.html
See: https://github.com/systemd/systemd/issues/21847
See: https://github.com/systemd/systemd/pull/21855
2022-04-15 23:58:05 +02:00
Quentin Wenger
22fc9eec35 Cleanup argument names in methods and events interfaces
First method argument is object, first event argument is data.

Closes !963
2022-04-15 10:11:49 +02:00
Wim Taymans
78b1c4c2e8 module-echo-cancel: put audio.position on properties
So that a default channel layout is set and the volume can be set before
the streams are negotiated.
2022-04-13 11:15:10 +02:00
Wim Taymans
b97327e1f6 module: handle type register errors
Registering an export type can give an error when the type is already
registered. Handle those errors and refuse to load the module.

See #2281
2022-04-11 21:15:13 +02:00
Barnabás Pőcze
37fa911a72 pulse-server: module: rework registry
Move all module methods into the `module_info` struct, and place
all such structs into the "pw_mod_pulse_modules" section of
the executable. This way there is no need for an explicit
module registry, and all information about a module can
be declared in the module's source file in a single place.
2022-04-11 03:02:08 +02:00
Wim Taymans
cc39644253 modules: add pid to unique name
So that modules loaded from different processes don't generate the
same node names.
2022-04-01 15:22:48 +02:00
Wim Taymans
f9e8e689d3 filter-chain: free descriptor
Fixes #2220
2022-04-01 10:10:22 +02:00
Wim Taymans
c6a8f8d3ef global: use SPA_ID_INVALID to send serial id
We use the done event to send the object serial to the client. Use an
invalid object id for this and filter it out on the receiver or else
the client might get an unexpected done event.

Fixes #2253
2022-03-31 09:39:49 +02:00
Carlos Rafael Giani
e8f93c3e1e meson: Add option to enable/disable legacy RTKit module
The RTKit module is being replaced by the RT module. Currently, it is
always built if D-Bus is present. For packagers, it can be beneficial to
be able to disable the legacy module. Add a Meson option to allow for
exactly that. Make it enabled by default to not change default behavior.
2022-03-31 07:07:40 +00:00
Wim Taymans
f0424c0b99 thread: deprecate pw_thread_utils_set()
Setting a global thread-utils is not a good idea, especially
when multiple contexts will register their own interface.

Instead, set the thread-utils as a context object and use this to
configure the data loop in the context.

In JACK we need a per context implementation of the interface so that
we can find the context specific thread-utils.

See #2252
2022-03-30 20:39:34 +02:00
Wim Taymans
3c38794886 pulse-tunnel: recover from xruns better 2022-03-30 17:59:25 +02:00
Wim Taymans
da6687e6ec module-pulse-tunnel: use dll to keep latency under control
Assign half the latency to the internal ringbuffer and half on the
network and remote end.
Use a dll to calculate the drift from our target ringbuffer fill
level and use the stream rate property to driver the resampler.

This should reduce uncontrolled latency over the tunnel.

PulseAudio wants us to be a driver will pull requests from the remote
side. We would need to provide a clock based on the remote end and
also try to follow it when we are not a driver. It would be slightly
better because in the normal playback case we would be able to
avoid resampling. We might do this eventually.
2022-03-30 17:23:09 +02:00
Wim Taymans
4ae94a6ca6 modules: use NODE_WANT_DRIVER=true instead of NODE_GROUP
For the modules that require a driver, don't add ourselves to
the pipewire.dummy group but instead just use the NODE_WANT_DRIVER
property to be assigned to a driver.

This makes it possible for the nodes to move to another driver than the
dummy driver (which has very high priority) and it avoids resampling in
cases where the nodes are linked to an audio source or sink.
2022-03-30 14:56:28 +02:00
Wim Taymans
8ec3932e97 pulse-server: include buffered data in stream delay
The buffered data includes the extra samples used by the resampler.
2022-03-29 17:41:14 +02:00
Wim Taymans
5a9d2679ca stream: add pw_stream_get_time_n()
Deprecate pw_stream_get_time() in favour of _get_time_n() that contains
the size of the pw_time structure. Make the old one fill in the fields
up to the buffered field. Make the new one use the size to decide how
much info to fill in.

Add a new buffered field in pw_time that contains the buffered data
inside the converter/resampler. This leaves the queued field with
purely the user provided size in the buffers.

Use get_time_n() in places.
2022-03-29 17:30:38 +02:00
Wim Taymans
7e42c905a8 remove the rate_match io
Now that the stream provides us with a requested size, we don't need to
use the rate_match anymore.
2022-03-29 09:57:49 +02:00
Wim Taymans
74da804e97 move some debug to fastpath 2022-03-28 16:25:00 +02:00
Joakim Olsson
90eec9320a module-echo-cancel: Use fraction as play delay
Change from ms to fraction for play delay to increase precision in delay
2022-03-23 07:55:39 +01:00
Joakim Olsson
d161019b0d module-echo-cancel: Correct naming in example and plugins 2022-03-21 09:54:20 +00:00
Wim Taymans
2b16df4e89 spa: add locale independent spa_dtoa
And use this in spa_json_format_float() where we also avoid invalid
json floats.
Use json float format in some places where we serialize json floats.
Add a unit test.

See #2223
2022-03-21 10:41:44 +01:00
Barnabás Pőcze
186d0a783e pulse-server: module: only cancel unload work if added
Only try to cancel the unload work in the work queue
if one has actually been added.
2022-03-17 21:31:02 +01:00
Barnabás Pőcze
f4fd884b15 pulse-server: manager: clean hook list
Clean the manager's hook list when it is destroyed.
2022-03-17 21:11:59 +01:00
Barnabás Pőcze
05a99c0e15 pulse-server: sample-play: clean hook list
Clean the hook list when the object is destroyed.
2022-03-17 21:11:59 +01:00