Commit graph

3496 commits

Author SHA1 Message Date
Barnabás Pőcze
27b76ae686 pulse-server: calculate event mask from facility and type
Make `client_queue_subscribe_event()` take the facility and type
separately, and calculate the mask itself, so that the caller
does not need to be concerned with that.
2024-09-18 19:35:08 +02:00
Wim Taymans
e3a7035e8f spa: make helper to init spa_audio_info_raw from dict
Make a function that can initialize raw audio info from a dict and fill
in the defaults. We can use this in many of the modules when the audio
format is parsed.
2024-09-18 15:48:27 +02:00
Wim Taymans
e2991f6398 json: add helper function to parse channel positions
Use the helper instead of duplicating the same code.

Also add some helpers to parse a json array of uint32_t

Move some functions to convert between type name and id.
2024-09-18 09:54:34 +02:00
Pauli Virtanen
ec5684302c doc: in user-facing config examples, indicate which file it goes into
Add suggestions for config fragments in config file examples, as
applicable.
2024-09-16 15:51:59 +00:00
Wim Taymans
b5cccdb382 json: add and use spa_json_str_object_find()
Parse a string as a json object and copy the value with key as a string.
2024-09-16 13:12:05 +02:00
Wim Taymans
ce390d5b22 spa: add spa_json_object_next
This gets the next key and value from an object. This function is better
because it will skip key/value pairs that don't fit in the array to hold
the key.

The previous code patter would stop parsing the object as soon as a key
larger than the available space was found.
2024-09-16 09:50:36 +02:00
Wim Taymans
cd81b5f39a spa: add spa_json_begin_array/object and relaxed versions
Add spa_json_begin_array/object to replace
spa_json_init+spa_json_begin_array/object

This function is better because it does not waste a useless spa_json
structure as an iterator. The relaxed versions also error out when the
container is mismatched because parsing a mismatched container is not
going to give any results anyway.
2024-09-16 09:50:33 +02:00
Wim Taymans
feccb882b6 spa: add spa_json_begin
That combines spa_json_init() and spa_json_next, a common thing to do.
2024-09-16 09:50:31 +02:00
Wim Taymans
f7110fbc77 module-raop: add ProcessLatency support
Intercept the Output Latency paran and parse it for later.

Use the computed latency as the ProcessLatency and expose this
as the ProcessLatency param and the updated Input latency.

Accept updates to ProcessLatency to modify the latency, which then also
updates the Input Latency param.

See #4270
2024-09-10 17:29:52 +02:00
Wim Taymans
1e5c86e1dc module-loopback: add ProcessLatency support
Improve the Latency reporting, we always report Input and Output latency
pairs.

Keep ProcessLatency on the capture and playback streams. The capture
stream process latency is reported as input latency and the playback
process latency as output latency.

Setting ProcessLatency on the capture stream (Sink), for example, will
propagate the added latency upstream. This would then instruct players
to send the audio earlier to compensate for the delay.

See #4270
2024-09-10 15:32:00 +02:00
Arun Raghavan
d79b995e51 module-rtp-sap: Make sure we don't publish a null refclk
If the PTP refclk is not readable, we fallback to the stored ts_refclk,
which might be NULL. Make sure we check for this case.
2024-09-09 14:05:45 -04:00
Wim Taymans
0ecac098c7 modules-netjack2-driver: add source.ip and source.port
Instead of binding the socket to 0.0.0.0 with port 0, make some config
options source.ip and source.port to configure this. This makes it
possible to bind to other interfaces or to use a fixed port for the
data messages.

Fixes #4144
2024-08-29 12:44:53 +02:00
Wim Taymans
5fff2c47a6 modules: improve docs some more for snapcast-discover
Fixes #4243
2024-08-29 10:18:36 +02:00
Arun Raghavan
292d6f5ca2 module-rtp: More u64 format fixes
Fixes: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4241
2024-08-28 21:55:15 -04:00
Wim Taymans
a77a6f3959 modules: for format string for u64
Fixes #4241
2024-08-28 16:21:30 +02:00
Wim Taymans
d7dfec8cb3 modules: add an example of a downmix source in loopback
See #4236
2024-08-28 10:25:19 +02:00
Arun Raghavan
48c2e95165 module-rtp: Clamp buffer fill level check on send side
This is based on target_buffer which is likely to be much smaller than
BUFFER_SIZE (currently 4MB). This is already done on the receive side.
2024-08-27 01:38:10 +00:00
Arun Raghavan
9f643fec7e module-rtp: Allow aes67 send with a non PTP clock
Our current AES67 sender setup requires that that PTP driver drive the
entire graph. This adds support for allowing the AES67 RTP sink to be
driven by an arbitrary driver, while still using the PTP driver for
sending data on the network.

When aes67.driver-group is specified a pw_filter is created with no
ports, node.always-process = true and node.group set to the
aes67.driver-group. When set to PTP, this gives us process callbacks at
the PTP rate which we use to get the current PTP time in the RTP sender
by interpolating the clock snapshots from the pw-filter.

Implementation ideas from Wim Taymans. Co-authored with Sanchayan Maity.

For a detailed reference, refer the following papers by Fons Adriaensen.
- Using a DLL to filter time
  (https://kokkinizita.linuxaudio.org/papers/usingdll.pdf)
- Controlling adaptive resampling
  (http://kokkinizita.linuxaudio.org/papers/adapt-resamp.pdf)
2024-08-27 01:38:10 +00:00
Arun Raghavan
9ccf62d4f6 module-rtp: Increase write timestamp tolerance
We allow a quantum of jitter in the write timestamp. The previous value
of 32 seems to be empirically determined, using the actual quantum
allows us to reason about this better.
2024-08-27 01:38:10 +00:00
Wim Taymans
3d34ec384b modules: remove FIXME 2024-08-26 16:29:11 +02:00
Wim Taymans
fc3d7cf7c7 modules: implement mixing in combine stream
When the combine-stream module is used as a source and the input streams
are overlapping, mix the samples instead of overwriting the previous
samples.

See #3710
2024-08-26 15:59:38 +02:00
Wim Taymans
b46673b475 modules: improve node names of combine-stream
use the "output" and "input" prefixes for output and input streams
respectively instead of always "output"
2024-08-26 15:58:18 +02:00
Wim Taymans
2ef3ced380 modules: improve snapcast discover docs
Fixes #4223
2024-08-23 15:50:53 +02:00
Arun Raghavan
f2f204d604 module-rtp-sap: Initialise send fd when first needed
Avoids need for additional configuration to allow disabling send (which
in turn was needed to avoid errors when a network interface is not
available on start).
2024-08-20 05:24:31 -04:00
Wim Taymans
50be29ad18 modules-sap: fix uninitialized variable when close in error 2024-08-20 10:55:01 +02:00
George Kiagiadakis
242d75c6fc m-rtp-sap: add sap.announcer option to disable the send socket
In circumstances where the network interface is not ready yet,
creating a send socket will fail. This may be ok if we only
intend to use rtp-sap as a listener, therefore add an option for it.
2024-08-19 19:19:58 +03:00
Wim Taymans
d9fc912c11 spa-node: always set clock.quantum-limit property
Set the clock.quantum-limit property on the node also when it was
created without properties.

Fixes clock.quantum-limit on the Midi-Bridge.

See #4005
2024-08-05 18:41:18 +02:00
Wim Taymans
3e5a85b3bc module-ffado: implement freewheeling
When freewheeling starts, pause the streaming and resume when
freewheeling stops. Also make sure we don't try to do any IO or
timeouts.
2024-08-01 17:18:08 +02:00
Wim Taymans
3bd1217a02 module-ffado: separate rt booleans from non-rt 2024-08-01 17:18:08 +02:00
Wim Taymans
819c73907e modules: use the right module name in the docs
Fixes #4172
2024-08-01 11:37:33 +02:00
Wim Taymans
8fac16a594 module-ffado: add some docs 2024-07-31 16:22:11 +02:00
Wim Taymans
7065023a5f module-ffado: keep the configured rate in sync with params
When we reconfigure rate, make sure we update the EnumFormat and Format
params with the new value.
2024-07-31 16:20:15 +02:00
Wim Taymans
a831a15825 module-ffado: Improve samplerate and periodsize handling
Only set use the graph rate and duration when the ffado.sample-rate
and ffado.period-size properties are set to 0. Othersize use the
configure values.

Without this patch, it would just ignore the settings and always use the
graph rate.
2024-07-31 15:59:21 +02:00
Wim Taymans
d9e7a10b0d modules: accept and produce UMP only 2024-07-30 09:38:40 +02:00
Wim Taymans
57b495f775 module-netjack2: support local.ifname for manager
Fixes #4141
2024-07-22 13:34:14 +02:00
Wim Taymans
959491966a modules: fix doc
Fixes #4134
2024-07-22 13:21:27 +02:00
Wim Taymans
8a62563d5b module-rtp: fix ptime and target_buffer checks
target_buffer is in samples and ptime in msec so we can't really compare
them. Use psamples instead, which is ptime but then as samples.

See #4095
2024-07-19 13:17:51 +02:00
Wim Taymans
9a313a5d42 link-factory: destroy all links in error
There is no possibility to recover from this so simply destroy the link.
The clients should already have received the link status when we destroy
it.
2024-07-19 12:06:09 +02:00
Wim Taymans
7447dedef4 module-netjack2: implement netjack2.connect
When netjack2.connect is true, make streams and set the autoconnect
property on them. Otherwise, make sink/source as it was before.

Fixes #4125
2024-07-19 11:48:14 +02:00
Wim Taymans
0062d64b3a module-netjack2: stop follower when setup io errors out
Just disable the data socket when it errors out but stop the follower
when the setup socket is in error.

This makes shutdown work properly when the setup socket is stopped,
which is what actually happens eventually.
2024-07-19 11:47:07 +02:00
Wim Taymans
b5a7a1f224 module-netjack2: improve port names
Let the default port logic make the port names. For network nodes this
will be with a send/recv prefix.
2024-07-19 11:42:51 +02:00
Wim Taymans
c73b56db38 fix compilation 2024-07-18 14:24:53 +02:00
Wim Taymans
280bbd88d4 modules: don't unload module on stream error
Unloading the module on stream errors is a bit too much because a
suspend can clear the stream error again (or the error might not be
fatal)

This can happen for example when negotiation fails on some stream ports
(wireplumber tries to link the midi ports to audio ports) and it's
better to not completely fail on that.

Fixes #4121
2024-07-18 14:15:22 +02:00
Daniel Lundqvist
8b613e20d9 module-jack-tunnel: Properly propagate error from dlopen()
dlopen() does not set errno on failure, rather you're supposed to call
dlerror() to get the latest error. dlerror() return a string so
instead return -ENOENT from weakjack_load_by_path().

Depending on errno weakjack_load() could think it successfully loaded
the library, and later module-jack-tunnel would crash because it call
a NULL function pointer.
2024-07-17 20:26:56 +02:00
Arun Raghavan
a3c68ef9cf module-rtp: Make max SAP sessions configurable
Keep the current limit, but allow for more if someone wants to track
more.
2024-07-16 08:45:50 -04:00
Wim Taymans
73d41308b1 module-raop: remove unused deprecated header 2024-07-10 19:20:26 +02:00
Wim Taymans
8cff77706a module-snapcast: don't hardcode the JSON message id
Use a counter to make it increment for each message.
2024-07-09 09:10:31 +02:00
Arun Raghavan
9b33cea0f7 module-rtp: Minor robustness improvement to PTP socket reading
Mark socket as CLOEXEC like we do everything else, log when we flush
stale data, and check for errors in the while loop.
2024-07-06 22:45:56 +00:00
Arun Raghavan
858f534436 module-rtp: Allow setting session ID/version as parameters
This allows for externally setting the value at runtime, like we do with
the session name.
2024-07-06 22:45:56 +00:00
Arun Raghavan
6623eb8254 module-rtp: Allow overriding session version
This allows us to set an session version for the SAP externally. Also
the default is changed from 0 to an NTP timestamp, as recommended by the
spec[1].

[1] https://datatracker.ietf.org/doc/html/rfc4566#section-5.2
2024-07-06 22:45:56 +00:00