Home | About | Community | Download | Documentation | Planet |
PulseAudio 14.0 release notes
- Notes for end users
- Significant routing changes to default sinks/sources
- Changing the default sink moves streams from the old default sink to the new
- Moving a stream to the default sink removes the "manually routed" status of the stream
- If a sink changes status to available, streams that prefer that sink move there automatically
- The same changes have been applied to the source stream routing
- Workaround for GNOME Sound Settings' stream routing behaviour
- module-rescue-streams is deprecated, functionality moved to the core
- New rescue-streams option in daemon.conf
- Automatic switching to HDMI is now disabled by default
- Better support for some USB gaming headsets
- Flat volumes are now disabled by default
- The RAOP sink can be configured to automatically reconnect on connection failures
- Separate sink_channels and source_channels for module-jackdbus-detect
- Improved support for ALSA UCM
- Support for ALSA mixer controls with non-zero index
- It's now possible to set intended roles for devices in the ALSA profile configuration
- Ports now have a type associated with them
- Mappings have a new "description-key" option in the ALSA profile configuration
- New xauthority argument for X11 modules
- module-null-sink's compressed format support can now be configured at run-time
- The enable-lfe-remixing option in daemon.conf was split into remixing-produce-lfe and remixing-consume-lfe
- New channel_map argument for module-raop-sink
- Significant routing changes to default sinks/sources
- Notes for application developers
- Notes for packagers
- New GStreamer-based RTP implementation
- qpaeq switched from Python 2 to Python 3
- Compile-time option to forget pre-14.0 stream routing
- The install path of the ALSA configuration files is now configurable
- GNU gettext minimum version requirement bumped from 0.19.3 to 0.19.8
- Heads-up: dropping autotools build system
- Heads-up: dropping EsounD support is considered, tell us if you still need it
- Heads-up: dropping GConf support
- git shortlog
Notes for end users
Significant routing changes to default sinks/sources
Changing the default sink moves streams from the old default sink to the new
Previously, when the default sink changed, new streams were routed to the new default sink, but existing streams stayed on the old sink. Now streams are moved from the old default sink to the new one as well. This doesn't apply to streams that have been manually moved, so per-stream routing is retained.
Moving a stream to the default sink removes the "manually routed" status of the stream
When a stream is playing to a non-default sink and the user moves it to the current default sink, that is now interpreted as a request to remove the "manually routed" status from the stream, so from that point on the stream will automatically move when the default sink changes. Previously it was a problem that if an application was once moved manually, the choice was remembered permanently and there was no good way to clear the manual routing choice.
If a sink changes status to available, streams that prefer that sink move there automatically
Let's assume a situation where a stream has been moved manually to a sink, and then the sink is removed or changes status to unavailable (this can happen for example when headphones are unplugged). Let's also assume that some other sink is the default sink. The stream is now automatically moved to the default sink in this situation, and when the unavailable sink becomes available again, the stream moves back to that.
The same changes have been applied to the source stream routing
A similar logic is applied to source streams. Changing the default source will move streams from the old to the new default source, manually moving a stream to the default source will remove the "manually routed" status and streams will be moved to the preferred source if it becomes available.
Workaround for GNOME Sound Settings' stream routing behaviour
When changing the output device in GNOME Sound Settings, it tries to improve the user experience by moving existing streams to the selected device. It also changes the routing database so that also applications that aren't currently running get routed to the new device, so all applications behave consistently. To PulseAudio this looks like all applications have been manually moved by the user, which causes problems when the default device changes, because manually moved streams don't follow default sink changes.
Despite those problems, it made sense for GNOME Sound Settings to do this, because the alternative was considered worse: streams didn't move when changing the default device. Now that PulseAudio handles the automatic stream moving, there's no more justification for doing manual stream moving and stream database modifications in GNOME Sound Settings. We can't remove the functionality from GNOME Sound Settings when updating to the new PulseAudio version, but we wanted to solve this anyway without waiting for a new GNOME version, so we ended up adding some special code that ignores the stream routing changes when the changes come from GNOME Sound Settings.
module-rescue-streams is deprecated, functionality moved to the core
module-rescue-stream doesn't do anything any more, and is deprecated. When a device is removed, the module used to move streams on that device to some other device, but that is now handled by the core, so the module has nothing to do. If you have custom configuration that loads module-rescue-streams, you should remove the module from the configuration. Having it in the configuration doesn't do harm, but there will be warnings in the PulseAudio log.
New rescue-streams option in daemon.conf
After moving the rescue functionality to the core, stream rescuing could no longer be disabled. Therefore a new boolean option rescue-streams was added to daemon.conf which is true by default. Set it to false to disable stream rescuing.
Automatic switching to HDMI is now disabled by default
PulseAudio 13.0 started to switch output to HDMI automatically when module-switch-on-connect was loaded (upstream PulseAudio doesn't load it by default, but some distributions do). This change was not intentional, and caused very annoying behaviour in cases where waking up the monitor from sleep appears as a plug-in event in ALSA. Now module-switch-on-connect has a configurable blacklist, which by default prevents switching to HDMI devices. The blacklist is configured with a module argument, named "blacklist", which takes a regular expression that is matched against sink and source names. The default blacklist regular expression is "hdmi". To disable all blacklisting, you can pass "" (empty string) as the module argument value.
Better support for some USB gaming headsets
Custom configuration was enabled for a few headset models:
- HyperX Cloud Orbit S
- LucidSound LS31
- Razer Kraken Tournament Edition
- SteelSeries Arctis 5 (2019 edition)
- SteelSeries Arctis Pro (2019 edition)
PulseAudio now creates separate stereo and mono (voice) sinks for these headsets.
Flat volumes are now disabled by default
Flat volumes have always been a controversial feature in PulseAudio. With flat volumes the stream volumes control also the sink volume. In the simple case of only one stream, the stream and the sink volume are always the same. In case of multiple streams, the sink volume is set to the maximum of the stream volumes. The purpose of this is to simplify the volume control of an application: the full volume range is always available via the application volume slider, so there's no need to think about the sink volume. In practice, however, this has caused more harm than good (the worst problem is that some applications automatically set their stream volume to 100%, causing the audio to be played at the maximum volume that the hardware can produce), and most large distributions have patched PulseAudio to disable flat volumes by default. Now that patching won't be needed any more.
Flat volumes can be enabled by setting "flat-volumes = yes" in ~/.config/pulse/daemon.conf.
The RAOP sink can be configured to automatically reconnect on connection failures
When a RAOP sink is created by manually loading module-raop-sink (rather than automatically by module-raop-discover), it's now possible to keep the RAOP sink present even if the connection to the remote device is lost. This is done by setting the "autoreconnect=true" module argument.
The RAOP sink acts as a "null sink" (discarding audio played to it) during the time the connection is down.
Separate sink_channels and source_channels for module-jackdbus-detect
Previously module-jackdbus-detect had only a single channels argument, which was used for configuring how many channels the JACK sink and source would have. New sink_channels and source_channels arguments have been added that allows configuring different channel count for output and input.
Improved support for ALSA UCM
PulseAudio now supports hardware volume when using ALSA UCM. Hardware mute is supported with the PlaybackMasterElem and CaptureMasterElem options but not yet with PlaybackSwitch or CaptureSwitch.
It's now possible to use multiple sound cards with the same name simultaneously with UCM. An example of this situation is having multiple identical USB sound cards plugged in. This requires alsa-lib version 1.2.1 or higher.
There are many other improvements and fixes too.
Support for ALSA mixer controls with non-zero index
On some hardware there can be multiple ALSA mixer controls with the same name, in which case they're distinguished by their index. PulseAudio has so far always used only the control with index 0, now it's possible to write configuration for hardware that requires using non-zero indexes. Wherever a mixer control name could be used before, it's now possible to append the index to the name using a comma as the separator. For example: Headphone,1
.
It's now possible to set intended roles for devices in the ALSA profile configuration
There's a new intended-roles
option in the [Mapping]
section of the profile-set configuration files. The new option can be used to set the device.intended-roles
property for the sink or source that the mapping corresponds to. Currently we use this to tag the voice sink of gaming headsets.
Ports now have a type associated with them
The port type tells what kind of device it corresponds to (speakers, headphones, microphone etc.). The type is automatically set for bluetooth and ALSA UCM devices, for non-UCM ALSA devices it's configured with the type
option in the [General]
section of the path configuration files. pactl list cards
shows the type in the port list.
Mappings have a new "description-key" option in the ALSA profile configuration
There's a new description-key
option in the [Mapping]
section of the profile-set configuration files. Usually the mapping description is looked up using the mapping name as the key, but the description-key
option can be used to set some other key. This is currently used in the USB gaming headset configuration, which defines separate mono and stereo mappings for chat audio (some headsets support stereo and some support mono audio). Those mappings have different names, but they should use the same description, which is why the description-key option was added.
New xauthority argument for X11 modules
The X11 modules (module-x11-bell, module-x11-cork-request, module-x11-publish and module-x11-xsmp) now accept the "xauthority" module argument. It's used by the start-pulseaudio-x11 to pass the value of the XAUTHORITY
environment variable to the PulseAudio daemon so that the daemon can set the same environment variable in its own environment. This is required in some systems to make it possible for the X11 modules to connect to the X11 server.
module-null-sink's compressed format support can now be configured at run-time
In the previous release it became possible to configure module-null-sink to accept compressed formats. That had to be done with module arguments when loading the module, now the configuration can be done at any time using "pactl set-sink-formats" or pavucontrol (pavucontrol 4.0 has a bug that prevents this from working, though, but the next pavucontrol version will have that bug fixed).
The enable-lfe-remixing option in daemon.conf was split into remixing-produce-lfe and remixing-consume-lfe
Splitting the option into two allows to separately control the use of the lfe channel in upmixing and downmixing. The old enable-lfe-remixing option is deprecated and should be replaced. If the old option is encountered, both new options will be set to the value of enable-lfe-remixing.
New channel_map argument for module-raop-sink
The channel_map module argument allows setting a different channel map for the RAOP sink than the default map that is configured in deamon.conf.
Notes for application developers
pa_mainloop_prepare interprets the timeout argument as microseconds again
PulseAudio 13.0 accidentally changed the pa_mainloop_prepare
timeout argument interpretation from microseconds to milliseconds. That change is now reverted - we apologize for this breaking API change. We hope reverting the change will cause less harm than keeping the code from 13.0.
New availability_group and type fields in the port info structs
The pa_sink_port_info, pa_source_port_info and pa_card_port_info structs have two new fields: availability_group (string) and type (enum). These were added in order to provide a better API for the "What did you plug in?" dialog that at least GNOME shows when a device is plugged in to a connector that supports headphones, headsets and microphones but doesn't provide information about which one was plugged in. The availability group is used to mark ports that share jack detection with each other. The type field can be more generally useful if applications want to know the type of a device.
New macros: PA_LIKELY(), PA_UNLIKELY(), PA_CLAMP() and PA_CLAMP_UNLIKELY()
The "likely" macro provides a hint for the compiler that the condition is usually true, similarly "unlikely" is a hint that the condition is usually false. The clamping macros change a value to the given range if it's originally outside the range. The reason these were added to the public API was that we already had the PA_CLAMP_VOLUME() macro in the API, but it couldn't actually be used, because it needed the PA_CLAMP_UNLIKELY() macro that wasn't available to applications before.
Notes for packagers
New GStreamer-based RTP implementation
module-rtp-send and module-rtp-recv can now use GStreamer to implement the RTP protocol. The GStreamer backend is disabled by default, and should be considered experimental for this release, and testing is welcome (use --enable-gstreamer
with Autotools or -Dgstreamer=enabled
with Meson).
The purpose of using GStreamer is to make it easier to add more advanced RTP features in the future such as RTCP, non-PCM audio, and potentially synchronized playback.
This adds new dependencies: gstreamer-1.0
, gstreamer-app-1.0
and gstreamer-rtp-1.0
. GStreamer plugins from the gst-plugins-good
package are required as well for the udpsrc
and rtpbin
elements (the plugins are a run-time dependency, there is no compile-time check for these).
qpaeq switched from Python 2 to Python 3
The Python interpreter that qpaeq invokes was switched from python to python3. Also, qpaeq doesn't import the SIP module any more (it wasn't used anyway), so if your qpaeq package currently has an explicit dependency to python-sip, that can be dropped. (There's still an implicit dependency to SIP via PyQt, though.)
Compile-time option to forget pre-14.0 stream routing
A new --enable-stream-restore-clear-old-devices (Autotools) or -Dstream-restore-clear-old-devices=true (Meson) build option was introduced which instructs pulesaudio to discard pre-14.0 stream routing information. This was necessary because, prior to 14.0, GNOME sound settings used to manipulate the stream-restore database when the default device was switched. The resulting old settings can conflict with the current changed routing logic and can lead to inconsistent stream routing. See https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/832. The option is disabled by default because it will cause data loss but should be enabled in distributions using GNOME.
The install path of the ALSA configuration files is now configurable
Previously the ALSA configuration files were always installed to $datadir/pulseaudio/alsa-mixer
, now the location can be customized using the -Dalsadatadir
Meson option or the --with-alsa-data-dir
Autotools configure option. At least Arch uses this to install the files to /usr/share/alsa-card-profile
to make it easier to share the files between PulseAudio and PipeWire.
GNU gettext minimum version requirement bumped from 0.19.3 to 0.19.8
A newer gettext version was needed for distcheck to work with a checked-in pulseaudio.pot.
Heads-up: dropping autotools build system
Given that the meson build system runs much faster and is now is more-or-less on par with the autotools build, we will be dropping support for the autotools build in 15.0. Please let us know if you have a dependency on autotools for any reason.
One difference from Autotools is that the --disable-neon-opt
option for disabling NEON optimizations doesn't have a counterpart in Meson due to how Meson's NEON detection works. NEON will always be enabled if the compiler supports it, but even if the target machine doesn't support NEON, that shouldn't be a problem, because PulseAudio disables NEON at run-time if the processor doesn't support it.
Update 2020-11-28: With Meson the database files in ~/.config/pulse/ have different names than with Autotools, which means that when switching to Meson, user settings will be forgotten. This needs to be fixed, the bug is tracked here: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1062
Heads-up: dropping EsounD support is considered, tell us if you still need it
EsounD has been obsolete for over 10 years, but PulseAudio still supports EsounD applications by implementing the EsounD protocol. We plan to drop all EsounD functionality in 15.0, because probably nobody needs it. Please tell us if you still use an application that requires EsounD support.
Heads-up: dropping GConf support
PulseAudio 12.0 introduced module-gsettings, which superseded the old module-gconf, but module-gconf was kept around for making transitioning easier. Both modules are used (or at least supposed to be used) only by paprefs to save its settings, which requires module-gconf prior to version 1.0 and module-gsettings from version 1.0 onwards. The plan is to remove module-gconf in PulseAudio 15.0.
git shortlog
Alexander E. Patrakov (1): man: Deprecate the enable-remixing option Alexander Patrakov (1): Split the enable-lfe-remixing setting into two Arun Raghavan (28): rtp: Make init return a value for success/failure rtp: Don't use cookie for SSRC rtp: Drop support for non-L16 media rtp: Move MTU handling to the RTP implementation rtp: Hide RTP implementation details from module-rtp-* rtpoll: Separate out before/after/work callback userdata rtp: Add a GStreamer-based RTP implementation rtp: Add some logging to know what backend is being used switch-on-connect: Fix warning on discarded const qualifier alsa-ucm: Support Playback/CaptureVolume gitlab: Make container updates automatic build: Bump soversion for libpulse ci: Update for changes in CI template ci: Go back to using CI templates from master alsa-mixer: Add an explicit profile-set for Audigy devices build-sys: Bump soversions build-sys: Add doxygen/meson.build to distfiles build-sys: Bump gettext dependency Revert "alsa-mixer: support up to 8 channels per mixer element" build-sys: meson: Add libm dep to raop module rtp: gstreamer: Don't count on buffer DTS for capture time rtp: gstreamer: Account for rounding errors in RTP timestamp conversion build-sys: Set the GStreamer RTP backend to disabled by default sink, source: Skip filter streams while changing default sink/source switch-on-port-available: Switch to headphones on unknown availability module-alsa-card: Drop availability groups with only one port Revert "mainloop: fix timeout assignment in pa_mainloop_prepare" build-sys: Bump libpulse soversion Balázs Meskó (1): Translated using Weblate (Hungarian) Baurzhan Muftakhidinov (1): i18n: Add initial Kazakh translation Ben Buchwald (2): module-jackdbus-detect: Allow omitting channels argument module-jackdbus-detect: Separate sink/source channels arguments Daniil Kovalev (1): Fix memory leak in context_free Dave Chiluk (1): alsa-mixer: add support for LucidSound LS31, and create usb-gaming-headset profile David Heidelberg (2): meson: convert post-install.sh to python meson: convert to install_headers Dusan Kazik (1): Translated using Weblate (Slovak) Eero Nurkkala (3): alsa-ucm: disallow null mdev argument into pa_alsa_open_mixer_by_name() tests: hashmap-test.c: fix memory leak tests: cpu-remap-test.c: fix memory leaks Emanuil Novachev (1): Translated using Weblate (Bulgarian) Emilio Herrera (1): Translated using Weblate (Spanish) Felipe Sateler (2): qpaeq: Drop unused imports qpaeq: use python3 instead of python 2 Felix Yan (1): shell-completion: zsh: Correct a typo Geert Warrink (1): Translated using Weblate (Dutch) Georg Chini (5): virtual sources: Propagate asyncmsgq change after source-output move sink-input, source-output: Fix stream rescue if a move fails daemon.conf: Add boolean rescue_streams parameter sink, source: Fix stream rescue from sinks or sources without port stream-restore: Restore preferred device for new streams Göran Uddeborg (1): Translated using Weblate (Swedish) Hugo Osvaldo Barrera (1): Delete .travis.yml Hui Wang (19): sink-input: change bool save_sink to char *preferred_sink sink-input: add a new API pa_sink_input_set_preferred_sink sink-input: clear the preferred_sink if it is default_sink core: move sink-inputs conditionally when update default_sink sink: move streams to new appeared sinks if they prefer these sinks device-port: moving streams due to changing the status of active_port sink: move the streams to the default_sink when the sink is unlinked stream-restore: skip entries setting action from gnome-control-center source-output: change bool save_source to char *preferred_source source-output: add a new API pa_source_output_set_preferred_source source-output: clear the preferred_source if it is default_source core: move source-outputs conditionally when update default_source source: move streams to new appeared sources if they prefer these sources device-port: moving streams since active_port on source changes status source: move the streams to the default_source when the source unlink stream-restore: skip entries set on source from gnome-control-center alsa-mixer: store the ucm_device with the order of their priority alsa: make the unsuspend more robust alsa: adjust ucm sink/source priority according to ports priority Igor V. Kovalenko (9): module-stream-restore: log error writing volume/mute/device entry to database module-stream-restore: check if dbus entry exists in dbus_entries map before creating it device-port: fire port available changed hook after streams are moved build-sys: meson: adjust path to gsettings-helper runing from build tree module-bluez5-discover: avoid use after free on de-init pactl: explicitly print if port availability is unknown i18n: Update pulseaudio.pot module-alsa-card: Add debug logging if availability group was pruned switch-on-port-available: Add logging for port availability group Jan Alexander Steffens (heftig) (5): autotools: Put module-tunnel-source X11_CFLAGS into CFLAGS instead of LDFLAGS meson: Define TUNNEL_SINK for module-tunnel-sink build-sys: meson: Fix detection of SYS_memfd_create meson: Add missing thread_dep to atomic-test build: Make alsadatadir configurable Jarno Suni (2): shell-completions/bash: Add pactl set-default-sink and set-default-source shell-completion: Do not use 'awk -e' in bash completion Jaroslav Kysela (40): alsa-ucm: use ucm2 name for the direct card index open alsa-ucm: add mixer IDs to ucm_items alsa-mixer: handle the index for ALSA mixer element identifiers alsa-mixer: improve alsa_id_decode() function alsa-ucm: use the correct mixer identifiers as first alsa-ucm: add support for master volume alsa-ucm: split correctly JackHWMute device names alsa-ucm: fix parsing for JackControl alsa-ucm: add comments to ucm_get_mixer_id() alsa-ucm: validate access to PA_DEVICE_PORT_DATA() alsa-ucm: parse correctly the device values alsa-ucm: do not try to use UCM device name as jack name by default alsa-util: do not try to guess the mixer name from the PCM name alsa-ucm: add control and mixer device items alsa-ucm: get the mixer names from ucm, don't guess alsa-ucm: use the proper mixer name for ucm pcm sink/source alsa-mixer: handle interface type (CARD,PCM) for mixer element lookups alsa: rewrite mixer open/close, cache mixer accesses in probe alsa-ucm: add support for HDMI ELD alsa-mixer: do the quick card number lookup to save mixer instances alsa-mixer: improve check for the empty path set for sink/source alsa-ucm: allow to set profile priority from UCM value alsa-ucm: correct the channel default logic (stereo) alsa ucm: do not assign JackHWMute when JackControl is missing for the UCM device ucm: fix the port / ucm device activation on boot alsa sink/source: fix the mixer initialization device-port: introduce available_group member device-port: add type member protocol: describe v34 (available_group, port type) alsa-ucm: set available_group (use jack name) alsa: legacy card - set available_group alsa: legacy card - implement device port type parser and assignment alsa ucm: set device port type pactl: print device port type and available group ucm: add possibility to skip the UCM card completely (Linked) alsa: mixer - reorder the type field in path parser alsa: fix analog-input-microphone-headset device type alsa: fix type for legacy hdmi devices alsa-mixer: support up to 8 channels per mixer element alsa: move the exceptionally large value errors from error to debug level Jaska Uimonen (1): alsa-ucm: Fix volume control based on review Jean-Baptiste Holcroft (1): Translated using Weblate (French) Josh (1): alsa-mixer: add support for SteelSeries Arctis Pro 2019 headset Juliano de Souza Camargo (1): Update Portuguese translation Kai-Heng Feng (3): alsa: Skip resume PCM if hardware doesn't support it alsa-mixer: Recognize USB audio jack mixer module-alsa-card: Set a minimum profile priority if it's not set Karl Ove Hufthammer (1): Translated using Weblate (Norwegian Nynorsk) Khem Raj (1): remap/arm: Adjust inline asm constraints Krzysztof Stasiowski (1): alsa-mixer: Add support for SteelSeries Arctis 5 2019 headset Laurent Bigonville (2): alsa-mixer: Add the ability to pass the intended-role to the mapping alsa-mixer: Set the intended-role of Steelseries Arctis 5/7 headset as phone Libin Yang (2): core-subscribe: add PA_SUBSCRIPTION_EVENT_CARD in dump_event device-port: queue CARD CHANGE event before update default sink Marc Ranolfi (1): card-restore: prevent segfault caused by 'restore_bluetooth_profile=true' Michael Pivonka (1): alsa-mixer: Add Razer Kraken Tournament Edition USB headset Milo Casagrande (2): l10n: Update Italian translation Translated using Weblate (Italian) Milo Ivir (1): Translated using Weblate (Croatian) Nick Moriarty (1): Permit root-owned home directory Oğuz Ersen (1): Translated using Weblate (Turkish) Pali Rohár (5): bluetooth: Implement reading SO_TIMESTAMP for A2DP source bluetooth: Print SO_TIMESTAMP warning for SCO source only once bluetooth: Ensure that only one A2DP codec is registered to bluez bluetooth: policy: Remove BlueZ 4 related code alsa: Fix compile warnings Peter Levine (1): atomic: Explicitly cast void* to unsigned long Peter Meerwald (1): macro: Move PA_LIKELY()/PA_UNLIKELY(), PA_CLAMP()/PA_CLAMP_UNLIKELY() to pulse/gccmacro.h Philip Withnall (1): daemon: Add --log-target=journal to pulseaudio.service Piotr Drąg (1): Translated using Weblate (Polish) RODRIGUEZ Christophe (1): raop: Allow channel map module argument Rafael Fontenelle (3): i18n: Update Brazilian Portuguese translation Update Brazilian Portuguese translation Update Brazilian Portuguese translation Ralph Seichter (1): macos: Add missing import statement Rasmus Thomsen (1): meson: link libintl if it's not provided by libc Rickie Schroeder (1): start-pulseaudio-x11: fix KDE version check Rosen Penev (2): modules: fix wrong formats under 32-bit raop-crypto: add missing header Ryszard Knop (1): switch-on-connect: Add blacklisting Sanchayan Maity (2): modules: rtp-gstreamer: Fix RTP sound lag rtp: Fix sending of small packets Sebastian Dröge (3): rtp: Use yes/no in configure instead of 1/0 rtp: Use udpsink instead of fdsink for the GStreamer RTP implementation rtp: Properly timestamp buffers in the GStreamer sender pipeline Sebastien (1): Update configure.ac to fix the enable_gstreamer summary StefanBruens (1): raop: Send initial timing packet to prime UDP connection tracking Taahir Ahmed (1): Add a basic test suite for pa_hashmap Tanu Kaskinen (56): Update NEWS alsa-mixer-path-test: Hide unused functions when building with Meson daemon-conf: disable flat-volumes by default null-sink: allow clients to configure the supported formats alsa-mixer: recognize the "Speaker Jack" control man: remove outdated information about real-time scheduling gitlab: explain the container image tag better stream: clarify the meaning of NULL device core-util: Handle zero-length volume string switch-on-connect: Blacklist HDMI devices by default virtual-source: Don't process the rewind during requesting it virtual-surround-sink: Use correct sample spec with memblockq sink, source: Fix inaccurate log message alsa: Document that mixer elements can be identified by a combination of name and index ucm: Don't log errors during normal operation protocol-native: Fix error code i18n: Import Bulgarian translation from fedora.zanata.org i18n: Merge Catalan translation from fedora.zanata.org i18n: Replace po/ja.po with the Fedora Zanata version i18n: Replace po/es.po with the Fedora Zanata version i18n: Add pulseaudio.pot to version control meson: Remove libpulse dep from libpulsecore Point to SupportedAudioFormats wiki page where appropriate thread-mainloop: Extend the locking documentation a bit stream-restore: Drop the version field from the entry struct stream-restore: Fix a potential crash in pa_namereg_is_valid_name() stream-restore: Forget pre-14.0 stream routing raop-sink: Fix compiler warnings sink, source: Use the global configuration for the avoid_resampling default man: Explain the limitations of "pulseaudio --check" alsa-ucm: Fix NULL pointer handling i18n: Update pulseaudio.pot build-sys: meson: bump protocol version remap_neon: use register r12 instead of r7 device-port: send sink and source change events when availability changes build-sys: Build atomic-test only if pthread_setaffinity_np() is available meson: Build atomic-test udev: fix too long card name with HyperX Cloud Orbit S gitignore: Ignore hashmap-test build-sys: Configure doxygen.conf.in a bit differently meson: Add doxygen target Improve the port available_group and type documentation alsa-mixer: Fix mapping_group_available() logic Rename "available group" to "availability group" alsa-mixer: Fix indentation i18n: Update pulseaudio.pot man: client.conf: Explain that autospawn=no doesn't disable systemd autostarting alsa-mixer: Document the intended-roles mapping option ci: Fix comment alsa-mixer: Set availability groups once per card alsa-mixer: Fix jack name comparison gitlab: Remove trailing whitespace from the issue template alsa-mixer: Remove references to non-existent multichannel paths alsa-mixer: Document the description and description-key mapping options switch-on-port-available: Fix switching away from unplugged headphones build-sys: Disable GStreamer by default with Autotools Timo Gurr (1): meson: allow to disable installing completions Tom Yan (2): main, core: check idle after loading conf man: mention that exit-idle-time is complied if the user is lingering Tomasz Kontusz (4): alsa-mixer: Fix well-known descriptions for steelseries game/chat outputs alsa-mixer: Remove unused iec958-passthrough* descriptions alsa-mixer: add description-key to Mappings and Profiles alsa-mixer: add support for Astro A50 gaming headset Vasilis Tsiligiannis (1): start-pulseaudio-x11: Make 'plasma' version check shell portable Wim Taymans (5): X11: Add xauthority parameter alsa: handle unavailbale HW volume in UCM alsa-ucm: use the right profile name modules: fix some small memory leaks alsa-util: fix check for digit Yi-Jyun Pan (1): l10n: zh_TW: update translation Yuri Chornoivan (1): i18n: Update poulseaudio.pot ckdo (8): raop: Fix non working tcp mode rtp: Fix reverted test for INHIBIT_AUTO_SUSPEND_ONLY_WITH_NON_MONITOR_SOURCES raop: Fix soft volume not applied on initial volume raop: Fix rewinding handling : process just after request received raop: Fix callback call in raop client after auth : only call once everything is freed raop: Code clarification : Detect raop_client recording state in a proper way raop: Code clarification : Only free the I/O thread when everything is initialized raop: Add autoreconnect feature efim (1): add comma itsthem (1): pulsecore: Replace gendered pronouns with gender neutral ones muzena (1): i18n: Update the Croatian translation roshal (1): man: remove space zhaochengyi (1): pulsecore: Add exception judgment to fix the crash when playing music