
| Home | About | Community | Download | Documentation | Planet |
PulseAudio 10.0 release notes
Changes at a glance
- Automatically switch Bluetooth profile when using VoIP applications
- New module for prioritizing passthrough streams (module-allow-passthrough)
- Fixed hotplugging support for USB surround sound cards
- Separate volumes for Bluetooth A2DP and HSP profiles
- memfd-based shared memory mechanism enabled by default
- Removed module-xenpv-sink
- Dropped dependency to json-c
- When using systemd to start PulseAudio, pulseaudio.socket is always started first
- Compatibility with OpenSSL 1.1.0
- Clarified qpaeq license
Notes for end users
Automatically switch Bluetooth profile when using VoIP applications
Bluetooth headsets typically support both the A2DP profile, which is suitable for music, and the HSP profile, which is suitable for telephony use cases. module-bluetooth-policy will now automatically switch the profile of a Bluetooth headset from A2DP to HSP/HFP when an application creates a recording stream with property media.role=phone (telephony applications should set that property for their streams). When the stream goes away, the profile gets restored back to A2DP. This way the user doesn't have to manually switch the profiles when starting and stopping a call. This behaviour can be disabled by giving argument auto_switch=false to module-bluetooth-policy.
New module for prioritizing passthrough streams (module-allow-passthrough)
Passthrough streams are streams whose content must go completely unaltered from the application to the sound card, and they are mainly used for playing back compressed audio through an S/PDIF connection. When a passthrough stream is playing to a device, no other streams can play at the same time to the same device, and if there's already something playing when a passthrough stream is created, the passthrough stream creation will normally fail. Now we have a new module, called module-allow-passthrough, which will give higher priority to passthrough streams, so that if there are other streams playing when a passthrough stream is created, those other streams will be moved out of the way to a dummy device.
Fixed hotplugging support for USB surround sound cards
A long-standing bug that prevented PulseAudio from using any hotplugged USB surround sound cards has been fixed.
Separate volumes for Bluetooth A2DP and HSP profiles
The Bluetooth sink and source names are now different depending on whether the active profile is A2DP or HSP. This allows PulseAudio to store different volumes for A2DP and HSP. Due to different mechanisms for implementing volume control between the profiles, trying to use the same volume value in PulseAudio doesn't actually result in the same perceived volume, so it's better not to try to use the same volume.
As an unfortunate transition effect, volumes saved earlier with an older PulseAudio version won't have effect in the new PulseAudio version, so all Bluetooth devices will have their volume reset to the default value when running the new PulseAudio version for the first time.
This only affects BlueZ 5 users. The same change was done already earlier for PulseAudio's BlueZ 4 code.
memfd-based shared memory mechanism enabled by default
The memfd-based shared memory mechanism that was implemented in 9.0 is now enabled by default. This shouldn't cause any user-visible changes in behaviour, except if you're using the Firejail sandboxing software, which doesn't work with PulseAudio's old shared memory mechanism.
If desired, the feature can still be disabled by setting "enable-memfd = no" either in daemon.conf (for disabling it at the server side) or in client.conf (for disabling it at the client side).
Removed module-xenpv-sink
module-xenpv-sink was removed, because it's probably not used by anyone. If you use it, please let us know.
Notes for packagers
Dropped dependency to json-c
libpulse previously used json-c internally, which forced applications to link to json-c too. That caused crashing in some GLib applications, because json-c and json-glib both use the same name for some functions. To solve this, we implemented the necessary JSON functionality directly in libpulse, so we don't depend on json-c any more.
When using systemd to start PulseAudio, pulseaudio.socket is always started first
The pulseaudio.service unit now depends on pulseaudio.socket, meaning that before systemd starts PulseAudio, it will always first set up the socket. This is done to avoid confusing behaviour in certain corner cases (see the comments in pulseaudio.service for a more detailed explanation).
Compatibility with OpenSSL 1.1.0
OpenSSL, which is used by module-raop-sink, broke backwards compatibility in the 1.1.0 release. PulseAudio now supports both 1.1.0 and older versions.
Clarified qpaeq license
Most of PulseAudio is licensed under LGPL, but the "qpaeq" equalizer GUI is licensed under AGPL. That hasn't previously been mentioned anywhere else than in the qpaeq source code itself. Therefore, distributions that tag their packages with license information have likely used incorrect information. The license of qpaeq hasn't changed, but the use of AGPL is now correctly noted in the top-level LICENSE file.
git shortlog
Ahmed S. Darwish (7):
pstream: Add rationale for pa_cmsg_ancil_data_close_fds()
protocol-native: DRY: Remove pdispatch callbacks declarations
iochannel: Strictly specify PF_UNIX ancillary data boundaries
protocol-native: Don't signal memfd support for 9.0 clients
pacat: Synchronize STDIN and "write stream ready" events
stream: Frame-align divided audio segments
pacat: Write to stream only in frame-sized chunks
Aidan Gauland (1):
qpaeq: Don't set font-size on widgets
Alexander E. Patrakov (1):
alsa: reread configuration when opening new devices
Anton Lundin (1):
raop: Correct spelling of KTH
Arun Raghavan (21):
client, protocol-native: Use macros for protocol version/flag access
allow-passthrough: Use pa_module_hook_connect()
i18n: Add module-allow-passthrough to POTFILES.in
pulse: Add a JSON-parsing library
format: Drop dependency on json-c
json: Correctly handle bad strings with missing closing quotes
json: Add overflow checks for integer and float parsing
json: Handle error cases while parsing numbers
json: Error out for objects and arrays that are nested too deep
json: Add a positive test for nested objects
json: Add some more negative test cases
json: Drop refcounting of json objects
device-port: Add mechanism to free implementation data
alsa: Use pa_device_port->impl_free() for freeing port data
modargs: Add a mechanism to append modargs
daemon: Tone down system mode snarkiness
memblockq-test: Rename test to something more relevant
sink-input,source-output: Fix a leak during property change logging
source-output: Fix copy-pasto
shm: Wrap memfd-specific code in relevant ifdef
stream-interaction: Fix a memory leak
Balázs Úr (1):
i18n: update Hungarian translation
Chris Billington (2):
source: Fixed bug: pa_source_set_port() did not update the latency_offset.
sink, source, device-port: renames to distinguish latency offsets
Cédric Valmary (1):
i18n: update Occitan translation
Deepak Srivastava (1):
xen: Fixed possible memory leak.
Dušan Kazik Kazik (1):
i18n: Update Polish translation
Felipe Sateler (1):
launch: make pulseaudio.service properly order and require the socket
Fran Dieguez (1):
i18n: add Galician translation
Georg Chini (8):
loopback: Save time stamps during latency snapshots
loopback: Improve latency estimation in snapshots
loopback: Improve latency estimation
loopback: Change memblockq length
loopback: Move timer restart and snapshots to timer callback
loopback: Restart timer after 1/3 second
loopback: Adjust rate based on latency difference
loopback: Stop tracking max_request and min_memblockq_length
Guillaume Desmottes (1):
allow-passthrough: Add module to allow passthrough streams always go through
Jan Alexander Steffens (heftig) (1):
launch: Remove the already implicit After=pulseaudio.socket
John Paul Adrian Glaubitz (2):
pulsecore: Fix incorrect architecture mapping on sparc64.
core-util: Use _SC_NPROCESSORS_ONLN instead of _SC_NPROCESSORS_CONF
Juha Kuikka (1):
bluetooth: fix race condition in BlueZ5 device disconnection
Juho Hämäläinen (1):
pulsecore: Don't allow unreferencing linked object.
KimJeongYeon (1):
ladspa-sink: avoid to configure invalid format
Marcin Lewandowski (1):
core-util: log error if we hit file descriptors limit
Mario Blättermann (1):
i18n: update German translation
Moo (1):
i18n: add Lithuanian translation
Nils Schneider (1):
pipe-sink: align buffer
Pali Rohár (3):
bluetooth: Add support for automatic switch between hsp and a2dp profiles
bluetooth: bluez5: Add profile name to sinks and sources
bluetooth: Add support for automatic switch between hsp and a2dp profiles also for bluez5
Peter Meerwald (2):
tests: Include signal.h in core-util-test.c
build: Check version of check library, require >= 0.9.10
Peter Meerwald-Stadler (16):
sink-input,source-output: Fix logging, don't overwrite old_value when value == 0
alsa: Check pa_modargs_get_value_boolean() retval for use_ucm
tests: Assert fillrate > 0 in alsa-time-test
stream: Check pa_tagstruct_get_format_info() retval in pa_create_stream_callback()
modules: Check pa_threaded_mainloop_start() return value
tests: Check pa_rtpoll_run() return value
modules: Use pa_assert_se() to check return value of dbus_message_iter_close_container()
Remove newline at end of log messages
bluetooth: Don't free modargs twice
bluetooth: Fix dead code
bluetooth: Reorganize code to avoid Coverity NULL dereference warning
bluetooth: Fix negative array index write
padsp: Fix flush and improve error handling
core: Replace PA_PAGE_SIZE with pa_page_size()
tests: Assert granularity range in stripnul.c
sample: Assert validity of sample_spec
Philip Withnall (1):
zeroconf-discover: fix a memory leak
Pierre Ossman (3):
memblockq: move minreq handling in to memblockq
tests: add test to verify correct minreq behaviour
memblockq: remove internal "missing" state variable
Piotr Drąg (2):
i18n: fix errors and warnings in Belarusian and Korean translations
i18n: update Polish translation
Rikard Söderström (1):
daemon-conf: changed 'not' to 'note'
Romain Naour (1):
build-sys: C++11 is only required for WebRTC support
Sylvain Baubeau (1):
zeroconf: use local icon for shared devices
Tanu Kaskinen (41):
pstream: fix revoke callback setting
webrtc: improve comment about mic geometry
alsa, bluetooth: fail if user-requested profile doesn't exist
card: don't allow the CARD_NEW hook to fail
card: move profile selection after pa_card_new()
card: remove pa_card_new_data.active_profile
alsa: set availability for (some) unavailable profiles
launch: explain why .service depends on .socket
bluetooth: wait for all profiles to connect before creating card
card-restore: don't switch profiles when availability changes
bluetooth: remove a redundant assignment
bluetooth: update device's valid flag after parsing properties
bluetooth: unify BlueZ 4 and BlueZ 5 UUID handling
bluetooth: unify BlueZ 4 and BlueZ 5 profile constant names
bluetooth: refactor BlueZ 4 transport state setting
bluetooth: don't create the HSP/HFP profile twice
zeroconf-publish: fix uninitialized variable
zeroconf-publish: unref D-Bus connection
daemon-conf: enable memfd by default
raop: add compatibility with openssl 1.1.0
remove module-xenpv-sink
module: postpone lt_dlclose() until a safe time
rtp: don't use memblocks for non-audio data
don't assume that pa_asyncq_new() always succeeds
bluetooth-policy: do A2DP profile restoring a bit later
suspend-on-idle: use earlier (safer) hooks for stream unlink notifications
sink-input, source-output: set sink/source to NULL before the "unlink post" hook
sink, source: unify stream "attached" flag checking
sink, source: add missing stream "attached" flag handling
sink, source: remove some assumptions about stream "attached" state
refactor stream attaching/detaching
build-sys: add LICENSE.WEBKIT to EXTRA_DIST
Revert "memblockq: remove internal "missing" state variable"
LICENSE: add a clarification
LICENSE: add a note about qpaeq being licensed under AGPL
memblockq: remove pa_memblockq_missing()
memblockq-test: fix incorrect assumption of pa_memblockq_pop_missing() behaviour
build-sys: bump sonames
zeroconf-publish: fix unitialized DBusError
update NEWS
build-sys: add the AGPL license file to tarballs
Ulrich Eckhardt (10):
core-util-test: Add boilerplate
core-util-test: Add tests
core-util: Improve pa_replace() behaviour
modargs: Document behaviour on missing arguments
memblockq-test: Utility function to alloc chunks
memblockq-test: Utility function to validate queue invariants
memblockq-test: Some refactoring
memblockq-test: Add a test that checks initial properties
memblockq-test: Add test changing the parameters of a queue
memblockq-test: Add a test for missing data behaviour
Viktar Vaŭčkievič (1):
i18n: add Belarusian translation
