Limit the amount of channels we send to a client to 32 because this
is the pulseaudio limit.
This means that only the first 32 channels are accessible from the
pulseaudio API.
Fixes#1033
Setting the channel property should create as many channels as
requested, not just the number from the default channel map.
If no channel_map is set, use the default one if the channels match
or use one with unknown channel layout otherwise.
Check the configured channels against the channel map and error
if there is a mismatch.
Simple jobs that run a standard meson build process, once with no options
selected, once with a matrix of various options explicitly enabled or
disabled. This should pick up any accidental build errors.
The CI_JOB_NAME now includes brackets which cause issues in file paths, so
we use the CI_JOB_ID instead as build dir.
Option 'pipewire-alsa' is a meson feature and defaults to 'auto'. This is
different to 'disabled', so on systems where alsa's deps weren't available
we would still end up trying to build. Switch to checking alsa_dep.found()
instead.
Don't escape the Spa:String:JSON types in the metadata as it is
supposed to be valid JSON that can be output directly. We might want
to reparse and reformat it later to be sure.
First try to load the PIPEWIRE_CONF_NAME environment file, then
fall back to the application configured value (instead of client.conf)
and then fall back to client.conf.
Do the check for the client event mask in only one place where we
are actually going to send the event. This avoids sending events to
clients that did not register them.
Rework some of the event handling when the manager emit an
add/remove/change event. Make it possible to send multiple events, like
when a sink changes, also emit a change for the monitor.
See #1042
The simple protocol listens on a socket, creates a new pw_client for
each connected client and reads/writes raw audio bytes on the
socket. Incomming bytes are copied to a playback stream, outgoing
bytes are copied from a capture pw_stream.
Fixes#954
When the session becomes inactive (eg. user on active seat switched),
udev may make devices inaccessible. In this case, pipewire should give
up the devices and close their open file descriptors.
In case headset fails to reply with AT+BCS to the codec selection
following AT+CMER, try to retry the codec selection, and if it still
fails, assume the headset is configured for CVSD.
When current user is no longer active on the seat, unregister the bluez
handler. This disconnects all bluez devices.
When the user becomes active on a seat, start bluez monitor again.
This will also reconnect devices.
Some properties don't have type info and then we want to skip
constructing the pod instead of crashing. This makes it possible to
cut and paste the output of pw-dump Route into pw-cli s <card> Route,
for example.
Add an entry in the config file for default format and channel map.
Use the defaults in the server_info request
Use the defaults for the default channels and map in the modules.
priority.session is meant to be used to set routing priorities.
priority.driver is meant to be used by the scheduler to select what
nodes is best for driving the graph. This usually depends on the
hardware quality and the use case (Pro Audio devices are likely
to be used as driving the graph).
See #1028