Disable bluez5.auto-connect.
It makes PW to try connect to all locally known BT audio devices on
start, which is in general not a good thing to do.
Some BT adapters are not capable of simultaneous audio streaming and
scanning for connections (e.g Raspberry Pi builtin BT, probably more),
so audio stutters until adapter/kernel give up trying to connect to
devices that cannot be reached.
Disabling it makes devices to not reconnect on user VT switch, but also
that we should only do for devices that were connected when logind
switched.
After a timeout, it's possible that something else may have
destroyed the node already. This can happen for example with virtual
sinks that were created from another process.
Fixes: #467
libcamera uses namespaces to sandbox IPA (Image Processing Algorithm)
modules because they are sometimes proprietary binary blobs. The
RestrictNamespaces option in Wireplumber's systemd service breaks this
sandboxing when libcamera is loaded via the libcamera SPA module, so
cameras requiring an IPA do not work.
This commit removes RestrictNamespaces so that the sandboxing works
again. I've confirmed that after this change wireplumber works with
libcamera with an IPA module.
Resolves#466
For Bluetooth LE Audio device sets (e.g. pair of earbuds), bluez5-device
emits "internal" nodes for each individual device, and a combine node
for the device set.
Make the bluetooth monitor to create the combine nodes using
module-combine-stream.
Do some shenanigans to route ObjectConfig events from bluez5-device to
the correct combine node: look for combine nodes associated with device
sets, and put them as managed objects of the Spa devices.
Add support for BLE MIDI devices and local endpoints.
Disabled by default for now, as the feature currently faces some
DBus/SELinux policy issues e.g. on Fedora.
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.
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 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"
Unlike the rest of subcommands, The ID for the clear-default subcommand must be
a setting ID, not a pipewire Object ID. This means we cannot use the parse_id()
and translate_id() helper functions because the setting ID 0 is acceptable, and
the @DEFAULT_AUDIO_SINK@, @DEFAULT_AUDIO_SOURCE@ and @DEFAULT_VIDEO_SOURCE@
strings are not acceptable.
The move to the WpDbus API dropped the "state" property from the plugin,
but left the property enum and use of it in alsa.lua. Remove the enum and
port over the code in alsa.lua.
If a route specifies a set of profiles, it should not be used if the
profile is not in that list.
In findBest/SavedRoute, exclude routes that don't match the active
profile.
Currently in the SPA devices, the device id is different for different
profiles so this condition does not occur, but in general this might not
be so.