Commit graph

3646 commits

Author SHA1 Message Date
Nils Tonnätt
761fa6f59d meson: fix meson test without building pipewire before
This adds project internal dependencies to some tests to let all
tests succeed. It is not adding all dependencies those tests actually
need.
2021-08-04 20:38:30 +02:00
Torkel Niklasson
02b4ccd782 src/pipewire/impl-node.c: Change client err/warn logs to infos
xrun, client too slow and that the client missed wakeups is not a
critical issue for us, so we patch them to be infos instead of
warnings and errors.
2021-08-04 09:37:29 +00:00
Peter Hutterer
3ced15ad22 doc: some extra docs for the core objects 2021-08-04 07:49:53 +00:00
Peter Hutterer
5561531751 doc: document the core/implementation API split a bit better
Still missing a proper review of the linked objects, but at least this
now explains why those two are split.
2021-08-04 07:49:53 +00:00
Peter Hutterer
d0060fbddd test: move the client and utils tests over here 2021-08-04 07:45:06 +00:00
Peter Hutterer
99a10c1606 protocol: assert if the loop initialization fails on the connection test
This test needs an environment set up to load everything correctly,
running it directly results in a segfault. Let's make sure we assert on
a NULL loop to make this look slightly more planned.
2021-08-04 15:43:10 +10:00
Wim Taymans
bba8c5daa3 client-node: add port_set_mix_info
Add a new client-node port_set_mix_info event. bump the interface
version to 4 and the event version to 1.

The event is used to send information about the peer object to the
port mixer. This can be used to track what buffers belong to what
peer.
2021-08-03 17:36:11 +02:00
Wim Taymans
62f8ffcfb2 impl-link: put the peer_id in the mix
Place the global id of the peer port in the mix so that we can track
the peer object that way.
2021-08-03 17:33:49 +02:00
Wim Taymans
f4048ae663 protocol-native: fix marshal of add_port
We need to terminate the arguments with NULL.
2021-08-03 17:30:08 +02:00
Wim Taymans
edfa210656 protocol: also return marshal with higher version
The marshaller needs to be of the requested version or newer.
2021-08-03 17:28:01 +02:00
Wim Taymans
d25bb0e20f impl-link: reset state in INIT
When the link state goes back to init, clear any pending operations and
reset our state.
2021-08-02 18:03:26 +02:00
Wim Taymans
da8f835de3 context: after suspend, reevaluate the graph
Reevaluate the graph again after we potentially suspend because of a
rate change because links might become unprepared and need to be
prepared again before the node becomes active.
2021-08-02 17:31:01 +02:00
Wim Taymans
48f7218d03 context: improve debug 2021-08-02 17:30:40 +02:00
Wim Taymans
57cbd2e963 impl-link: handle port states going backwards
When the port state goes backwards (like when suspended) update
the link state accordingly.
2021-08-02 17:28:16 +02:00
Wim Taymans
7d9dde0a1d loopback: pass all latency to the other stream
Latency configured on one streams needs to be passed directly to the
other stream.
2021-08-02 11:46:53 +02:00
Wim Taymans
f71529cbaf context: add missing link prepare
It got removed accidentally in a previous commit, breaking some of the
loopback devices.

Fixes #1472
2021-08-02 10:48:42 +02:00
Peter Hutterer
c9506a8597 doc: basic documentation for the logind media-session module 2021-08-02 08:27:51 +00:00
Peter Hutterer
310b4611c8 media-session: add stub docs for all media-session modules
Same basic approach as for the pipewire modules
2021-08-02 08:27:51 +00:00
Peter Hutterer
6d7e90fca2 meson: add the media-session logind sources to the media-session sources
This way the media_session_sources variable contains all source files we
build (required by the documentation build).
2021-08-02 08:27:51 +00:00
Peter Hutterer
602bed7a98 doc: add minimal documentation for the alsa endpoint SM module 2021-08-02 08:27:51 +00:00
Peter Hutterer
436eefc625 alsa-endpoint: add a FIXME for some missing code
We call setup_alsa_ucm_endpoint() before the
setup_alsa_fallback_endpoint(), but this function always returns
-ENOTSUP. Add a FIXME comment to make this more obvious.
2021-08-02 08:27:51 +00:00
Peter Hutterer
51a177eb6d tree-wide: replace strstr(a, b) == a with spa_strstartswith()
spa_strstartswith() is more immediately understandable.

Coccinelle spatch file:
	@@
	expression E1, E2;
	@@
	- strstr(E1, E2) != E1
	+ !spa_strstartswith(E1, E2)

	@@
	expression E1, E2;
	@@
	- strstr(E1, E2) == E1
	+ spa_strstartswith(E1, E2)

Applied to the tree except for alsa/acp/compat.h because it looks like
that header is still mostly as-is from PA.
2021-08-02 08:24:21 +00:00
Wim Taymans
1ff208875c context: implement dynamic rate
Add a default.clock.allowed-rates property that lists the possible
rates for the graph.

Add node.rate and node.lock-rate properties to suggest a graph rate
and lock the rate.

Collect the largest clock rate from the nodes and if it is allowed,
try to configure it as the graph rate. Only switch rates when the
driver is IDLE or suspended or when we force a rate.

No alternative samplerates are specified because we first need to
work around a common driver bug (cards with 1 cristal need the same
rate for capture as playback) for this to work.
2021-07-30 16:15:34 +02:00
Wim Taymans
8375d7b2d7 impl-node: remove unused function 2021-07-30 11:57:52 +02:00
Wim Taymans
6acf72dc30 impl-node: rework quantum and max_quantum handling
Rework the quantum and max_quantum handling. Work directly with the
latency fractions and calculate the final quantum size until we know
the samplerate.
2021-07-30 11:42:15 +02:00
Wim Taymans
7bec96640c node: add node.lock-quantum property
The graph will not switch quantums when there is an active node
with the node.lock-quantum property set to true.

It can be used to stop certain jack clients from crashing when the
quantum changes.
2021-07-30 11:42:15 +02:00
Peter Hutterer
6989b24148 pulse-server: fix json comma handling
First was never set to false, so we kept skipping the commas.

Fixes 393f3e6d05
2021-07-30 07:29:11 +00:00
Peter Hutterer
b6a8f67764 module-portal: use spa_atoi32 for safer PID parsing 2021-07-30 07:24:24 +00:00
Peter Hutterer
82e427745d doc: structure the portal documentation a bit better 2021-07-30 07:24:24 +00:00
columbarius
06b03aef57 example: check which endian sdl is using
enum spa_video_format uses explicit big endian, while sdl can be either.
We need to adapt the convertion table accordingly.
2021-07-30 07:23:55 +00:00
Wim Taymans
393f3e6d05 pulse-server: align format to pulseaudio json message format
PulseAudio uses json now as the message format. Reformat our output
and parse our input accordingly.
2021-07-29 20:55:44 +02:00
Wim Taymans
08a1ca403f context: add option for soft/hard clock rate changes
Hard rate changes (the default now) makes the graph suspend so that the
driver reopens the device with the new sample rate if possible. This
causes a glitch.

Soft rate changes works as before and just changes the clock rate of
the position area, which makes everything resample things to the new
rate without a glitch.

Sample rate changes can currently still only be triggered by
configuring the settings metadata clock.force-rate
2021-07-29 17:13:54 +02:00
Wim Taymans
65e7402d01 context: log rate changes
We don't need to check, rt.position of a node is never NULL.
Check if the rate changed and log an info message, just like we do
for the quantum.
2021-07-29 16:50:39 +02:00
Wim Taymans
ebf4bf8d83 context: don't follow links to inactive nodes
We don't need to follow nodes that we already visited or that are
inactive so skip them early.

Always try to prepare the link otherwise, not only for passive links
because non-passive links might also be paused because of a suspended
driver.
2021-07-29 16:43:54 +02:00
Wim Taymans
7092effaab media-session: add info when suspending a node 2021-07-29 16:38:33 +02:00
Wim Taymans
158c23b2fd impl-link: prepare link only between active nodes
We only ever want to prepare a link between active nodes so add the
check in the _prepare() functions instead. This also makes it skip
the prepare step for inactive nodes when recalculating the graph.
2021-07-29 16:33:00 +02:00
Peter Hutterer
4496aed5a6 doc: revamp the pipewire-access page
Rewording, linking to the various things, etc.
2021-07-29 16:06:36 +10:00
Peter Hutterer
d1c80183d9 doc: add a media-session header file with the access-flatpak module
This adds a new top-level documentation entry for pipewire-media-session
with a list of modules (currently only one). Similar setup to the
pipewire modules, it allows us to document all modules in-place.
2021-07-29 16:06:36 +10:00
Wim Taymans
4e087caa2b jack: add per client match rules
This makes it possible to configure per client settings such as
latency and later also to lock the quantum for certain clients.

See #1456
2021-07-27 17:57:30 +02:00
Wim Taymans
8e8cb34dc2 protocol: don't place sockets in $HOME
No server will put them there and no client will look for it there.
2021-07-27 10:57:31 +02:00
Peter Hutterer
b70a3dca85 protocol-native: don't initialize sockets in $HOME
Leaving sockets in the home directories is bad form, so let's not do
this.

This effectively requires XDG_RUNTIME_DIR to be set for pipewire to
work - it is set correctly on most setups anyway and on custom setups
this needs to be addressed with a custom environment.

Fixes #1443
2021-07-27 08:23:23 +00:00
Peter Hutterer
49f3d5842e test: replace all spa_assert() macros with spa_assert_se()
These are tests, we never want those to be optimized away.
2021-07-27 10:24:44 +10:00
Wim Taymans
dd5b460daa client-node: remove custom target signal
The target signal is called when the peer nodes are ready and this
node needs to be scheduled. It is the in-process version of the
signal.

Remove our custom version that, just like the default version, schedules
the node implementation but doesn't do any accounting.

Makes pw-top report driver stats for bluetooth devices.

Fixes #1450
2021-07-26 15:46:21 +02:00
Wim Taymans
9f6890e10e pulse-server: improve stream cleanup
First disconnect the stream this ensures no more process events are
called. Then flush out the pending events, then destroy the stream.

Fixes #1451
2021-07-26 11:48:00 +02:00
Wim Taymans
d1905716e4 impl-node: Split ALWAYS_PROCESS and WANT_DRIVER handling
Make a new PW_KEY_NODE_WANT_DRIVER to assign the node to a running
driver. (does not work yet)
Use a new variable to hold the ALWAYS_PROCESS setting and also
update want_driver.
This makes things it a bit more future proof.
2021-07-26 10:38:06 +02:00
Wim Taymans
62fa0823ec modules: virtual sink/sources need driver
Virtual sinks and sources implemented with streams need to be grouped
with a driver node to be able to schedule. We don't have a way to let it
use a default driver so add it to the pipewire.dummy driver.

This fixes stalled pipe and other streams streams.

Fixes #1407
2021-07-26 10:21:44 +02:00
Wim Taymans
16faacec92 pulse-server: don't compare string pointers
We always want to clear the provided blocklist from the properties. The
logic tries to only clear when there was a blocklist but it checks this
by comparing the string pointer to the fallback, which gives a compiler
warning.
2021-07-26 09:39:55 +02:00
Barnabás Pőcze
b6405b761f pulse-server: use sizeof() instead of hard-coding
Use `sizeof("/pid")` instead of hard-coding 5
in the condition.
2021-07-25 15:17:08 +02:00
Barnabás Pőcze
627ef37a77 pulse-server: use pid_t where appropriate
Instead of `int`, use the `pid_t` type to represent
process identifiers.
2021-07-25 15:17:08 +02:00
Barnabás Pőcze
2d27497045 pulse-server: use S_ISDIR()
Use the `S_ISDIR()` macro instead of `S_IFMT` and bitwise operations
to make the code simpler.
2021-07-25 15:17:08 +02:00