Commit graph

375 commits

Author SHA1 Message Date
Julian Bouzas
86b80f4603 dbus-device-reservation: show error message when property request fails 2020-07-10 10:36:24 -04:00
Julian Bouzas
b0cab6c4e4 dbus-device-reservation: return if call_finish fails when requesting a property 2020-07-08 13:44:01 -04:00
George Kiagiadakis
e7d6ed4573 si-convert: watch links to the convert node instead of the node's state
there are underlying issues with the state management of the graph,
so it's not a very good idea to rely on it to activate / deactivate
our convert node depending on the links that exist

instead, track the links ourselves and create/destroy the corresponding
links to the target node accordingly; it's a more robust approach

it was also not entirely correct that we would previously configure
the convert node to be a driver (node.driver=true); maybe this caused
the underlying issues in the first place... we don't need it now
anyway, so it's gone
2020-06-29 18:58:34 +03:00
George Kiagiadakis
648b84c1c4 m-node-suspension: suspend only audio & video device nodes
Just like media-session does
JACK nodes should be left untouched
2020-06-29 15:52:09 +03:00
George Kiagiadakis
a3870581fb spa-device / m-monitor: fix pw_proxy leaks reported by pw_core
1. device export proxies must be destroyed manually since they are
   not associated with the WpRegistry
2. the monitors should not disconnect before all WpSpaDevice objects
   are destroyed; remove the manual disconnect call and let GObject
   ref counting do its job (the core will disconnect when its last ref
   count is dropped after the last monitor plugin is destroyed)
2020-06-29 13:05:44 +03:00
George Kiagiadakis
b59ff48156 si-convert: improve node properties for convert nodes
* do not copy the full alsa node properties set
* use a node description that makes the nodes look better in JACK
* use . instead of / as a separator for the node.name, like elsewhere
* add audio.convert spa lib association in the tests that use si-convert;
  previously it used to work because library.name was present in the
  properties copied from the adapter (and it so happens that the adapter
  lives in the audioconvert spa plugin as well ...)
2020-06-29 13:05:44 +03:00
George Kiagiadakis
3bd1a199ed m-monitor: improve node names for JACK
JACK uses : as a separator to distinguish the port name
from the node name, so it ends up doing wrong separations
if we have : in the node name
2020-06-29 13:05:44 +03:00
George Kiagiadakis
ac295b10e3 m-config-endpoint: deactivate gracefully even if not activated
This may happen if the plugins were loaded but not activated
due to some parse error in wireplumber.conf
2020-06-29 13:05:44 +03:00
George Kiagiadakis
826e5e3c46 si-convert: use the clock rate defined in pipewire.conf 2020-06-29 13:05:44 +03:00
George Kiagiadakis
374977f954 m-monitor: reduce string copies and leaks in module_init 2020-06-19 10:30:12 +03:00
George Kiagiadakis
30affd6b55 m-config-endpoint: also remove monitors when a node disappears
previously, we would only remove the endpoint associated with
the node, but not the monitor endpoint...

to implement that, we now store the node's associated session items
in the node's qdata instead of a local hash table, so that we
can store an arbitrary ammount of session items per node
2020-06-18 19:29:35 +03:00
George Kiagiadakis
879c7d2ab9 si-softdsp-endpoint: use the transition's source_object instead of data in callbacks
there is no need to add self in the transition's data,
it's already in source_object
2020-06-18 19:26:30 +03:00
George Kiagiadakis
fb3d5bea5c si-monitor-endpoint: add "endpoint.monitor" property on monitor endpoints 2020-06-17 14:54:20 +03:00
George Kiagiadakis
a1a718f8a1 config-endpoint: create monitors after exporting
This fixes a failure to activate the monitors if we are using
si-adapter directly instead of si-audio-softdsp-endpoint
2020-06-17 14:47:54 +03:00
George Kiagiadakis
aabf6beda7 si-convert: use passive links
Requires PipeWire < 0.3.3 or > 0.3.6 to actually work
2020-06-17 14:44:29 +03:00
George Kiagiadakis
244fa28d17 si-standard-link: allow linking MONO capture clients
In case we have a multi-channel capture device and a mono client,
treat the MONO port as UNKNOWN and let it link with the first
port available on the device

Easy to test with arecord, which by default captures in MONO
2020-06-17 12:55:12 +03:00
George Kiagiadakis
881b45dc4a policy: accept endpoint IDs in node.target
this allows slightly easier testing while every client uses node.target
but it's easier to find the endpoint id than the node id
through `wpctl status`
2020-06-16 19:10:37 +03:00
George Kiagiadakis
2719169810 policy: respect endpoint.autoconnect and don't link if it's false 2020-06-16 17:39:44 +03:00
George Kiagiadakis
d50e32fc47 si-adapter/simple-node-endpoint: propagate node.autoconnect as endpoint.autoconnect 2020-06-16 17:39:25 +03:00
George Kiagiadakis
d07f3df445 m-config-endpoint: allow specifying preferred-n-channels in endpoint.config 2020-06-16 13:31:05 +03:00
George Kiagiadakis
5f9212c344 si-adapter: use the clock rate defined in pipewire.conf 2020-06-15 19:09:04 +03:00
George Kiagiadakis
7bc8302740 m-monitor: connect the monitor core on activation instead of module load time
We have multiple instances of the monitor plugin, but that's ok.
connect/disonnect will not do anything bad if called multiple times

We need to connect later so that the first connection is the one from main().
Otherwise, if there is a connection error, we will see the warning from the
monitor first.
2020-06-15 18:36:33 +03:00
George Kiagiadakis
926ee5ce9f src, modules: set PW_KEY_APP_NAME on all cores 2020-06-15 17:56:05 +03:00
Julian Bouzas
3b4785f1a0 m-config-static-objects: use a local core for all objects 2020-06-12 15:04:36 -04:00
Julian Bouzas
40eb53a290 m-device-activation: enum profiles before activating bluetooth devices 2020-06-12 15:04:36 -04:00
Julian Bouzas
05aeeed90c m-device-activation: always activate alsa devices if no api alsa card property was set 2020-06-12 15:04:36 -04:00
Julian Bouzas
be3045e1f8 m-device-activation: make sure the device properties are valid before activating them 2020-06-12 15:04:36 -04:00
Julian Bouzas
70f76c7fcb m-monitor: use a shared local core for all local objects 2020-06-12 15:04:29 -04:00
Julian Bouzas
53289b9906 m-monitor: allow the monitor module to create multiple devices 2020-06-11 13:50:02 -04:00
George Kiagiadakis
8a0abd4fb8 spa-device: subclass from GObject 2020-06-11 15:05:20 +03:00
George Kiagiadakis
a9edb65eab m-monitor: fix icon name when device.bus is NULL 2020-06-10 18:12:43 +03:00
George Kiagiadakis
8d77793a2a improve some debug logs 2020-06-10 12:53:22 +03:00
George Kiagiadakis
7a486f1f7c impl-node: subclass from GObject
By mistake, WpImplNode was developed by keeping in mind that the proxy
returned by pw_core_export() is a PW_TYPE_INTERFACE_Node, but this
is not true. It's actually a ClientNode...

Unfortunately, making WpImplNode work as if it was a WpNode is
not so easy, especially when it comes to handling params, which
need to be queried syncrhonously on the underlying spa_node.

So, instead of fixing WpImplNode to work as a WpNode, we choose to
disconnect them. This way, WpImplNode will not be used as a proxy
in the registry and the registry will normally create WpNode proxies
instead, making round-trips through the server to change node params.
2020-06-10 11:12:11 +03:00
Julian Bouzas
3add067254 m-device-activation: always activate bluez5 devices 2020-06-08 14:04:57 -04:00
Julian Bouzas
9f39706877 reserve-device: acquire device if it has no owner for at least 3 seconds 2020-06-07 16:28:44 -04:00
Julian Bouzas
cd3401bcb5 dbus-device-reservation: add owner-appeared/owner-vanished signals, and remove acquired callback 2020-06-07 16:28:44 -04:00
Julian Bouzas
c8582d255e reserve-device: don't increment jack_n_acquired if it is 0 and use the updated value when setting data 2020-06-07 16:28:18 -04:00
Julian Bouzas
371e6f90ac reserve-device: clean jack device activation logic 2020-06-05 14:26:06 -04:00
George Kiagiadakis
ed7fa050c5 m-config-endpoint: debug config file matches 2020-06-03 20:28:26 +03:00
Julian Bouzas
3c36f20d23 src: config: add jack.device file and removed jack device module 2020-06-02 12:24:47 -04:00
Julian Bouzas
ef2e892341 m-config-static-objects: add device parser to create static devices 2020-06-02 12:24:47 -04:00
Julian Bouzas
d3cb1bd84d modules: rename config-static-nodes to config-static-objects 2020-06-02 12:24:47 -04:00
George Kiagiadakis
651701a471 endpoint: use the node.name as the endpoint name and add endpoint.description
endpoint.description is now the user-friendly string
we want the endpoint name to be machine-friendly because it's
the identifier that we store in m-session-settings
2020-06-02 17:46:35 +03:00
George Kiagiadakis
3807d95ec5 m-monitor: update node properties to match the ones that media-session sets 2020-06-02 15:51:13 +03:00
George Kiagiadakis
5a0028886b m-config-policy: refactor the target search logic and add debug messages
- fall back to the default logic if node.target is set but it doesn't exist
- use the default endpoint if it is within the [target-endpoint] matches;
  this way we can use a config file to override just the stream name,
  for instance, while still respecting the default endpoint
- prefer use of the lookup methods instead of manual iterations

previously the default endpoint was not respected because our config
files have a [target-endpoint] table..
2020-06-02 13:09:00 +03:00
George Kiagiadakis
e944abbcd5 si-standard-link: associate links with endpoint-links 2020-06-02 13:09:00 +03:00
Julian Bouzas
4212d68d9c m-config-endpoint: show a warning if endpoint failed to activate or export 2020-06-01 20:05:03 -04:00
Julian Bouzas
69dfe0e203 m-device-activation: use wp_core_timeout_add_closure instead of wp_core_timeout_add in reserve node API 2020-06-01 20:05:03 -04:00
Julian Bouzas
3e12d239ef m-device-activation: sync with core before activating to make sure jack-device is exported 2020-06-01 20:05:03 -04:00
Julian Bouzas
2c64dd4476 reserve-device: enable/disable jack-device if audio device is owned/unowned by the JACK server 2020-06-01 20:05:03 -04:00