
| Home | About | Community | Download | Documentation | Planet |
PulseAudio 7.0 Release Notes
Changes at a Glance
- LFE channel synthesis with low-pass filtering
- New libsoxr based resamplers
- Socket activation support for TCP
- The "srbchannel" IPC mechanism enabled by default
- More flexible jack detection support when using UCM
- Exiting due to SIGTERM isn't considered a failure
Notes for Application Developers
(nothing important happened)
Notes for Packagers
There's a new optional dependency on libsoxr. The minimum supported version is 0.1.1. libsoxr is used for the soxr-mq, soxr-hq and soxr-vhq resamplers.
Changes in More Detail
LFE channel synthesis with low-pass filtering
When the speaker system has a subwoofer, it's often desirable to synthesize the LFE channel audio when the original audio content doesn't have a separate LFE channel. Previously PulseAudio supported doing that by simply feeding the average of all input channels to the LFE channel, but it's often better to filter out any high frequencies going to the subwoofer. That's now supported, and enabled by default.
The default value of "enable-lfe-remixing" in daemon.conf has changed from "false" to "true", and there's a new daemon.conf option for configuring the crossover frequency: "lfe-crossover-freq". The crossover filtering can be disabled by setting "lfe-crossover-freq" to zero, and if "enable-lfe-remixing" is "true", then the old LFE synthesis algorithm is used.
New libsoxr based resamplers
There are three new libsoxr based resamplers available: soxr-mq, soxr-hq and soxr-vhq. Quality-wise all should be perfect (no audible distortions), but the hq and vhq variants can be used if "even more perfect" quality is desired. The libsoxr developers recommend the hq variant for bit depths up to 16 bits, and the vhq variant for higher bit depths (the internal processing happens with higher precision in the vhq variant). The statement that even the mq variant is "perfect" is based on Alexander E. Patrakov's measurements using a psychoacoustic model for determining whether any produced distortions are actually audible (they're not). The model is described in this paper: http://www.mp3-tech.org/programmer/docs/6_Heusdens.pdf
The mq and hq variants have better performance than speex-float-1 (the current default resampler). We would make soxr-mq the default resampler, if it wasn't for one significant drawback: the resamplers usually introduce up to around 20 ms of extra latency, and in some rare cases even more.
More discussion about the merits and shortcomings of the new resamplers can be found in this mailing list thread: http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/22158
Here are some benchmarking results: http://lastique.github.io/src_test/
Socket activation support for TCP
The previous release introduced support for systemd socket activation for unix sockets. Now the support has been extended to cover TCP sockets as well. This allows PulseAudio to be started on-demand on headless servers, for example.
The "srbchannel" IPC mechanism enabled by default
The "srbchannel" IPC mechanism, which improves efficiency particularly on low latency streams, was introduced in the previous release, but it was too buggy to be enabled by default at that time. Bugs have been fixed since, and now the feature is enabled by default.
More flexible jack detection support when using UCM
Systems that use ALSA's UCM (use case manager) for describing the hardware can now configure the jack kcontrol for a device using the "JackControl" value. Previously, jack detection with UCM relied on implicit heuristics for the jack kcontrol name, which didn't always work well enough. Also, the "JackHWMute" value for UCM devices is now supported, so PulseAudio understands when plugging in a jack for one device makes another device unavailable.
Exiting due to SIGTERM isn't considered a failure
When PulseAudio receives SIGTERM, the process now exits with return value 0. Previously the return value was 1, signaling a failure, which didn't make much sense. If you have e.g. scripts or systemd service definitions that are interested in the process return value, they may need some modification.
Better support for Creative SoundBlaster Omni Surround 5.1
The Creative SoundBlaster Omni Surround 5.1 USB sound card sets up its microphone ALSA device in a way that PulseAudio doesn't support with the default configuration. The card now has its own configuration file in PulseAudio to make the microphone work.
git shortlog
Ahmed S. Darwish (1):
pulse: Document client libraries logging behavior
Alexander E. Patrakov (4):
Make pa_socket_server_new static
module-loopback: don't use 0 for custom source output message id
echo-cancel: fix the obviously-wrong "buffer+=buffer" logic
loopback: Fix the obviously-wrong "buffer+=buffer" logic
Andrey Semashev (4):
Added libsoxr resampler backend.
Enabled libsoxr resampler backend.
Added libsoxr detection and optional build of soxr resampler backend.
Added documentation for soxr resampling methods.
Andrey Zholos (1):
detect: Fix OSS device detection with long names
Arun Raghavan (17):
sink-input: Clarify the meaning of rewrite and flush a bit in rewinds
udev: Deal with unavailable bus property
protocol-native: Fix source latency calculation in ADJUST_LATENCY mode
rescue-streams: Document a cryptic looking condition
rescue-streams: Fix a couple of typos
stream: Support extended API with PULSE_LATENCY_MSEC if possible
sink,source: Add a helper function to check whether this is a filter
always-sink: Ignore filter sinks
echo-cancel: Handle underlying sink going away better when autoloaded
equalizer: Handle underlying sink going away better when autoloaded
build-sys: Fix distcheck for systemd user unit dir
build-sys: Make echo-cancel use speex cflags/libs conditionally
build-sys: Fix up setting the bash completion dir
alsa-mixer: Drop redundant conditional frees
alsa: Clarify potentially confusing device port data field
lfe-filter: Deal with empty input chunks
Update NEWS for 7.0 release
Cédric Valmary (1):
i18n: add Occitan translation
David Henningsson (29):
alsa-util: Make two of the warnings "debug" instead of "error"
pstream: Don't split (non-SHM) memblocks
protocol-native: Re-enable srbchannel
pstream: Remove unnecessary if condition
thread-mq: Make pa_thread_mq_done more robust
lfe-filter: Import code from the Chrome OS audio server
lfe-filter: Enable LFE filter in the resampler
lfe-filter: Cleanup and refactor
memblock: Change pa_memblock_new_malloced to an inline function
lfe-filter: Add rewind support
resampler: Make some basic functions for rewinding
resampler: Allow disabling the LFE filter by setting crossover to 0
resampler: Rename "lfe_filter_required" to "lfe_remixed"
module: Add hook dynarray
module-*-restore: use pa_module_hook_connect
module-suspend-on-idle: use pa_module_hook_connect
module-alsa-card: use pa_module_hook_connect
module-filter-*: use pa_module_hook_connect
module-switch-*: use pa_module_hook_connect
alsa-mixer: Use separate profiles for Multichannel Input/Output
alsa-mixer: Add paths/ports for multichannel profile
core-util, pactl: Make one localised and one non-localised version of pa_yes_no
alsa-mixer: Make line out path unavailable when "Front Headphone" is plugged in
lfe-filter-test: Use S16NE format
echo-cancel: Add config.h in adrian-aec.c
stream: Check sample spec validity before abiding PULSE_LATENCY_MSEC
module: Warn about modules loaded after unload
alsa-mixer: Add "Front Line Out" and "Rear Line Out"
module: Always remove freed module from modules_pending_unload
David Herrmann (1):
core-util: Fix set_nice() to use private bus connections
Deepak Srivastava (3):
padsp: Avoid possible deadlock. Unlocked i->mainloop before returning from default case.
patcl: Error msg from pactl not quite accurate for 'mute' commands
Removed exclamation marks from user-visible messages.
Dušan Kazik (2):
i18n: update Slovak translation
i18n: Update Slovak translation
Felipe Sateler (5):
Add a .travis.yml for Travis CI
man: fix reference to --daemonize option
Fix return code check of pa_append_to_home_dir
util: pa_get_fqdn: always free addrinfo
sink, source: Do not dereference freed memory when freeing the next events
Hui Wang (5):
lfe-filter: change the crossover frequency as a parameter
tests: adding lfe-filter-test
daemon-conf: enable the lfe remixing by default
tests: Remove a redundant mempool_new from resampler-test
tests: add tolerant variation for comparing the rewind result
Jaska Uimonen (1):
socket-server: add tcp support for systemd socket activation
Juho Hämäläinen (17):
dbus: Use hooks for card profile events
dbus: Use hooks for client proplist changes
dbus: Use hooks for sink and source events
dbus: Use hooks for sink-input and source-output events
dbus: Use state changed hook for sink-input and source-output rate changes
core: Add hooks for default sink and source changes
namereg: Fire hooks for default sink and source changes
dbus: Use hooks for put and unlink
dbus: Use hooks for default sink and source changes
core: Add core hooks for module changes
module: Fire hooks for new, proplist changed and removed
core, core-scache: Fire hooks for new, changed and removed events
dbus: Use hooks for sample cache new and removed events
dbus: Use hook for sample cache proplist changes
dbus: Use hooks for module new and removed events
dbus: Use hooks for module proplist changes
Revert "Warn on loading module-dbus-protocol"
Manish Sogi (2):
xen: Resource leak in local function alloc_gref() - alloc_fd and dev_fd
pacmd: Placeholders describing command line options should not have spaces
Michael Cree (1):
tests: Fix test-suite failure on Alpha
Milo Casagrande (1):
Update Italian translation.
Muhammet Kara (1):
i18n: Updated Turkish translation
Nazar Mokrynskyi (1):
alsa-mixer: Add support for Creative SoundBlaster Omni Surround 5.1 USB sound card
Paul Menzel (1):
lfe-filter: Use length modifier `z` for type `size_t`
Peter Meerwald (29):
context: pa_context_connect() with PA_CONTEXT_NOFAIL should return 0 when waiting for PA on D-Dus
man: Describe optional prefix {string} in server address
man: Drop separate paplay man page, move info to pacat man page
man: Install man page symlinks to pacat for paplay, parec, parecord, pamon
pacat: State purpose of program depending how it was invoked
alsa-util: No logging when sound card only supports non-interleaved sample format
alsa: Fix spelling of officially
tagstruct: Distinguish pa_tagstruct_new() use cases
tagstruct: Replace dynamic flag with type
tagstruct: Get rid of pa_tagstruct_free_data()
tagstruct: Add type _APPENDED
tagstruct: Use flist to potentially save calls to malloc()/free()
packet: Hide internals of pa_packet, introduce pa_packet_data()
packet: Make pa_packet_new() create fixed-size packets
packet: Introduce pa_packet_new_data() to copy data into a newly created packet
packet: Use flist to save calls to malloc()/free()
pacat: Fix comment wording
man: Fix typos in pulse-cli-syntax.5
man: Document .ifexists CLI meta command
daemon: Exit with code 0 on SIGINT and SIGTERM
pulse: Document pa_mainloop_quit()'s retval parameter
core: Don't export pa_rtpoll_quit(), only used internally
biquad: Make use of M_SQRT2 constant
biquad: Fix warning, gamma shadows global declaration
padsp: Fix wrong condition discovered by -Wlogical-not-parentheses warning
core: Work around -Wlogical-not-parentheses warnings
daemon: No need to check optarg, -p requires argument
core: Add missing return on protocol error
modules: Fix entry leak in module-card-restore
Pierre Ossman (1):
core: make sure we use the correct win32 socket errno:s
Piotr Drąg (1):
i18n: Update Polish translation
René J. V. Bertin (1):
coreaudio: Change error type to OSStatus
Sagar Nageshmurthy (1):
Fix: Prevent calling pa_rtpoll_free() for a NULL rtpoll
Shawn Walker (1):
modules: Fix struct namespace collision on Solaris
Sukesh Adiga (1):
cpu-arm: Fix memory leak in pa_cpu_get_arm_flags()
Takashi Sakamoto (1):
udev: use ID_MODEL/ID_VENDOR to give friendly name for FireWire devices
Tanu Kaskinen (33):
socket-server: pa_socket_server_new() can't fail, so don't check its return value
dynarray: Add pa_dynarray_last()
dynarray: Add pa_dynarray_remove_by_index()
dynarray: Add pa_dynarray_remove_by_data()
dynarray: Add PA_DYNARRAY_FOREACH
tagstruct: Refactor writing/reading basic types
alsa: Don't access pa_sink/source_new_data after done() has been called
core-util: Make number parsing stricter
ucm: Add support for "JackControl"
.gitignore: Add lfe-filter-test
sink, source: Fix a volume change leak
pactl: Fix relative volume parsing
core-util: Filter out not-a-numbers in pa_atod()
core-util: Make pa_parse_volume() more strict
oss: Use the correct fd when interacting with the mixer
build-sys: add winerrno.h to libpulsecommon_SOURCES
combine-sink: Fix unsafe message handling
alsa-mixer: Add descriptions for analog-stereo-input and analog-stereo-output mappings
build-sys: make error message visible
alsa: Add pa_alsa_jack_new() and pa_alsa_jack_free()
ucm: Don't create separate input and output jacks
alsa: Add associations between jacks, UCM devices and UCM ports
alsa: Move UCM port availability updating to the mixer code
ucm: Create only one jack object per kcontrol
ucm: Add support for "JackHWMute"
build-sys: bump sonames
update NEWS for 7.0
alsa-mixer: sb-omni-surround-5.1.conf: rename analog-stereo to analog-stereo-output
alsa-mixer: sb-omni-surround-5.1.conf: remove analog-surround-40 mapping
build-sys: check strtod_l instead of strtof_l
core-util: include xlocale.h when using strtod_l()
build-sys: bump sonames
build-sys: add sb-omni-surround-5.1.conf to Makefile.am
Ville Skyttä (1):
build-sys: Install bash completion to where bash-completion.pc says
Wim Taymans (1):
Add korean translation
Yuri Chornoivan (1):
i18n: Update Ukrainian translation
Zavadovsky Yan (1):
build-sys: fix order of libraries installation
