PulseAudio 6.0 Release Notes

Changes at a Glance

  • BlueZ 5 native HSP (headset) support
  • BlueZ 5 HFP (hands-free) profile support via oFono
  • systemd socket activation support
  • Better support for multichannel and 2.1 profiles
  • Remap optimisations
  • Many minor improvements, bug fixes, and i18n updates

Notes for Application Developers

New function in libpulse: pa_stream_write_ext_free(). The function allows more flexible use of free callbacks than the regular pa_stream_write() function. This is useful if an audio buffer is part of a bigger structure that needs to be freed or unreferenced when the audio buffer is no longer needed.

We now have Vala bindings for libpulse-simple.

Notes for Packagers

When building PulseAudio, it's possible to choose between "native" and "ofono" BlueZ 5 headset backends. They can be both enabled, but only one can be used at runtime. If you only need to support a bluetooth audio stack with oFono, then it's advisable to disable the native backend when building PulseAudio. Similarly, if you don't need to support oFono, then it's best to disable the oFono backend. If you need to support both alternatives, then you have to enable both. The runtime decision which to use is done via the "headset" argument of module-bluetooth-discover.

The native HSP backend for BlueZ 5 depends on libbluetooth. It's a header dependency only, so the actual library doesn't need to be present at runtime.

The oFono HFP backend for BlueZ 5 naturally introduces a runtime dependency on oFono. The minimum supported oFono version is 1.13.

The minimum json-c version has been bumped to 0.11.

The libsamplerate based resamplers are now deprecated, because they offer no particular advantage over speex. Packagers can drop the dependency to libsamplerate, unless they specifically want to keep enabling the libsamplerate based resamplers for some reason.

extra-hdmi.conf, which was present in 5.0 and a few versions before that, has been merged with default.conf. The udev rule has been updated accordingly, but these are typically only read at boot time, so in some cases your sound card might not to be detected. We suggest you do one of the following to fix this transitional problem:

  • Reboot your computer, or
  • Run "udevadm control --reload" and then "udevadm trigger" (as root), or
  • Create a symlink from extra-hdmi.conf to default.conf.

start-pulseaudio-kde has been merged into start-pulseaudio-x11 and pulseaudio-kde.desktop has been removed. The only thing that those KDE specific files did was to load module-device-manager at session startup, and that is now handled in start-pulseaudio-x11 (it's still done only for KDE sessions).

start-pulseaudio-x11 doesn't any more start PulseAudio explicitly, because explicit starting conflicts with using systemd to start the user instance. When systemd isn't used, the regular autospawning functionality will still make PulseAudio start. However, if the user has disabled autospawning in client.conf, then PulseAudio will not be started at all by start-pulseaudio-x11 (which may or may not be what the user wants).

Changes in More Detail

Bluetooth HSP/HFP support with BlueZ 5

PulseAudio now has partial support for the bluetooth HSP (headset) and HFP (hands-free) profiles with BlueZ 5. There are two mutually exclusive backends for HSP/HFP: "native" and "oFono". Some limitations remain, and the limitations are different depending on the backend:

The native backend only supports HSP, not HFP. That's usually not a big issue, because most devices support both HSP and HFP, so it's enough to support only one profile to get audio working. Another limitation in the native backend is that it doesn't support the "headset role", which means that the use case of connecting a PC to a mobile phone, so that the PC pretends to be a headset, isn't supported.

The oFono backend in turn only supports HFP, and not HSP. oFono supports audio only with the "hands-free" role of HFP, which means that the problem is opposite to the native backend case: a mobile phone can be connected to a PC with the PC acting as a headset or other hands-free device, but connecting a headset to the PC doesn't work. Also, volume control doesn't work as well as it could (PulseAudio doesn't tell the connected device what the volume is at PulseAudio's end, so PulseAudio and the connected device handle the device volume independently, which is prone to cause confusion).

Since the oFono and native backends are currently not overlapping, it would be possible to have both backends active at the same time, but there is not consensus about whether this is a good way forward or not. For now, you can apply this patch if you need this functionality.

systemd socket activation support

PulseAudio now supports systemd's socket activation. There's support only for unix sockets, though; support for TCP sockets will come later. PulseAudio ships with a ready-made socket file for starting the user instance, but it's not generally advisable to enable it, because doing so will likely prevent PulseAudio from accessing the D-Bus session bus, crippling some features that depend on the session bus. It's expected that in the future, systems that use systemd will replace the session bus with a user bus, at which point the socket activation support in PulseAudio will become usable more widely.

Here's the list of things in PulseAudio that depend on the session bus, so if you want to try the socket activation and you don't somehow set up the session bus address appropriately, these things will break:

  • module-jackdbus-detect. Breaking that breaks the automatic discovery of a running JACK server.
  • The device reservation protocol. Breaking that breaks clean device handover from PulseAudio to JACK.
  • Server tracking in libpulse. Clients can set up libpulse so that if the PulseAudio server isn't running when they try to connect, the connection attempt will be continued when the server starts and advertises itself in the session bus. This feature is rarely needed, so not a big loss.
  • module-rygel-media-server. Breaking that breaks PulseAudio's integration with Rygel.
  • The server lookup service of the D-Bus protocol. Breaking that breaks pretty much all applications that use PulseAudio's D-Bus protocol, because they can't figure out where the server's D-Bus socket is. There aren't many applications using the D-Bus protocol, though, so this is not a big loss in most cases.

Performance improvements

PulseAudio has since long supported transferring audio data between clients and server through SHM (shared memory), whereas the packet metadata was sent through a unix socket. As of 6.0 we also support transferring packet metadata through two SHM ringbuffers, one in each direction. For signalling that a new packet has arrived, we use eventfds. (There is also an optimisation layer on top of the eventfd that tries to avoid writing to the eventfd in case no one is currently waiting.) This is not so much for saving memory copies, but to save syscalls. This new protocol mechanism is called srbchannel, short for "Shared RingBuffer channel". Some unscientific benchmarks show that this can save us ~10% - 25% of CPU power in low latency use cases, half of that being on the client side. Due to unresolved bugs, srbchannel is not enabled by default in this release. The feature can be enabled by passing "srbchannel=true" to module-native-protocol-unix.

Channel remapping has been optimized by replacing the generic implementation with specialized code for certain cases (implementations are done both in C and ARM NEON).

ARM NEON implementation has been added for the special cases of mixing two 16-bit streams when both have 1, 2 or 4 channels.

module-combine-sink now supports dynamic latency, so that applications that require low latency may work properly also with a combine sink.

Better support for multichannel and 2.1 profiles

Some multichannel cards, including cards supported by the new Firewire ALSA drivers (merged in Linux 3.16) and some USB cards can only be opened in multichannel mode, e g 14 outputs and 10 inputs. If all existing attempts to open the device fails, we make a last attempt where the driver can choose number of channels freely. A default channel map for these channels is assumed.

7.1 audio support for HDMI has been added.

Also, ALSA 1.0.28 added better support for surround2.1 profiles. We now support this new syntax (surround21:card) where available.

Utility changes

pactl now supports setting different volume for each channel of a device or stream.

Multiple instances of JACK sinks and sources

Previously it was not possible to load two instances of module-jack-sink or module-jack-source. That limitation was entirely artificial and didn't make much sense, so the limitation has now been removed.

New argument for module-switch-on-connect

module-switch-on-connect now accepts a new boolean argument: "only_from_unavailable". If only_from_unavailable is false (the default), the module behaviour is the same as before (switch to new devices unconditionally), but if it's true, the device switch is done only if the default device was previously unavailable.

git shortlog

Alexander Couzens (2):
      tunnel-new: add un/corking to the state change callback
      tunnel-new: remove uncorking in thread_func. Now handled by state change callback.

Alexander E. Patrakov (14):
      Fix a few "it's -> its" typos
      Name HDMI outputs uniquely
      core-util: Remove redundant check of directory permissions
      build-sys: Eliminate _FORTIFY_SOURCE warnings
      resampler: Support speex resampler compiled with FIXED_POINT
      source, sink: Support weird sample rates
      rtp-recv: fix crash on empty UDP packets (CVE-2014-3970)
      alsa: Add extra HDMI mappings
      resampler: Moved speex_is_fixed_point() to speex.c
      resampler: Changed style of includes
      Warn on loading module-equalizer-sink
      Warn on loading module-dbus-protocol
      Fix URLs still pointing to the old wiki
      Fix the WhatIsWrongWithSystemWide URL

Alexander Kurtz (1):
      vala: Add bindings for libpulse-simple

Alexander Potashev (1):
      i18n: Update Russian translation

Andrey Semashev (1):
      resampler: Fix sample_format_more_precise() for the case of comparing against PA_SAMPLE_S32BE

Arun Raghavan (11):
      gconf: Remove unused variable
      gconf: Avoid calling deprecated function if possible
      echo-cancel: Fix drift timer restart logic across suspend
      srbchannel: Trivial whitespace and style fixes
      srbchannel: Fix documentation error
      pulse: Initalise pa_threaded_mainloop with zeroes
      creds: Rename pa_ancil to pa_cmsg_ancil_data
      bluetooth: Fix some native backend command sending
      introspect: Minor documentation fix
      build-sys: libwebrtc-util needs libpulsecore
      shell-completion: bash: Fix pactl list source-outputs

Boris Egorov (3):
      alsa-util: fix parenthesis position in err assignment
      tunnel: use proper value for pa_source_state switch
      pacmd: add missing 'else' keyword

Bradley Broom (2):
      core-util: Call fchown() only when necessary
      default.pa: Use freedesktop theme sounds in sample examples

Cheng-Chia Tseng (1):
      i18n: update Chinese (traditional) translation

Colin Guthrie (8):
      man: Fix XDG_RUNTIME_DIR variable reference.
      build-sys: Clarify some systemd sub-component variable/define names.
      build-sys: Add support for newer systemd without compatibility libs
      socket-server: Add support for systemd socket activation.
      launch: Avoid specifically starting PA and rely on autospawn/socket activation
      launch: Add systemd units for launching pulseaudio user instances
      launch: Disable autospawn by default when systemd daemon support is enabled.
      build-sys: Minor cosmetic tidyup of configure summary

David Henningsson (76):
      alsa-mixer: Fix Analog Input showing up on USB Headset
      sink/source: Initialize port before fixate hook (fixes volume/mute not saved)
      module-switch-on-port-available: Don't switch profiles on uninitialized cards
      module-switch-on-port-available: Use port->card pointer
      module-switch-on-port-available: Use new find best port function
      pstream: Use pa_xnew0 in initialization
      fdsem: remove superfluous parameter in call to pa_fdsem_new_shm
      fdsem: Use atomic.h
      channelmap: Add 2.1 surround
      alsa-mixer: Add surround 2.1 profile
      po: Add two files to POTFILES.in
      module-rescue-streams: Fixup previous patch w r t fallback sink/sources
      creds: Add struct for ancillary data
      iochannel/pstream/pdispatch: Add support for receiving file descriptors
      iochannel/pstream: Support sending file descriptors
      srbchannel: Add the shared ringbuffer object
      shm: Allow to open shm in writable mode
      memblock, pstream: Allow send/receive of remote writable memblocks
      core: Add a second rw mempool
      pstream: Allow reading/writing through srbchannel
      Protocol, client: Add commands to enable srbchannel
      protocol-native: Enable srbchannel
      tests: Add pstream/srbchannel test
      creds: Unbreak build without HAVE_CREDS
      alsa: Add "exact-channels" mapping configurability
      alsa: Allow "fallback" configuration for mappings and profiles
      alsa: Add a multichannel fallback mapping
      alsa: Remove four channel input profile
      conf-parser: Add debug print of parsed files
      sink/source: Fix restore of volume on devices without hw volume
      resampler: Remove duplicate forward declaration of pa_resampler
      Make all debug/info level messages untranslatable
      Replace "authorization" with "authentication"
      alsa-mixer: Improve workaround for Valgrind's false warnings
      core-util: Fail if XDG_RUNTIME_DIR belongs to someone else
      configure: Fix spelling of "backend"
      alsa-util: Add functions for accessing mixer elements through mixer class
      alsa-mixer/card: Move to use the new mixer interface
      alsa: Remove unnecessary hctl handles being passed around
      alsa-time-test: Add fillrate parameter
      alsa-time-test: Do not use Lennart's card by default
      alsa-time-test: Make constants for channels and rate
      srbchannel: Defer reading when setting up read callback
      module-mmkbd-evdev: Don't crash on failure to close fd
      connect-stress-test: Fix number of streams per sink to "20"
      memblockq: Do not allow non-frame indices in the memblock queue
      stream: Fail on client submitting non-frame-aligned memblocks
      protocol-native: Fail if trying to push unaligned memblock into queue
      configure: Remove "WIBBLE" test
      pstream-util: Fix build on freebsd
      module-card/device-restore: Do not legacy load an empty entry
      alsa-mixer: Add support for "Headphone+LO" and "Speaker+LO"
      rtpoll: Fixup pa_rtpoll_run
      bluez 5: Build both headset backends, if available
      bluez 5: Load the native headset backend if the oFono one is unavailable
      bluez 5: Fix a debug message
      bluez 5: remove null headset backend
      bluetooth: Select headset backend through module argument
      dbus-iface: Initialize "new_active" variable to NULL
      configure: Bump sonames
      NEWS: Write entry for 6.0
      po: add pulseaudio.service.in to POTFILES.in
      build-sys: Don't build srbchannel-test on targets without srbchannel
      bluez5: Fix free order of adapters and devices
      core-util: Fix build on mingw32
      memblock: Avoid block ID collisions when exporting memory blocks
      srbchannel: Check return value of pa_memblock_new_pool
      memblock: Initialize mempool object to zero
      bluez5: Do not suspend on no -> unknown profile transitions
      Revert "launch: Disable autospawn by default when systemd daemon support is enabled."
      memblock: Fix more block ID collisions
      alsa-mixer: Mute headphones and speakers on line out path
      protocol-native: Disable srbchannel by default
      module-device-restore: Fix memory leak in read_sink_format_reply
      alsa-mixer: Make speaker unavailable when Line Out is plugged in
      Update NEWS file

Dimitris Spingos (1):
      i18n: Update Greek translation

Dusan Kazik (1):
      i18n: Add Slovak translation

Dušan Kazik (1):
      i18n: Update the Slovak translation

Evan Nemerson (1):
      client-conf: add missing directory to pulse/client-conf.x11.h include

Felipe Sateler (4):
      zsh-completion: Fix completion for default sink/source
      util: Try finding out application name using dladdr if available
      Fix #defines for Debian GNU/kFreeBSD
      pactl: fix getopt indexing for set-*-volume

Georg Chini (1):
      loopback: Don't push zero-sized block to memblockq

Hemanth Meenakshisundaram (1):
      combine-sink: fix zero adjust_time behaviour.

Hui Wang (3):
      rescue-streams: try to find best one using availability and priority
      module-switch-on-connect: add an argument for conditionally connecting
      module-switch-on-port-available: make the output more accurate

James Bunton (2):
      bluetooth: Don't abort on SBC decoding error
      bluetooth: Fix timing to count based on decoded data

Jason Newton (2):
      module-equalizer-sink: use fftwf_free in all the right places
      module-equalizer-sink: remove erroneous fixme

Javier Jardón (2):
      build-sys: Use AM_CPPFLAGS instead of AM_CFLAGS for preprocessor arguments
      build-sys: Add -fdiagnostics-color=auto to CFLAGS

Joe Marcus Clarke (1):
      daemon: Don't try to lock and synchronise threads on (k)FreeBSD

Josef Andersson (1):
      i18n: Update the Swedish translation

João Paulo Rechi Vita (21):
      bluetooth: Fix lines going over column 128
      bluetooth: Change BlueZ 5 card profile name from a2dp to a2dp_sink
      bluetooth: Rename variable to improve code readability
      bluetooth: Notify the main thread of a stream fd HUP
      bluetooth: Add basic support for HEADSET profiles
      bluetooth: Add BlueZ 5 headset profile names in policy module
      bluetooth: Create NULL backend
      bluetooth: Create oFono backend
      bluetooth: Monitor D-Bus signals
      bluetooth: Create hf_dbus_send_and_add_to_pending() for oFono backend
      bluetooth: Register/Unregister Handsfree Audio Agent with oFono
      bluetooth: List HandsfreeAudioCard objects from oFono
      bluetooth: Parse HandsfreeAudioCard properties
      bluetooth: Implement transport acquire for hf_audio_agent transports
      bluetooth: Implement transport release for hf_audio_agent transports
      bluetooth: Track oFono service
      bluetooth: Handle CardAdded signal
      bluetooth: Handle CardRemoved signal
      bluetooth: Implement org.ofono.HandsfreeAudioAgent.Release()
      bluetooth: Implement org.ofono.HandsfreeAudioAgent.NewConnection()
      bluetooth: Switch transport state to idle in case of HUP

Juho Hämäläinen (1):
      dbus: Use correct initialization for source ports hashmap.

Luiz Augusto von Dentz (6):
      bluetooth: Assert transport has a matching profile
      bluetooth: Add pa_bluetooth_transport_set_state
      bluetooth: Add pa_bluetooth_transport_unlink
      bluetooth: Only create backend instance once objects are listed
      bluetooth: Add discovery to pa_bluetooth_backend_new
      bluetooth: Allow policy module to pick 'off' profile

Lukas Peleska (1):
      jack: made it possible to use multiple jack sources and sinks

Lukasz Marek (1):
      Client API: Add pa_stream_write_ext_free() function.

Mauro Guerrera (1):
      build-sys: Fix daemon linking when building with systemd-daemon support

Michał Górny (1):
      build-sys: Alias bash-completion for all PulseAudio commands

Niels Ole Salscheider (1):
      virtual-surround-sink: Move normalization heuristic to its own function

Ondrej Holecek (1):
      update FSF addresses to FSF web page

Pali Rohár (1):
      bluetooth: bluez4: Add profile name to sinks and sources

Parin Porecha (1):
      pactl: Allow to set volume of each channel independently (Bug #39190)

Pete Beardmore (1):
      alsa: Use card description in default sink/source prefix when available

Peter Meerwald (99):
      doc: Fix a couple of 'to to' typos
      doc: Fix pa_stream_set_latency_update_callback() documentation
      tunnel-source-new: Fix shadow compiler warning
      doc: Use correct parameter name wait_for_accept in documentation of pa_threaded_mainloop_signal()
      core: add missing SET_PORT_LATENCY_OFFSET to dispatcher opcode string table
      doc: Use \since doxygen command correctly in mainloop-api.h
      doc: Fix some typos/wording in man/pulse-daemon.conf.5
      man: Fix typos in pulse-daemon.conf.5.xml.in
      pactl: Stop parsing option when the first non-option is encountered
      pactl: Check consistency of volumes specified
      pactl: Document ability to specify channel volumes individually
      pactl: Clean up checking for VOL_RELATIVE flag
      sconv: Cleanup ARM NEON code
      pacat: Mention source in addition to sink where applicable in help
      remap: Don't use PA_VOLUME_NORM
      remap: Rename pa_init_remap() to pa_init_remap_func()
      remap: Refactor channel remap table computation calc_map_table()
      remap: Make resampler's remap structure more self-contained
      remap: Split remapping functions into s16 and float implementation
      remap: Use float constant instead of double
      remap: Add helper function to setup channel arrangement information
      remap: Cleanup remap function selection, add pa_set_remap_func() helper
      remap: Change remapping function argument type from void to int16_t / float as appropriate
      remap: Add (optional) state to remap struct
      remap: Add special remapping case which just re-arranges channels
      remap: Add stereo to mono and 4-channel special case remapping
      mix: Add special-case ARM NEON code for s16 mixing
      core: Distinguish Cortex processors: A8 vs later (A9, A15)
      remap: Add ARM NEON optimized remapping and rearrange code
      core: Initialize ARM NEON remapping code if available
      tests: Adapt memblock-test to changed pa_memimport_get()
      core: Misc srbchannel cleanup
      core: Add SRBCHANNEL command names for debug
      mix: Fix mixing of S24 samples stored as S32RE
      sconv: Use optimized conversion function for both directions
      tests: Cleanup mix-test
      endianmacros: Fix PA_MAYBE_INT16_SWAP() macro
      tests: Fix mix-test on big-endian systems
      util: Fix pa_get_binary_name() on Debian/kFreeBSD
      remap: Add 4-channel to mono channel rearrangement
      tests: Add *.log and *.trs to src/.gitignore
      echo-cancel: Fix spelling of canceller
      misc: Fix format specifiers
      core-util: Avoid warnings when missing certain system calls
      tests: Check expected result of sigbus-test
      memtrap: Debian/kFreeBSD seems to signal SIGSEGV, not SIGBUS
      srbchannel: Cleanup when pa_fdsem_open_shm() fails
      srbchannel: pa_srbchannel_new() may fail
      context: Stop and return if srbchannel memblock looks fishy
      context: Handle client-side failure of pa_srbchannel_new_from_template()
      format: Don't _put() objects obtained with json_object_object_get() or json_object_array_get_idx()
      format: Use json_object_object_get_ex() instead of deprecated json_object_object_get()
      build-sys: Drop support for json 0.9
      format: Don't use deprecated json-c is_error() macro
      daemon: Debian/kFreeBSD 9.2 fails to compile due to caps
      svolume: Make volume pointer parameter const for pa_volume_float32re_c()
      endianmacros: Replace borked PA_FLOAT32_SWAP() with PA_READ_FLOAT32RE() / PA_WRITE_FLOAT32RE()
      core: Add pa_cpu_init() / cpu.c
      cpu: Don't check for both x86 and ARM code
      cpu: Add force_generic_code flag to cpu_info struct
      tests: Split cpu tests in separate files
      tests: Use single-line #ifdef for ARM NEON code
      tests: Add tests for mix special-case code
      tests: Add ARM NEON test code to cpu-mix-test
      tests: Use remap function passed in remap struct
      tests: Reorganize cpu-remap-test program
      tests: Add to remapping special case code tests to cpu-remap-test
      tests: Add rearrange remapping test cases to cpu-remap-test
      tests: Add ARM NEON test code to cpu-remap-test
      tests: Use float constants in cpu-sconv-test
      tests: Remove mix-special-test
      Remove link to CIA from README
      Cleanup !! for bool
      mainloop: Fix typo
      modules: Fix )== typos
      alsa-sink: Check for after-avail is redundant
      tests: Make global variables static in srbchannel-test
      tests: Be careful with data types to avoid cast
      rtpoll: typo
      pactl: Remove deprecated 'stat' behaviour
      resampler: Drop pointless remix variable
      asyncmsgq: Drop weird assert
      pstream: Duplicate assignment, write.data is always NULL
      mix: Make use of pa_cvolume_is_norm/muted() macros
      log: Cleanup
      core: Replace assert()s with pa_assert()s
      alsa: Precompute maximum frames per block
      iochannel: Remove unnecessary zero-initialization
      mix: pa_mix() is always called with more than one steam
      mix: Length over all chunk has already been computed by the caller
      rtpoll: Fix condition for DEBUG_TIMING output
      rtpoll: Drop extra wait_op argument to pa_rtpoll_run()
      alsa-util: Finish description of pa_alsa_set_hw_params()
      build-sys: Deprecate libsamplerate support
      macro: Abort() when pa_assert_not_reached() even for NDEBUG
      macro: Add macro PA_UNUSED
      core: Annotate variables only used within assert()s to be PA_UNUSED
      tests: Use pa_assert_se() to get rid of an used variable warning
      alsa-mixer: Use pa_assert_not_reached()

Peter Ujfalusi (1):
      alsa-util: Reset hwparams_copy before the second try of buffer setup

Pierre Ossman (6):
      protocol-native: Early request bandaid for high latency sink/source
      build-sys: don't build raop modules on win32 as they need librtp
      mainloop: avoid race-y double wakeup status
      poll: don't use shared event in Windows pa_poll()
      poll: don't let select() block on Windows
      daemon: get rid of win32 message timer

Piotr Drąg (1):
      Updated Polish translation

Rafael Ferreira (1):
      i18n: Updated Brazilian Portuguese translation

Rex Dieter (2):
      daemon: consolidate startup scripts
      daemon: ensure pulseaudio early startup on kde

Ricardo Salveti de Araujo (3):
      daemon-conf: changing default rlimit_rttime value to 200 ms
      module-stream-restore: use entry_write when filling up the database
      vala: adding missing fields for sink_input/source_output info struct

Sajeesh Sidharthan (1):
      core: Closing proper file descriptor when pipe creation fails

Sjoerd Simons (3):
      alsa-mixer: recognize Dock headphone jack
      alsa-mixer: Disable line-out if headphone jack is plugged
      Alsa: Correct port availability with multiple jacks

Tanu Kaskinen (101):
      Remove all references to the removed KDE files
      alsa: Remove a redundant check
      pactl: Fix a copy-paster error
      tunnel: Fix inverted if condition
      volume: Increase PA_SW_VOLUME_SNPRINT_DB_MAX
      mainloop-api: Improve pa_mainloop_api_once() documentation
      core-util: Make pa_yes_no() translatable
      pacat: Fix partially translated message
      zeroconf-publish: Add locking around pa_mainloop_api_once()
      zeroconf-publish: Don't react to messages while shutting down
      doxygen: Update the configuration file
      direction: Add a couple of direction helper functions
      introspect: Use pa_direction_valid() to validate port direction
      pactl: Fix crash with older servers
      util: Check that the home dir is an absolute path
      client-conf: Remove redundant function parameters
      client-conf: Don't create multiple cookie files
      zeroconf-publish: Don't assume any particular defer event ordering
      hashmap: Add pa_hashmap_remove_and_free()
      Use pa_hashmap_remove_and_free() where appropriate
      sink-input, source-output: Fix mute saving
      sink, source: Assign to reference_volume from only one place
      sink-input, source-output: Assign to volume from only one place
      sink, source: Return early from set_mute()
      sink-input, source-output: Add logging to set_mute()
      sink, source: Allow calling set_mute() during initialization
      echo-cancel: Remove redundant get_mute() callback
      sink, source: Call set_mute() from mute_changed()
      sink, source: Assign to s->muted from only one place
      sink-input, source-output: Remove redundant get_mute() functions
      solaris, tunnel: Remove some redundant boolean conversions
      sink, source: Add hooks for volume changes
      sink-input, source-output: Add hooks for volume changes
      sink, source: Add hooks for mute changes
      sink-input, source-output: Add hooks for mute changes
      bluetooth: Remove redundant assignments
      bluetooth: Fix a copy-paste error in log message
      resampler: Remove prefix from static functions
      shell-completion: Add completion for parec
      bluetooth: Add "valid" flag to pa_bluetooth_adapter
      bluetooth: Refactor device validity management
      combine-sink: Make the latency range calculation easier to read
      combine-sink: Add a convenience variable
      combine-sink: Fix the initial requested latency of new outputs
      combine-sink: Rearrange block_usec initialization
      client-conf: Don't report failure from pa_client_conf_load()
      client-conf: Move x11 and env loading to pa_client_conf_load()
      authkey: Remove pa_authkey_load(), it's redundant
      authkey: Rename pa_authkey_load_auto() to pa_authkey_load()
      core-util: Add pa_append_to_home_dir()
      esound, native: Pass an absolute path to pa_authkey_load() when using a file in the home directory
      core-util: Add pa_get_config_home_dir()
      core-util: Add pa_append_to_config_home_dir()
      authkey: Use the config home dir for relative paths
      bluetooth: Refactor POLLHUP handling
      device-manager: Add a comment about non-extensible struct
      .gitignore: Add srbchannel-test
      simple: Take locally buffered data into account in pa_simple_get_latency()
      sink-input, source-output: Assign to reference_ratio from a single place
      shell-completion: Install the Zsh completions
      shell-completion: zsh: Move duplicated code into a function
      shell-completion: zsh: Support also --server in remote detection
      shell-completion: zsh: Don't say "this help" when it's a different help
      shell-completion: zsh: Don't use multiple option sets for one command
      shell-completion: zsh: Use -S and -A with _arguments
      shell-completion: zsh: Add "=" to the end of some command options
      alsa-mixer: Fix path subset detection
      device-restore: Sync the database on unload
      raop: Don't use incompatible default sample spec parameters
      bluetooth: Always initialize profile->available
      device-manager: Don't allow setting an empty description in the client API
      alsa-mixer: Mark "Line HP Swap" as required-any
      Add a Valgrind suppression file
      core-util: Add pa_unset_env()
      switch-on-connect: Initialize userdata contents to zero
      tunnel-sink-new: Limit the maximum latency to 200 ms
      bluetooth: Move stuff to pa_bluetooth_transport_put/unlink()
      tunnel-sink-new: Fix requested latency check
      shell-completion: zsh: Mark a variable as local
      shell-completion: zsh: Rework pactl completion
      alsa-mixer: Merge analog-output-desktop-speaker with analog-output-speaker(-always)
      alsa-mixer: Ignore some elements in the analog-output path
      socket-server: Improve readability
      build-sys: Fix a variable value check
      .gitignore: Add pulseaudio.service
      shell-completion: zsh: Fix set-default-sink/source completion
      shell-completion: zsh: Fix the set-card-profile description
      dbus: Fix the ActivePort property handler
      raop: Fix a memory leak
      NEWS: Zsh completion support isn't new in 6.0
      build-sys: Always define bluetooth related HAVE_* variables
      build-sys: Fix the BlueZ 5 native headset backend check
      module: Fix unsafe iteration
      i18n: Add French translation for "Speaker"
      card-restore: Fix profile restoring with bluetooth
      tunnel-sink-new: Fix stale audio on resume
      build-sys: Don't enable libsamplerate by default
      i18n: Fix up the Turkish translation
      alsa-mixer: Add lineout to surround21 mappings
      alsa: Don't try to use ELD controls with UCM

Wim Taymans (10):
      device-restore: log restored mute state
      combine-sink: rework output add/remove
      combine-sink: add support for DYNAMIC_LATENCY
      configure: fix headset check
      bluez5-device: use get_profile_direction
      bluez5-util: add destroy function
      backend-native: add a new native headset backend
      backend-native: implement volume control
      bluetooth: set gain correctly
      svolume.orc: avoid parameter loading undefined behaviour

Yuri Chornoivan (2):
      Update Ukrainian translation
      Update Ukrainian translation

kozdincer (1):
      i18n: Add Turkish translation

poljar (Damir Jelić) (1):
      resampler: Split the resampler implementations into separate files