This is a tricky case where iteration matches the last 2 objects
managed by an object manager. When we remove them while iterating,
the last object is not removed because it takes the place of the first
upon removal (side-effect of g_ptr_array_remove_fast()) and the iterator
skips it.
See #388
For offload SCO, the audio stream should be routed to/from Bluetooth
chipset via ALSA.
To do this, this commit prevent the creation of the sco-source or sco-sink
nodes, and replace them by loopback nodes.
It's up to the platform to correctly the the route to the Bluetooth chipset
ALSA entries.
When the loopback node state change to running, the script also call the
bluetoothOffloadActive param of the device to start/stop the SCO link.
This adds three meson options to enable or disable building daemon, tools, and modules.
Building the daemon or tools depends on building the modules, and disabling modules without disabling
the other two will result in meson giving an appropriate error.
These new options will let users skip building and installing unneeded items when they are not needed,
e.g. when only using the C API in another application.
When a plugin activation fails, it is supposed to fail the wireplumber init. To
be precise it fails the wp init transition and the init transition objected is
freed.
However the subsequent plugins added(as reported by the plugin object manager)
trigger double free, prevent this by avoiding calling the activation callback
after the transition object is freed.
When a new camera is added, go over all clients and update the
permissions for the new camera.
This makes it possible to plug in a new camera and make it visible to
the portal apps.
entities here are the device cards and the device nodes.
sometimes null device objects are reported by monitor, this results in lua
exceptions handle this use case.
Fixes#361
If a link is not activated, don't remove it. Instead, schedule a rescan
when a link activates, so that we'll handle it once it does.
This is a workaround for some problems, see
https://github.com/Audio4Linux/JDSP4Linux/issues/74
However, the underlying cause is not understood.
This adds information about the name of the pkg-config package provided by wireplumber
as well as which header a C program needs to include to use the library to the
generated .gir file.
The node priorities are difficult to configure for users, and are
not necessarily meaningful for them.
When there is no configured default node, or the configured default node
does not exist, prioritize previously configured default nodes over the
automatic node priorities.
Keep track of a stack of previous configured nodes, and update the stack
when the configured node changes.
Don't include profile name in node names for HFP and A2DP. Instead,
append the id number from the spa.bluez5 backend. The backend takes
care of choosing the unique id numbers appropriately.
This makes the sink/source names the same for A2DP and HFP. This allows
outputs directed to the Bluetooth device to remain there when switching
profiles between A2DP and HFP, without needing to determine the new
sink/source name.
SiLink should not wait for WpLinks becoming ESTABLISHED, before
activation. That flag shows whether a link has moved away from the
"init" state, however, links to e.g. Pulseaudio corked streams can stay
in "init" state until uncorking. This causes trouble for policies,
which needlessly wait for such links to establish.
The WpLink objects may also be kept alive by other referents, and
just unrefing them does not necessarily destroy the PW objects.
Activate SiLink even if the WpLink is still in "init" state. It's enough
that the link otherwise successfully establishes.
At dispose time, explicitly request destroying the WpLinks that were
created by the SiLink, to ensure they are removed even if there's
something else referring to them.
SiLink activation might be delayed indefinitely under some error
conditions. Currently, policy-node schedules a rescan when it sees a
non-activated link on a stream to be moved, which produces busy loop if
the si-link doesn't activate.
Instead of rescheduling on non-active si-links, just remove and emit a
warning. The si-link then gets removed once it gets activated.
Reproducer:
1. Play audio from Rhythmbox and pause.
2. Switch default output with pactl between two different outputs
3. Links from the paused stream stay at "init"