Commit graph

370 commits

Author SHA1 Message Date
Ashok Sidipotu
2e23d82779 policy-endpoint-client.lua: fix record with endpoints
The Role traversal of config data to take notice of the
media class as well so that source and sink roles dont
overstep on each other and pick up unexpected endpoints.
2022-01-11 15:31:40 +05:30
Ashok Sidipotu
99dfa7d38a config: update the endpoints config
-Sync endpoints config from AGL.
-Add a capture endpoint.
2022-01-11 15:30:30 +05:30
Julian Bouzas
bee9827ae3 policy-node: find best linkable if default one cannot be linked
Fixes issue with echo cancellation pipewire module.
2022-01-08 15:14:44 +00:00
Julian Bouzas
afe71d7e48 policy-node: schedule a rescan without timeout if defined target is not found
Fixes #146
2022-01-08 06:48:16 +00:00
Julian Bouzas
23fc4d21a9 policy-node: fix typo when finding best target 2022-01-07 10:12:04 -05:00
George Kiagiadakis
3f3c9802d6 create-item: downgrade warning to message
This is expected to be printed if a stream opens and closes
very quickly, like in the case of pipewire-alsa opening the device
for querying formats and then closing it immediately.
2022-01-05 18:13:41 +02:00
Julian Bouzas
6adccbe33d policy-node: always use the default linkable if default nodes module is loaded
If the default nodes module is loaded, and the default node is not found, it
means that there is no valid target for that session item. We only need to
manually find a default target if the default nodes module is not loaded.
2022-01-05 08:57:33 +00:00
Jonas Holmberg
e1602c10c5 policy-node.lua: Fix nil value indexing
Fixes the warning:

[string "policy-node.lua"]:117: attempt to index a nil value (field '?')
stack traceback:
  [string "policy-node.lua"]:117: in function <[string "policy-node.lua"]:109>
2022-01-05 07:04:09 +00:00
George Kiagiadakis
dc50f95910 config: add commented-out "session.suspend-timeout-seconds" option in alsa config
For the sake of discovering this more easily
2022-01-05 08:28:52 +02:00
George Kiagiadakis
03c2a3dfbd suspend-node: use a 5sec timeout by default, to be inline with the docs 2022-01-05 08:28:52 +02:00
Wim Taymans
4896ad0680 json: improve json parsing
spa_json_get_string() will never write more than maxlen.
Use spa_json_parse_stringn() to perform destination length checking.
2022-01-04 16:36:15 +01:00
Wim Taymans
071ad0e43f config: add property for audio.allowed-rates 2022-01-03 16:05:17 +01:00
George Kiagiadakis
64841f5ada config: enable RT on the data thread for bluetooth nodes
Closes #132
2022-01-03 13:36:49 +02:00
Julian Bouzas
a59dc92928 policy: use a scheduleRescan function to avoid unneeded rescans 2021-12-22 16:52:16 +02:00
Julian Bouzas
c6445ed3db create-item: don't register item if failed to activate
Related to #128
2021-12-22 16:27:07 +02:00
Julian Bouzas
22fd4292ab default-routes.lua: reevaluate current profile only for its own routes
Only check the current active profile when some routes changed that are part of
the profile. If some other route changed, just ignore it.
2021-12-07 14:20:31 -05:00
Torkel Niklasson
be7b95cd3c policy-node.lua: Fix si_link activation failure handling
If si_link fails to activate, we got an error saying
"attempt to index a nil value". This fixes the nil value problem
and also changes the warning to an info, since some of our badly
behaved apps can cause this and we don't see any problems resulting
from it.
2021-12-02 15:07:11 +01:00
George Kiagiadakis
69bd1e51ce default-routes: make the default volume configurable 2021-11-30 19:30:25 +02:00
Wim Taymans
703c35cfd4 access-config: add restricted access permissions
When a pulse client connects with TCP, it is given the 'restricted'
access policy. Assign 'rx' permissions for those clients instead of
blocking forever.

See pipewire#1863
2021-11-29 09:25:18 +01:00
George Kiagiadakis
147f235f54 policy-node: don't crash if device.id is not set on a target 2021-11-26 19:57:17 +02:00
Ashok Sidipotu
52980fb770 policy-node: improve default device selection logic
- skip target device if it does not have active/available
routes

Fixes #74
2021-11-26 14:43:04 +00:00
Wim Taymans
efd2458418 alsa: handle the release-requested signal
Handle the release-requested signal by destroying the device and
then calling release.

Fixes pipewire/pipewire#1846
2021-11-23 13:17:29 +01:00
Wim Taymans
c88fbd20e6 Revert "policy-node: Remove direction check"
This reverts commit b6072f4179.

This is not right because when 2 nodes have the same name, there is
no way to know which one to use. It is better to rely on the
PW_KEY_STREAM_CAPTURE_SINK property when capturing from a monitor.
2021-11-23 11:47:08 +01:00
Wim Taymans
83041b0ce2 policy-node: wait for nodes when we become unlinked
If we were linked before but our node is removed, wait until a new node
becomes available instead of failing.

This fixes an issue where there is only 1 sink available and the card
profile is toggeled between pro and stereo. After the profile is
toggled, the sink is removed and the node would be killed with an error
because there is no fallback sink. The fix is similar to the
pipewire-media-session logic.
2021-11-18 15:23:23 +01:00
Peter Hutterer
9208ea051c Fix some typos 2021-11-18 12:09:57 +00:00
Wim Taymans
b6072f4179 policy-node: Remove direction check
Remove the direction check in findDefinedTarget. We already to a
better direction check in canLink().

This fixes the case where a capture stream has the node.target set
to a sink. The directions don't match and the capture stream is not
linked to the monitor ports of the sink. Removing the check triggers
the right logic in canLink() and obs studio can link to monitor
ports again.
2021-11-18 11:46:47 +00:00
Wim Taymans
45fae97036 libcamera: use the new manager object for monitoring 2021-11-15 11:58:14 +01:00
George Kiagiadakis
a743b3f741 policy-node: don't clear peer_id when removing a link that was not for that peer
It's possible that we get multiple links on the same node, ex:

player -> output (output is the selected peer)
player -> pavucontrol

When pavucontrol exits, the peer_id of player must not be cleared,
since the link to the output still exists
2021-11-11 12:08:18 +02:00
George Kiagiadakis
4579488420 policy-node: improve debug messages in findUndefinedTarget() 2021-11-11 11:56:12 +02:00
George Kiagiadakis
eb0500f621 policy-node: fix small issues in last patch (last comment in !253) 2021-11-11 11:42:10 +02:00
Ashok Sidipotu
3122a61761 policy-node: improve target device selection logic
-loop through all the linkable nodes, instead of using default nodes
-implement a priority scheme to pick the appropriate target linkables
-If both nodes support a passthrough format, check the intersection.
 If the intersection is empty and one of the node is passthrough only,
 skip the node as a target
-the logic now closely aligns with the media-session logic

Fixes #75
2021-11-11 09:19:52 +00:00
George Kiagiadakis
07cd52bcb8 policy-node: check target exists before checking if an item is linked to it
Related to #102
2021-11-10 09:26:59 +02:00
George Kiagiadakis
2580b3431b policy-node: grab si.id once in createLink() and reuse it
... and avoid passing a reference to si in the closure
2021-11-09 19:09:39 +02:00
Julian Bouzas
ca7109b37b policy-node: add check to not relink more than 5 times if link with peer fails 2021-11-09 08:18:44 +00:00
Julian Bouzas
d47df77c55 policy-node: lookup the proper peer link when handling linkable
Previously, we were always looking for the first available link on the item,
which could lead to problems if the item had more than 1 link (eg target and
monitor links). Now, we keep the Id of the last target in order to determine if
the item is linked to the proper target when rescanning.
2021-11-09 08:18:44 +00:00
Peter Hutterer
b2a5b6c303 systemd: document the service files for split mode
https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/84#note_1117863
2021-11-09 16:06:12 +10:00
Julian Bouzas
4d5f9591fc policy-node: make sure 'taget.node' property has a valid Id before waiting 2021-11-03 10:37:03 -04:00
George Kiagiadakis
ff9b49064d default-routes.lua: add missing break in best route selection logic
Fixes #86
2021-11-01 12:14:04 +02:00
Julian Bouzas
0ee144a466 scripts: escape semicolon when serializing and parsing array 2021-11-01 10:00:52 +00:00
George Kiagiadakis
51713d309a policy-{node,endpoint-device}: do not hold reference to si_link in closure
This may keep the link alive for longer than expected
2021-10-23 11:02:13 +03:00
Julian Bouzas
04f77a5fbc policy-endpoint-client.lua: refactor based on policy-node.lua 2021-10-21 14:03:15 -04:00
Julian Bouzas
a03995c212 policy-endpoint-device.lua: refactor based on policy-node.lua 2021-10-21 14:03:15 -04:00
George Kiagiadakis
f8ced47a1a policy-node: enforce the direction of the target when linking by node name
When node.target is set to contain a node's name, it is possible to run
into the situation where you have a sink and a source with the same name
(typically the case with module-loopback) and the sink has monitor ports,
so wireplumber may link the stream to the monitor of the sink instead of the
capture ports of the source

With this policy, if a stream really wants to link to the monitor of the sink,
it has to have the "stream.capture.sink" property set or specify the
target by id.
2021-10-19 13:04:58 +03:00
George Kiagiadakis
1bdb8c2fb3 policy-node: don't rescan in the timeout callback if the si was already destroyed 2021-10-18 13:33:07 +03:00
George Kiagiadakis
634f73eb2d policy-node: don't hold a reference to the session item in the timeout callback
... it causes the si to be kept around even after the node is destroyed
2021-10-18 13:30:20 +03:00
George Kiagiadakis
4ab119778a policy-node: when node.target is specified, wait a bit for the target to be available
There is a chance of race condition here in case the client knows which target
it wants to link to, but wireplumber has not yet "seen" this target because
it is getting prepared asynchronously

This may stall for up to 2 seconds clients that start streams with an invalid
node.target property, but then they will be re-routed to the default node
2021-10-15 15:10:41 +03:00
George Kiagiadakis
2a21e005e0 policy-node: avoid searching for existing links if there is no reason
If the item was not already handled or if there is no target,
we don't need to search for existing links... we will not find any

Also, don't remove links or schedule rescan if the node is not eligible
for reconnection... we will delete the node below instead
2021-10-15 15:10:28 +03:00
George Kiagiadakis
b27eccb9f0 policy-node: improve debug messages 2021-10-15 15:06:34 +03:00
George Kiagiadakis
7e0eeb485c restore-stream.lua: do not remove target.node manually
This is now done by the metadata implementation.
Doing this manually causes assertion failures, because then the
target.node is removed before policy-node "unhandles" the associated
session item and it tries to re-link it to the default source/sink
2021-10-15 14:37:49 +03:00
George Kiagiadakis
c444ebaae1 meson: replace deprecated dep.get_pkgconfig_variable() with dep.get_variable() 2021-10-15 12:12:20 +03:00