
| 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
