PulseAudio 13.0 release notes

Changes at a glance

  • Added support for Dolby TrueHD and DTS-HD Master Audio
  • Improved 5.1 surround channel routing
  • Improved initial card profile selection for ALSA cards
  • Automatically switch away from unavailable card profiles
  • Bluetooth card profile choices aren't persistent any more by default
  • Added support for some SteelSeries Arctis 5 USB headsets
  • Removed KDE specific routing configuration
  • New information collection script for bug reports: pa-info
  • New "max_latency_msec" module argument for module-loopback
  • New "fast_adjust_threshold_msec" module argument for module-loopback
  • New "stream_name" module argument for module-rtp-send
  • Fixed S/PDIF for CMEDIA USB2.0 High-Speed True HD Audio
  • Use source sample spec and channel map by default in module-loopback
  • module-role-cork and module-role-ducking can now use recording streams as triggers
  • New "avoid_resampling" module argument for module-udev-detect and module-alsa-card
  • "avoid_resampling" also tries to avoid format conversion if the ALSA device supports it
  • Added support for non-PCM formats in module-null-sink
  • More efficient channel remapping in some cases for 32-bit streams
  • Removed the "latency_time" option from module-null-source
  • New function to enable realtime scheduling for client threads
  • New convenience functions for getting parameters from pa_format_info
  • New function for pa_threaded_mainloop to run a callback in the mainloop thread without the mainloop lock being held
  • Const-ification of parameters across headers
  • Removed BlueZ 4 support
  • Dropped intltool
  • Introduction of the Meson build system
  • New build option for improving build reproducibility
  • Minor bug-fixes, bindings updates and several translation updates

Notes for end users

Added support for Dolby TrueHD and DTS-HD Master Audio

It's now possible to play Dolby TrueHD and DTS-HD Master Audio encoded audio in passthrough mode. Players need to be updated to expose support for these formats. Update: This announcement was premature. There are still things missing that are required to make this work.

Improved 5.1 surround channel routing

When applications play 5.1 surround audio, they have to tell PulseAudio the channel map of the content. The established naming standards for various surround setups aren't entirely consistent: what is called "rear" speakers in 5.1 setups is called "side" in 7.1 speaker setups. In the 7.1 arrangement the "rear" speakers are further back. With 5.1 content applications have to decide whether to use the "side" or "rear" channels, and it varies across applications which is used. PulseAudio used to handle the channel routing correctly only if the application chose to use the "rear" channels with 5.1 content. Applications using the "side" channels got their audio badly remixed, because PulseAudio determined that the 5.1 speaker system doesn't have any "side" speakers. Now it doesn't matter which alternative the application picks, PulseAudio treats both cases identically when the user has a 5.1 speaker setup (with a 7.1 setup there is still a difference which channel pair gets used).

Improved initial card profile selection for ALSA cards

When a new card shows up (during PulseAudio startup or hotplugged), PulseAudio needs to pick the initial profile for the card. Unavailable profiles shouldn't be picked, but module-alsa-card sometimes marked unavailable profiles as available, causing bad initial profile choices. Specifically, if a profile contains a sink and a source, and only one of them is available, the profile should be marked as unavailable, but previously it was marked as available. As a result PulseAudio might pick a profile with a non-working output. That's now fixed.

Automatically switch away from unavailable card profiles

PulseAudio has for a long time supported switching the sink or source port when the port becomes unavailable, for example switching to laptop speakers when headphones are detached. Now similar switching is implemented for card profiles when the current profile becomes unavailable. A common case is a HDMI profile that becomes unavailable when a monitor is detached. Playback should now automatically move to somewhere else when a HDMI monitor is detached.

Bluetooth card profile choices aren't persistent any more by default

Which profile to use with bluetooth is highly context dependent (HSP/HFP for phone calls, A2DP for everything else), so there's not much point in saving user's profile choices. It's better to just use A2DP by default and switch to HSP when necessary (automatically when possible). It's still possible to enable persistent profile choices by passing "restore_bluetooth_profile=true" as an argument to module-card-restore.

Added support for some SteelSeries Arctis 5 USB headsets

The Arctis headsets are unusual in that they provide separate outputs with separate volume controls for speech and other audio (which is useful with gaming), which requires some custom configuration in PulseAudio. PulseAudio 12.0 added support for the Arctis 7 headset, and now PulseAudio 13.0 adds support for the Arctis 5 headset too.

We are still discovering new USB product IDs for this series, and support for more headsets will be coming.

Removed KDE specific routing configuration

module-device-manager was created a long time ago to serve the needs of the KDE project's vision for how audio management should work (most notably audio routing), and PulseAudio's autostart system was configured to load module-device-manager when a KDE session is started. The module has had various issues over time, especially when used in combination with module-switch-on-connect, and there hasn't been enough developer interest for fixing the issues. There have been occasional requests from users to disable module-device-manager, but since KDE has depended on the module for some of its audio UI, we have kept the module enabled. With newer KDE versions the dependency on the module is finally gone, however, so now PulseAudio won't load the module by default any more if the startup script detects that the KDE version is new enough.

New information collection script for bug reports: pa-info

PulseAudio comes now with a program called "pa-info", which is a script that runs various commands to gather comprehensive information about the system's audio setup. The script is inspired by ALSA's alsa-info script (and if alsa-info is available, it will also be run by pa-info). The script is intended to reduce the need to repeatedly ask for various bits of information when investigating bug reports.

New "max_latency_msec" module argument for module-loopback

The "max_latency_msec" module argument can be used to set an upper limit for the loopback latency. By default the latency will automatically increase if there are underruns, but if keeping the latency below a certain limit is more important than the absence of glitches, then this option is useful.

New "fast_adjust_threshold_msec" module argument for module-loopback

If the loopback for some reason gathers a lot of audio in its internal queue, it will take a long time before the loopback gradually adjusts its latency back to the target latency. This can happen for example during a suspend/resume cycle, if the loopback's output device takes more time to initialize than the input device. The new "fast_adjust_threshold_msec" module argument can be used to specify a threshold of difference between the actual latency and the target latency, and if the threshold is exceeded, the loopback immediately adjusts to the target latency by dropping audio from its queue.

New "stream_name" module argument for module-rtp-send

module-rtp-send has so far used "PulseAudio RTP Stream on <address>" as the name for the RTP stream that it creates. If a different name is desired, it can be set with the new "stream_name" module argument.

Fixed S/PDIF for CMEDIA USB2.0 High-Speed True HD Audio

The "CMEDIA USB2.0 High-Speed True HD Audio" sound card (probably a generic chip used in several products) uses unusual device indexes for S/PDIF, which is why the default ALSA USB-Audio configuration doesn't work. PulseAudio now has custom configuration to deal with the card.

Use source sample spec and channel map by default in module-loopback

Previously module-loopback used the sink sample spec and channel map by default, which caused unnecessary resampling, because the sink side of the loopback will anyway be resampled due to the adaptive resampling, and if the sink parameters are different than the source parameters, also the source side needed resampling. Now that we default to the source parameters, the source side of the loopback doesn't need resampling.

module-role-cork and module-role-ducking can now use recording streams as triggers

module-role-cork and module-role-ducking are used to pause or attenuate streams based on the existence of other streams and their media role property. So far it has only been possible to use playback streams as the trigger streams, now also recording streams can be used. In order to not change the behaviour of existing configurations, recording stream triggers have to be explicitly enabled by setting the "use_source_trigger=true" module argument.

New "avoid_resampling" module argument for module-udev-detect and module-alsa-card

The global "avoid-resampling" option in daemon.conf can now be overridden for all ALSA cards in module-udev-detect and for a specific card in module-alsa-card with the "avoid_resampling" module argument. This isn't very useful for end users currently, though, because configuring the option per-card is rather complicated. The new feature is mainly useful for system integrators who want to set a fixed sample rate for the "main" sound card (because that's the rate they test, and other sample rates are a risk), but want to allow e.g. USB sound cards to use any sample rate. To do that, daemon.conf should have "avoid-resampling=yes" set, and udev needs to be configured to set the PULSE_IGNORE variable for the main sound card so that module-udev-detect doesn't load the card, and then module-alsa-card needs to be explicitly loaded for the main sound card in default.pa with "avoid_resampling=no".

"avoid_resampling" also tries to avoid format conversion if the ALSA device supports it

In addition to reconfiguring the sample rate on the ALSA device to avoid resampling, we also try to reconfigure the sample format. This would allow, for example, switching between 16- and 24-bit audio based on the file being played if the hardware supports it.

Added support for non-PCM formats in module-null-sink

It's now possible to play compressed audio formats to a null sink. This is mainly useful for developers testing passthrough implementation in applications or in PulseAudio itself. The new "format" module argument of module-null-sink can be used to specify which formats the null sink should accept (by default only PCM is accepted). See the module documentation for more details.

More efficient channel remapping in some cases for 32-bit streams

If the sound card uses 32-bit integer samples (in the system's native endianness) and a stream with the same sample format is connected to the sound card, PulseAudio can now do channel remapping without converting the audio to floating point samples during the processing. This improves performance significantly (for this case, which is not a very common case).

Removed the "latency_time" option from module-null-source

The option didn't make sense, because module-null-source uses dynamic latency (recording streams can specify their desired latency and the source adapts to that). The option value did have some effect on the operation of module-null-source, but that was only because the implementation was buggy. After the implementation was fixed, the latency_time value wasn't used at all.

Notes for application developers

New function to enable realtime scheduling for client threads

pa_thread_make_realtime() is a new utility function that can be used to enable realtime scheduling for the calling thread. That is useful if the application developer doesn't want to figure out the operating system's APIs by themself. The function uses RealtimeKit when available, otherwise operating system specific low-level interfaces are used.

New convenience functions for getting parameters from pa_format_info

Reading the sample rate, sample format, channel count and channel map parameters from pa_format_info can now be done with pa_format_info_get_rate(), pa_format_info_get_sample_format(), pa_format_info_get_channels() and pa_format_info_get_channel_map(), respectively.

New function for pa_threaded_mainloop to run a callback in the mainloop thread without the mainloop lock being held

pa_threaded_mainloop_once_unlocked() can be called from any thread to schedule a callback to be called in the mainloop thread. The callback will be called without the mainloop lock being held, which is unusual and can be unsafe. This was added, because the application might be dealing with locking its own objects in addition to the mainloop thread itself. In this case, it might need to control the locking order of the two, to match the order in other threads, as it might not always be able to allow for its objects to be locked after the mainloop thread lock.

Const-ification of parameters across headers

A number of parameters across heads have been marked with the "const" qualifier where applicable. This should not have a visible impact, other than in some corner cases. We are aware that the QT project uses a mix of their own declarations and system headers (there is a bug to track this).

Notes for packagers

Removed BlueZ 4 support

BlueZ 5.0 was released in 2012, and the 4.x series has been unmaintained since then. Now PulseAudio has dropped support for BlueZ 4.

Dropped intltool

PulseAudio now uses a newer gettext version that removes the need to use intltool. The required minimum gettext version is now 0.19.3.

Introduction of the Meson build system

The plan is to move to a Meson based build system. This should be considered to be in "beta". Packagers are encourage to use it and report issues to allow for a smooth migration. The meson build does not use any compiler optimisations by default, so you will need to specify them manually (for example, with the --optimization argument) to not have a performance regression (this can be ~10x for some compute-intensive tasks on ARM-based systems). The autotools build uses -O2 by default.

New build option for improving build reproducibility

By default PulseAudio can be run from the build directory without installing, and in order to support this the build directory needs to be stored in the compiled code. This is not good for reproducible builds, and this feature can now be disabled with the "--disable-running-from-build-tree" configure option or the "running-from-build-tree" Meson build option.

git shortlog

Alan Coopersmith (3):
      meson: fix builds on platorms without libsystemd
      meson: check for sys/filio.h
      core-util: Use /proc/fd on Solaris as well in pa_close_all

Alexander E. Patrakov (1):
      resampler: Fix confusion between rear and side channels for 5.1 layouts

Alexander Potashev (1):
      i18n: Update Russian translation

Andika Triwidada (1):
      i18n: update the Indonesian translation

Arnaud Rebillout (118):
      build-sys: meson: Generate version.h
      gitlab-ci: Create two different jobs for autotools and meson builds
      core: Fix a log function when HAVE_SYSTEMD_JOURNAL && !HAVE_SYSLOG
      meson: Define HAVE_UDEV when udev is found
      meson: modules/alsa: Add udev support
      meson: modules/alsa: Make alsa-util a shared library
      meson: modules/alsa: Fix udev-util include path
      meson: Add systemd-login to core dependencies
      meson: Propagate systemd dep to libpulsecommon and daemon
      meson: Make systemd-login module depend on systemd
      meson: Make equalizer-sink modulde depend on fftw, add fftw dependency
      meson: Add pulsecore internal libraries
      meson: Add the rtp module library
      meson: Comment bluez5 modules for now
      meson: Build modules with '-Wl,no-undefined'
      meson: Fix all the missing dependencies uncovered by -Wl,--no-undefined
      meson: Enable dbus-protocol module
      meson: Enable jack modules, add jack dependency
      meson: Enable raop-sink module, add raop lib, add openssl dependency
      meson: modules/raop: Fix rtsp_client.h include path
      meson: Enable raop-discover module, add avahi dependency
      meson: Enable x11 modules, add x11 related dependencies
      meson: Enable zeroconf modules
      meson: Enable mmkbd-evdev module
      meson: Enable lirc module, add lirc dependency
      meson: Enable console-kit module
      meson: Do not build dbus files as a library
      meson: Enable bluetooth modules, add bluez_util lib, add bluez and sbc dependencies
      meson: Enable oss module and padsp util
      meson: Enable ladspa module
      meson: Enable echo-cancel module, add libwebrtc_util lib, add speex and webrtc dependencies
      webrtc: Silence -Wsign-compare warning
      meson: Build and install man pages
      dockerfile: Install Meson from upstream tarball
      meson: Add pulsedspdir option
      meson: Add a sanity check to the prefix option
      meson: Create bindir and libdir variables
      meson: Add a comment to mark the beginning of the configuration data section
      meson: Tighter coupling of XOrg dependencies
      meson: Make x11 optional, bump meson requirement
      meson: Build pax11publish only if X11 is found
      meson: Install start-pulseaudio-x11 if x11 is found
      meson: Adjust fixme comment for daemon
      meson: Make dbus optional, fix build with dbus disabled
      module-stream-restore: Silence compiler warnings when dbus is disabled
      meson: Make alsa optional
      meson: Also set HAVE_ALSA when alsa is enabled
      meson: Make systemd optional
      meson: Make avahi optional
      meson: Make bluez optional
      meson: Fix bluez5 version requirement
      meson: Use assert() to validate the prefix
      meson: Make jack optional
      meson: Make fftw optional
      meson: Make lirc optional
      meson: Make openssl optional, fix build when openssl is disabled
      meson: Make speex optional
      meson: Make udev optional
      meson: Make hal-compat optional
      meson: Make webrtc optional
      meson: adrian-aec requires libm
      meson: Make Adrian echo canceller optional
      meson: Add a sanity check regarding echo cancellers
      meson: Add optional GLib support
      meson: Add optional libpulse-mainloop-glib
      meson: Add optional Gtk+ support
      meson: Add optional GSettings support
      meson: Add optional Async NS support
      meson: Add optional IPv6 support
      meson: Add optional SoX Resampler support
      meson: Add optional libsamplerate support
      meson: Add optional legacy-database-entry-format support
      meson: Typo in man/meson.build
      meson: Display summary and warnings at the end of the meson configure step
      meson: Sort the core dependencies a bit
      meson: Process and install files: default.pa, system.pa, daemon.conf, client.conf
      meson: Fix HAVE_AF_UNIX, add check for mkfifo function
      meson: Add some platform specific configuration data
      meson: Add a dependency object for libpulse_mainloop_glib
      meson: Add a check for sys/eventfd.h header
      meson: Add some symbol checks
      meson: Move shm_dep check where it belongs
      meson: Add libpulse simple
      meson: Enable (almost) all tests
      meson: Boolean options default to true, no need to say it
      meson: Define HAVE_SYS_UN_H, this was forgotten
      meson: Enable echo-cancel test
      .gitlab-ci: Add meson test-daemon
      test-daemon: No need to define dl-search-path
      meson: Install completion files
      meson: Make man page build and install conditional
      meson: Handle man pages symlinks with a meson install script
      meson: Fix man install dir
      meson: Install vala apis
      meson: Install pkg-config files
      meson: Fix pulsedspdir
      meson: Add systemduserunitdir option
      meson: Add udevrulesdir option
      meson: Fix various install scripts
      meson: Install ALSA udevrules
      meson: Add basic po support
      meson: Translate and install desktop file
      meson: Build daemon custom targets by default
      meson: Fix install paths
      meson: Install dbus policy file
      meson: Fix udevrulesdir
      meson: Move oss-util in a library
      meson: Install utils symlinks, install qpaeq
      meson: Build libwebrtc-util as a shared library
      meson: Install systemd user service
      meson: Install cmake files
      meson: Install headers
      meson: Disable esound modules
      meson: Add ORC support
      meson: Add support for gcov
      meson: Increase timeout for tests
      meson: Add running-from-build-tree option
      meson: Disable alsa-mixer-path-test

Arun Raghavan (63):
      build-sys: First pass at a meson-ified build system
      PROTOCOL: Bump to version 33
      core: Expose API to elevate a thread to realtime priority
      null-sink,null-source: Use realtime scheduling if possible
      map-file: Fix typo while adding pa_thread_make_realtime
      build-sys: Update meson.build based on recent changes
      travis: Update gettext along with other packages
      format: Expose pa_format_info convenience getters in API
      build-sys: Drop ancient check for dbus_watch_get_unix_fd()
      build-sys: Add some missing header/function checks to meson build
      build-sys: Update meson version dependency
      gitignore: Ignore build* directories
      doc: Update README to point to GitLab
      bluetooth: Re-add rtp.h to Makefile.am
      gitlab: Add support for GitLab CI
      gitlab: Add meson build to CI
      Adopt a Code of Conduct
      build-sys: Add CoC to the dist'ed files
      gitlab: Update Dockerfile to pull xmllint
      man: Fix a syntax issue in pacat xml
      build-sys: Set minimum required meson version to 0.44.0
      i18n: Provide *ngettext() stubs when NLS is diabled
      build-sys: Fix meson version detection logic
      null-sink: Add support for reconfiguration and non-PCM formats
      tests: Add a unit test for passthrough support
      passthrough-test: Add a test for volume set/restore
      gitignore: Ignore cscope files
      system.pa: Drop mention of module-hal-detect
      meson: Fix some config generation warnings
      build-sys: Add the ability to disable maintainer mode
      tests: Shorten how long daemon tests take to run
      pactl: Fix some corner cases when setting sink formats
      protocol-native: Fix format ownership while creating record streams
      source: Fix a bad condition that made source events not be emitted
      thread-mainloop: Add API for running a callback unlocked
      build-sys: Update meson dependency to 0.50.0
      build-sys: Fix up meson install paths
      daemon: Drop empty fields in desktop file
      meson: Skip norun tests
      meson: Duplicate split of long daemon tests from autotools build
      core-util: Fix detection when running in a VM
      build-sys: Bump libpulse soversion
      build-sys: Fixes for i18n parts of the meson build
      build-sys: meson: Disable coverage by default
      svolume: Mark channel parameter as earlyclobber
      build-sys: meson: Add -Wl,no-delete to relevant libraries
      build-sys: meson: Correctly set up RPATH
      build-sys: meson: Fix some defines for default.pa generation
      build-sys: meson: Add symbol versioning as in autotools
      build-sys: meson: Fix minor typo in orc build
      build-sys: Move svolume-*.c to libpulsecore
      build-sys: autotools: Add meson build files to EXTRA_DIST
      build-sys: meson: Add atomic ops related checks
      build-sys: meson: Add ARMv6 instruction check
      build-sys: meson: Add a check for fast 64-bit operations
      build-sys: meson: Add some missing declaration checks
      build-sys: meson: Add mkfifo checks for module-pipe-*
      build-sys: meson: Add a bunch of missing checks
      build-sys: meson: Give ourselves a little more timeout headroom
      build-sys: meson: Fixes for some ARM compiler checks
      build-sys: meson: Process subdirectories before generating configuration
      build-sys: Bump version info for libpulse
      build-sys: Fix documentation of version info

Bert Hekman (1):
      alsa-mixer: add support for SteelSeries Arctis 5 and renamed Arctis 7 files appropriately

Carlos Garnacho (1):
      client-conf: Avoid loading X11 properties unless SSH_CONNECTION is set

Danny O'Brien (1):
      man: Add description of pactl special names.

David Emett (1):
      dbus: fix ActiveProfile setting

David Heidelberg (2):
      meson: fix build with simple
      meson: when avahi is disabled, do not build it's code

David Hewitt (3):
      vala: Fix card profile array bindings
      vala: add pa_card_port_info bindings
      Remove active_profile

Diego Viola (1):
      memblockq: fix typo: yepp -> yep

Felipe Sateler (1):
      i18n: Don't compile with -ffast-math

Fran Diéguez (1):
      i18n: Update Galician translations

Friedel Wolff (1):
      i18n: New translation for Afrikaans (af)

Frédéric Danis (2):
      bluetooth: Fix crash in setup_stream()
      bluetooth: Fix crash when disabling Bluetooth adapter

Georg Chini (12):
      core-util: correct error in set_nonblock()
      virtual-source: Fix crash in combination with module-loopback
      loopback: Add option fast_adjust_threshold_msec
      alsa: Improve resume logic after alsa suspend
      sink, source: Call sink input suspend callback also on suspend cause change
      ladspa-sink: Suspend virtual sink when master is suspended
      null-source: fix multiple bugs
      core-util: Avoid usage of pa_strbuf in pa_escape()
      core: add simple message interface
      source-output: Fix rewinding bug
      sink-input: fix rewriting render memblockq when nothing should be rewound
      Commit fd9e3452 removed -ffast-math from the compile flags. Under some conditions this may lead to massive slowdown of floating point operations when underflows or denormals are encountered. In particular, this problem was observed with the soxr resampler after applying https://gitlab.freedesktop.org/pulseaudio/pulseaudio/merge_requests/120

Hans de Goede (1):
      alsa-ucm: Fix UCM devices which names share a prefix being seen as the same

Hongxu Jia (1):
      build-sys: introduce a special build flag to explicitly disables running from build tree

Hui Wang (1):
      stream-restore: Don't restore if the active_port is PA_AVAILABLE_NO

Ing. Jaroslav Safka (1):
      rtp-send: add configurable RTP stream name

Jan Alexander Steffens (heftig) (6):
      build-sys: Install cmedia-high-speed-true-hdaudio.conf
      meson: Fix build of padsp
      meson: Fix library versioning to match Autotools
      meson: Fix installation of headers
      build-sys: meson: Add some missing checks
      build-sys: meson: Fix 2 cases of joining paths w/o join_paths

Javier Jardón (1):
      Use upstream gettext instead intltool

Jean-Philippe Guillemin (1):
      alsa-mixer: add a profile-set file to fix iec958 input and output on CMEDIA USB2.0 High-Speed True HD Audio

Jordi Mas (1):
      Fixes to Catalan translation

Josef Andersson (1):
      Update Swedish Translation

Joseph Herlant (22):
      Fix typo: controling -> controlling
      Fix typo: Retreive -> Retrieve
      Fix typo: occurrencies -> occurrences
      Fix typo: occured -> occurred
      Fix typo: dependancy -> dependency
      Fix typo: Doulbe -> Double
      Fix typo: Extention -> Extension
      Fix typo: differnt -> different
      Fix typo: explicitely -> explicitly
      Fix typo: properies -> properties
      Fix typo: distuingish -> distinguish
      Fix typo: recieved -> received
      Fix typo: comming -> coming
      Fix typo: prefered -> preferred
      Fix typo: definately -> definitely
      Fix typo: transmited -> transmitted
      Fix typo: substract -> subtract
      Fix typo: managable -> manageable
      Fix typo: documenation -> documentation
      fix typo: satisifed -> satisfied
      fix typo: existance -> existence
      volume-test: Allow rounding without having to allow a random number of errors

João Paulo Rechi Vita (18):
      bluetooth: backend-ofono: Demote registration failure to info
      card-restore: Don't restore profile on Bluetooth cards by default
      bluetooth: Add missing argument to module's usage
      bluetooth: Remove leftover references to the BlueZ 4/5 split
      switch-on-port-available: Improve readability
      switch-on-connect: Improve readability
      switch-on-connect: Clean-up tabs used for identation
      switch-on-connect: Add debug logs
      module-rescue-streams: Fix tab used for identation
      card: Fix typo in comments
      card: Create pa_available_to_string
      cli-text: Use pa_available_to_string
      device-port: Use pa_available_to_string
      card: Log initial profile selection
      switch-on-connect: Do not ignore HDMI sinks
      switch-on-port-available: Check if we need to change the active profile
      module-alsa-card: Update the active profile's availability last
      card: Only fire the profile available changed hook for linked cards

Kaleb Ercanbrack (1):
      alsa-mixer: Add a missing USB product ID for SteelSeries Arctis 7

Lucas Stach (3):
      meson: fix build files list when building with NEON
      meson: allow to build bluez support without libbluetooth
      meson: add stdint.h to checked headers

Luiz Augusto von Dentz (3):
      bluetooth: ofono: Use Acquire method if available
      bluetooth: Remove BlueZ 4 support
      bluetooth: policy: Remove BlueZ 4 related code

Lyndon Brown (44):
      hashmap: constify hashmap ptr for various functions
      hashmap: constify pointer of private hash_scan function
      hashmap: constify pointer of pa_hashmap_get
      proplist: add and use const version of MAKE_HASHMAP macro
      proplist: pa_proplist_iterate: constify proplist pointer
      proplist: pa_proplist_get: constify proplist pointer
      proplist: pa_proplist_gets: constify proplist pointer
      tagstruct: pa_tagstruct_put_proplist: constify proplist pointer
      tagstruct: pa_tagstruct_put_format_info: constify format pointer
      context: pa_context_proplist_update: constify proplist pointer
      proplist: pa_proplist_to_string[_sep]: constify proplist pointer
      proplist: pa_proplist_contains: constify proplist pointer
      proplist: pa_proplist_[size|isempty]: constify proplist pointer
      proplist: pa_proplist_equal: constify proplist pointers
      scache: pa_context_play_sample_with_proplist: clarify proplist param
      scache: pa_context_play_sample_with_proplist: constify proplist param
      volume: pa_cvolume_get_position: constify
      context: pa_context_new_with_proplist: constify proplist param
      context: pa_context_get_protocol_version: constify
      context: pa_context_get_state: constify
      mainloop: constify get_retval functions
      operation: pa_operation_get_state: constify
      stream: pa_stream_get_state: constify
      stream: pa_stream_get_context: constify
      stream: pa_stream_get_index: constify
      stream: pa_stream_get_device_[index|name]: constify
      stream: pa_stream_is_[suspended|corked]: constify
      stream: pa_stream_[writable|readable]_size: constify
      stream: pa_stream_get_underflow_index: constify
      stream: pa_stream_get_format_info: constify
      stream: pa_stream_get_monitor_stream: constify
      stream: constify internal functions
      context: hide error attr behind pointer
      context: pa_context_errno: constify
      context: pa_context_rttime_new: constify context pointer
      context: pa_context_rttime_restart: constify context pointer
      context: pa_context_is_pending: constify
      context: pa_context_is_local: constify
      context: pa_context_get_server: constify
      context: pa_context_get_server_protocol_version: constify
      context: pa_context_get_index: constify
      context: pa_context_get_tile_size: constify
      mainloop: constify is_our_api api ref
      operation: avoid state change from final state

Marek Cernocky (2):
      i18n: Updated Czech translation
      i18n: Fixed plural forms handling

Mark Filion (1):
      i18n: Fix copyright information in pt_BR.po

Milo Casagrande (3):
      i18n: update Italian translation
      i18n: update Italian translation
      l10n: Update Italian translation

Moo (2):
      l10n: Update lt.po
      l10n: Update lt.po

Mr. M (2):
      i18n: update the Lithuanian translation
      i18n: update the Lithuanian translation

Nate Brown (1):
      Expose control param to alsa-card module

Nazar Mokrynskyi (2):
      alsa-mixer: More output modes for SB Omni Surround 5.1 and cleanup
      alsa-mixer: Don't move LFE in 2.1 and 4.1 modes on SB Omni Surround 5.1

Nicolas Fella (1):
      daemon: Drop KDE-specific loading of module-device-manager

Olaf Hering (1):
      alsa: Use correct header path

Pali Rohár (10):
      bluetooth: policy: Remove BlueZ 4 related code
      bluetooth: Update a2dp-codecs.h from upstream bluez project
      bluetooth: Modular API for A2DP codecs
      bluetooth: Add missing validations for SBC codec parameters
      bluetooth: Clean up SBC bitpool calculation
      bluetooth: Set correct endianity of audio samples for SBC codec
      bluetooth: Fix usage of MTU, buffer sizes and return values of encode/decode methods
      bluetooth: Change A2DP codec API of reset() method to indicate failure
      bluetooth: Fix usage of RTP structures in SBC codec
      bluetooth: Only perform write-related calculations when we have a sink

Pierre-Louis Bossart (1):
      format: Add support for Dolby TrueHD and DTS-HD HBR passthrough

Piotr Drąg (4):
      Remove bad characters from Malayalam translation
      i18n: update Polish translation
      i18n: update Polish translation
      i18n: update Polish translation

RODRIGUEZ Christophe (1):
      raop: Fix infinite loop in raop-sink with UDP mode

Rafael Fontenelle (3):
      Update Brazilian Portuguese translation
      Update Brazilian Portuguese translation
      po: Update Brazilian Portuguese translation

Raman Shyshniou (3):
      loopback: add max_latency_msec argument
      loopback: use source sample spec and channel map by default
      optimize set_state_in_io_thread() callbacks

Russell Treleaven (4):
      give users a template that encourages complete bug reports
      add script to collect information for bug reports
      Update Bug.md to encourage users to attach pa-info output to bug reports
      gitlab: white space change to Bug.md

S Page (1):
      pasuspender: explain program argument in help

Sangchul Lee (12):
      rtp-send: remove dead code
      udev-detect, alsa-card: Adopt avoid resampling option from daemon.conf
      i18n: Update the Korean translation
      alsa-util/sink/source: Add infrastructure for supported sample formats
      alsa-sink/source: Rename a variable for supported sample rates in userdata
      alsa-sink/source, sink, source: Consider sample format for avoid-resampling/passthrough
      core-util: Use size_t for out parameter of pa_split_*in_place()
      stream-interaction: Support for triggering ducking/cork by source-output
      stream-interaction: Use PA_IDXSET_FOREACH macro to iterate idxset
      role-ducking, role-cork: Add use_source_trigger argument
      stream-interaction: Remove useless condition
      sink: Set monitor source's avoid-resampling value to its sink's

Sascha Silbe (3):
      tests: fix possible segfault in cpu-remap-test
      tests: test NEON 2-channel->4-channel rearrange
      remap: support S32NE work format

Stefan Huber (1):
      pacat: Fix code style

Takashi Iwai (1):
      alsa: Fix inclusion of use-case.h

Takashi Sakamoto (2):
      alsa: Suppress udev detection of sound card for some units on IEEE 1394 bus
      alsa-mixer: distinguish Focusrite Saffire Pro 10 i/o from Liquid Saffire 56

Tanu Kaskinen (36):
      alsa-card: improve the profile availability logic
      set exit_idle_time to 0 when we detect a session
      .gitignore: add m4/extern-inline.m4 and remove-ptcdate.sed
      core-format: fix TrueHD and DTS-HD channel maps
      alsa-mixer: make the mono mapping a fallback only
      context: constify pa_context_set_error()
      switch-on-port-available: ignore bluetooth cards
      sink-input: remove the DRAINED state
      sink-input, source-output: remove the state getters
      sink, source: remove the state getters
      ladspa-sink: fix search path
      pipe-sink, pipe-source: fix file permissions
      update NEWS
      update NEWS
      i18n: update translation bug reporting links
      daemon-conf: fix printing avoid-resampling in pa_daemon_conf_dump()
      .gitignore: add passthrough-test
      alsa-mixer: don't make lineout unavailable when headphones are plugged in
      alsa-mixer: swap lineout and headphone priorities
      raop: add error handling to rsa_encrypt()
      raop: fix typo: modules -> modulus
      bluez5-device: use correct RTP payload type
      alsa-mixer: improve a comment in udev rules
      build-sys: Lower the minimum gettext version
      build-sys: Fix the Meson build
      i18n: a couple of improvements to the Spanish translation
      core: send subscription events when the configured default sink or source changes
      loopback: remove an unnecessary level of pointer dereferencing
      loopback: fix callback name in comment
      sink, source: Don't change suspend cause when unlinking
      .gitignore: add atomic-test
      a2dp-codec-sbc: get rid of compiler warnings
      main: Log more information when executing default.pa fails
      bootstrap.sh: don't set sysconfdir and localstatedir configure options
      update NEWS
      build-sys: Add missing files to release tarballs

Thomas Hutschenreuther (1):
      atomic: fix load and store for armv7 and higher

Tomaz Solc (1):
      cli-command: Report error in pa_play_file.

Topi Miettinen (1):
      daemon: Harden systemd service

Wellington Wallace (5):
      null-sink: add an option that allows rewinds to be disabled
      null-sink: add an option that allows rewinds to be disabled
      Merge branch 'allow-to-disable-null-sink-rewinds' of https://gitlab.freedesktop.org/wwmm/pulseaudio into allow-to-disable-null-sink-rewinds
      null-sink: add an option that allows rewinds to be disabled
      null-sink: setting maximum latency to 50 ms when rewinds are disabled

Will Stott (1):
      alsa: Support the older model of NI's Traktor Audio 2 DJ

Yclept Nemo (1):
      object: Fix pa_object_new macro (missing close paren)

Yuri Chornoivan (3):
      i18n: update the Ukrainian translation
      [l10n] Update Ukrainian translation
      po: update Ukrainian translation

Zakhary Husak (1):
      alsa-mixer: Add support for 2018 Arctis 7

jorisc90 (1):
      alsa-mixer: Update to support Arctis Pro Wireless headset

muzena (1):
      Update Croatian translation

scootergrisen (9):
      Add missing space
      Remove "module" from "module user requested module"
      "e g " to "e.g."
      Remove space in "Digital Passthrough  (IEC958)"
      channel/s to channel(s)
      Change "!" to "." to match other identical string.
      Replace "!" to "." so string is identical with other string.
      i18n: Add danish translation
      i18n: Update Danish translation

shdown (1):
      mainloop: fix timeout assignment in pa_mainloop_prepare