Home | About | Community | Download | Documentation | Planet |
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 doxygen: Enable GENERATE_DEPRECATEDLIST 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