Commit graph

3122 commits

Author SHA1 Message Date
Wim Taymans
7805a454df module-jack: fix jack scheduling
Our sink and source callbacks are called twice, once when the graph
starts and once when it completes, make sure we don't signal the jack
graph twice or we get corrupted output.

Fixes #3255
2023-06-19 16:37:03 +02:00
Wim Taymans
3dbb865d6d module-node-factory: add option to export object
Add an option to export the node from the factory.

That way you can locally create a node from a factory and then export it
to the server. This is handy to make object in the server from a config
file using the node-factory.

See !1643
2023-06-19 12:41:30 +02:00
Wim Taymans
7c7e814b02 modules: build virtual sink/source 2023-06-16 16:24:49 +02:00
Wim Taymans
989c61e8a1 pulse-server: add virtual-sink and virtual-source
Although those are example elements, they actually work and we can
implement them as well.
2023-06-16 12:18:36 +02:00
Wim Taymans
b9789e36cd module-combine: always use last input buffer
To handle the case where buffers are queued up because a trigger didn't
complete.
2023-06-16 11:31:13 +02:00
Wim Taymans
cfaf424ed8 module-loopback: always dequeue the last capture buffer
Because the capture triggers the playback stream, the playback stream
might not be actually triggered when the stream is not running.

This can cause a buffer to be queued in the capture side that is never
dequeued from the playback side. If 2 buffers are queued (and 2 buffers
are available on the stream), the capture source has no more buffers and
starts to drop/stutter.

Fix this problem by always dequeueing/queuing all the queued buffers so
that we always use the last one.

See #3276
2023-06-16 11:12:51 +02:00
Wim Taymans
a0a32af386 pulse-server: add 2 quirks to block sink/source updates
See #1517
2023-06-15 11:45:43 +02:00
Wim Taymans
0b2d9ee007 module-session-manager: use dynamic builder
The buffer is very small and we should use a dynamic builder if we don't
know what pod we will expect.
2023-06-15 11:05:17 +02:00
Wim Taymans
bbf8f1a0c8 module-loopback: request renegotiation when suspended
When one side of the loopback suspends, do a EnumFormat params to force
renegotiation on the other side as well.

Suppose this:

1. sink/filter/pw-play plays at 48000Hz
2. pw-play goes away, sink and filter-sink suspend, filter-playback
   idles
3. pw-play starts with 44100Hz
4. sink/filter-sink renegotiate to 44100Hz, filter-playback is still
   at 48000Hz and pitch shifted.

We might want to manually suspend the IDLE nodes instead but for now
this is a good workaround.

Fixes #2969
2023-06-14 17:32:24 +02:00
Wim Taymans
0e516dec44 module-loopback: keep separate info for the delay rate/channels 2023-06-14 16:28:39 +02:00
Niklāvs Koļesņikovs
3be07c7de2
src/modules/meson: make Opus custom modes optional for NetJack2
Signed-off-by: Niklāvs Koļesņikovs <89q1r14hd@relay.firefox.com>
2023-06-14 13:54:08 +03:00
Wim Taymans
b080b31848 impl-port: make the rt.mix_list private
The rt.mix_lst is really something internal to the tee and fallback
mixer in the ports so make it private.

Use the port_set_io call to add the Buffer io area to the mix_list
tee and fallback mixer on the port, like we do for remote-node. We can
then remove the custom code to do this in remote-node and impl-link.

Remove an unused field (clock) in the port struct.

Remove the unused io_set field in impl-link, it is always in sync with
the activated field.
2023-06-13 15:19:46 +02:00
Wim Taymans
8d62bb1e97 module-zeroconf: fix compilation 2023-06-13 08:52:32 +02:00
Christian Glombek
d18db904b9 module-zeroconf: Fix deduplication
Ports recent fixes and improvements regarding the deduplication of sink
creation from module-raop to module-zeroconf.

- 0bb0b524c7
- 14fd7f7bf7
2023-06-13 03:09:54 +02:00
Christian Glombek
389cbe7aef module-raop: Avoid props creation for duplicates 2023-06-12 18:40:04 +02:00
Wim Taymans
da86c2030c module-netjack2: improve OPUS fallback 2023-06-12 18:37:47 +02:00
Wim Taymans
deba261a1b module-netjack2: fix compilation without OPUS 2023-06-12 18:25:53 +02:00
Wim Taymans
fb63bb3c5c module-netjack2: start follower after START message 2023-06-12 17:56:20 +02:00
Wim Taymans
0cfd94eb52 module-netjack2: support int and opus in driver 2023-06-12 17:40:16 +02:00
Wim Taymans
19f3e422e1 module-netjack2: add int support 2023-06-12 17:01:13 +02:00
Wim Taymans
8dfb22d12b module-netjack2: add opus support 2023-06-12 11:44:50 +02:00
Wim Taymans
802b51a0cb module-raop: set min-latency correctly
I think we need to set this to the min-latency, not the latency
we will report in the sync messages.

See #3282
2023-06-11 19:51:54 +02:00
Wim Taymans
8eb6c0ec33 pulse-server: handle special device names in play/record
@DEFAULT_MONITOR@ finds the default sink but returns is_monitor true.

Always lookup the device based on the name and index. This transform
the special device names like @DEFAULT_XXX@ to the default device.

Always use the found device name as the target. Make sure to set the
CAPTURE_SINK property when dealing with a monitor.

Fixes #3284
2023-06-11 18:37:24 +02:00
Barnabás Pőcze
dfb3cb20af pipewire: module-raop-sink: check asprintf return value
GCC warns because `asprintf()` has the `warn_unused_result`
attribute, so check the return value to silence the warning.
2023-06-10 02:22:08 +02:00
Wim Taymans
4bf526ddf4 module-netjack2: handle NULL socket
The socket might be NULL when it got destroyed due to an error.
2023-06-09 20:49:27 +02:00
Wim Taymans
4e070c90aa module-profiler: ignore peer targets
Only log the targets of the node, ignoring the peers of the driver or
else we will log some nodes twice.

Fixes #3278
2023-06-09 17:06:48 +02:00
Wim Taymans
f0e8b95d76 module-netjack2: do some more checks
Check packet size and avoid overflows when receiving data.
2023-06-09 13:37:39 +02:00
Wim Taymans
d35e514549 module-netjack2: samples are transmitted in little endian
So swap them on big endian.
2023-06-09 12:26:39 +02:00
Wim Taymans
9dd5bab535 module-netjack2: add MIDI send and receive 2023-06-08 16:38:53 +02:00
Wim Taymans
c2860477c3 module-raop: add default 1 sec of latency
Make NTP timestamps based on CLOCK_REALTIME.

Handle socket errors.

Some devices want at least 1 second of latency between RTP and NTP
timestamps or they stay silent. A a raop.latency.ms property for this
purpose that defaults to 1 second.

It is said that all devices seem to add 250ms of extra playback delay,
so include that into the delay reporting.

Fixes #3247
2023-06-07 16:51:34 +02:00
Wim Taymans
9a93a60fbf raop: log last error on connection failure 2023-06-07 16:45:56 +02:00
Wim Taymans
14fd7f7bf7 module-raop: fix deduplication
Also check duplicate entries in the resolve callback because we might
not have created a tunnel earlier.
2023-06-06 10:23:52 +02:00
Wim Taymans
04e17a8b1c module-netjack2: handle driver reconnect
Let the driver keep announcing.
Keep track of when a message was received in the driver. If we don't
receive anything for a while, reconnect.

Don't connect twide in the manager.
2023-06-05 13:30:16 +02:00
Wim Taymans
8db98b114d module-protocol-native: close fds from zombie clients
When a client is zombie, close the fds we got in the discarded message
or else we leak them.

See #1840
2023-06-05 13:28:04 +02:00
Wim Taymans
a70a89289b module-netjack2: fix driver name 2023-06-05 10:36:30 +02:00
Wim Taymans
f2a0df9ac2 module-netjack2: lock and force rate and quantum 2023-06-05 10:36:08 +02:00
Wim Taymans
407ee3940c module-netjack2: set latency param 2023-06-05 10:21:18 +02:00
Wim Taymans
7de7a620f3 module-ffado: fix latency configuration
Don't deref the port before we created it.
2023-06-05 10:21:18 +02:00
Wim Taymans
cc82715325 module-netjack2: refactor
Move common code to a separate file.
2023-06-05 10:20:43 +02:00
Wim Taymans
7bd74a67f4 module-netjack2: use frames from graph and sync
The params are the initial period_size, use the ones used to
encode the packets.
2023-06-02 15:43:34 +02:00
Wim Taymans
629e322fac module-netjack2: clear empty buffers 2023-06-02 15:09:31 +02:00
Wim Taymans
287566937e module-netjack2: improve node names 2023-06-02 13:31:38 +02:00
Wim Taymans
2988d9c831 module-netjack2: small improvements
Improve node properties
Improve module parameters and docs
Send send and recv buffer sizes.
Stop follower on connection errors.
2023-06-02 13:24:49 +02:00
Wim Taymans
2d253de359 module-profiler: add per client xrun count in profiler data
So that pw-top can show the client xruns instead of the driver xruns
2023-06-02 13:23:55 +02:00
Wim Taymans
9727bf3c4b modules: fix some compiler warnings 2023-06-01 19:01:25 +02:00
Barnabás Pőcze
212c574821 pipewire: module-ffado-driver: don't have labels at the end
Labels are only allowed before statements before C23,
and clang does not support them as an extension in
gnu11 that pipewire uses, so add `break`s.
2023-06-01 16:56:59 +00:00
Wim Taymans
2cc0fe0b3c module-netjack2: add netjack2 manager
This module listens for messages from netjack2 drivers and makes a sink
and source filter to send and receive data from the remote driver.
2023-06-01 18:36:07 +02:00
Wim Taymans
f8aa18c88b module-netjack2: small improvements 2023-06-01 18:36:07 +02:00
Wim Taymans
991a1558dc module: add a netjack2 driver module
The module advertizes itself on multicast and will trigger a new client
in the netjack2 manager. Tested with jack2 and 'jack_load netmanager'.

The driver will receive and send data (no midi yet) from and to the
manager in sync with the manager, without resampling and with a fixed
latency.
2023-05-31 17:22:05 +02:00
Wim Taymans
d9e29e70f3 module-ffado: fix compilation with -UFASTPATH 2023-05-30 15:57:07 +02:00