This starts breaking up the giant monolith that is the pulse-server.c
code into more manageable chunks by trying to split the module code into
individual compilation units.
The pipewire.pot file is made with 'meson compile pipewire-pot' by
scanning the files in POTFILES.in.
The .po files were generated with 'meson compile pipewire-update-po',
on .po file per entry in LINGUAS.
The .po files were filled with:
'msgmerge -N $pulseaudio/po/$lang.po po/$lang.po -o po/$lang.po' to
get a decent set of translations for all the ACP strings.
Run 'LANGUAGE=nl make run' to start the server in a language,
test with 'LANGUAGE=nl pavucontrol'
Use the file names as-is in meson.build (which makes it possible to grep for
them easily) and use the various string methods to extract the section from
the file name and compile the intermediate xml file.
All files in spa/include are being installed anyway, so to avoid having to
list each file one-by-one let's use meson's install_subdir() to install all
of them in one go.
Let's use a template for the generic case of "building on Fedora"
and a named job for the specific job itself.
The real change here is the artifact handling: by default the artifacts
collected for a .build job are only the meson build logs.
The build_on_fedora job collects the installed files as well (to be used in
the pages job later).
Regression introduced in 7e741ef983, the
change of BUILD_ID in that commit caused the pages job to break.
Fix it by relying on the same path expansion we use for the artifacts in the
parent job instead of a hardcoded path.
spa/plugins/alsa/acp/channelmap.h:466:9: warning: format not a string
literal and no format arguments [-Wformat-security]
466 | pa_snprintf(s, l, _("(invalid)"));
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.