Logo

HomeAboutCommunityDownloadDocumentationPlanet


PulseAudio 8.0 release notes

Changes at a glance

  • Automatic routing more likely to change profile
  • OS X and NetBSD support improvements
  • Systemd journal logging for clients
  • New LFE balance programming interface
  • Module-dbus-protocol improvements
  • More flexible configuration file handling
  • pulsecore-8.0.so moved to a private directory
  • New script for measuring memory consumption
  • Various bug fixes and small improvements

Notes for end users

Automatic routing more likely to change profile

In case a sound card contains more than one profile (e g analog and HDMI profiles), module-switch-on-port-available will now switch away from the profile when no ports are available. E g, on a HTPC with headphones and HDMI outputs only, unplugging headphones will reroute the sound to HDMI, which did not work before. In addition, we also remember the last used profile for a port, so the expected HDMI profile is chosen (instead of just falling back to stereo).

Note that many systems have HDMI and analog output on separate sound cards, so this might not improve the situation for all systems.

OS X support improvements

Some improvements were made to PulseAudio's OS X support. The most notable change is that the default configuration should now work out-of-the-box, thanks to adding module-coreaudio-detect to the default configuration.

NetBSD support improvements

PulseAudio is available to NetBSD users through the pkgsrc framework. The pkgsrc version of PulseAudio has carried many patches, most of which have now been applied upstream, so the difference between the upstream and pkgsrc versions is now much smaller.

PULSE_LOG_JOURNAL environment variable

If the PULSE_LOG_JOURNAL environment variable is defined, all client libraries will log their output to the systemd journal. (If both PULSE_LOG_JOURNAL and PULSE_LOG_SYSLOG are defined, logging to the systemd journal takes a higher precedence.)

New script for measuring memory consumption

A new script was created for measuring, and plotting, the server memory consumption growth when the number of clients increases. The script's location is scripts/benchmark_memory_usage.sh in the source code tree, and it's meant to only be run from the source code tree.

Notes for application developers

New LFE balance programming interface

There's a new API for controlling the LFE (a.k.a. subwoofer) channel volume relative to all other (except mono and aux) channels.

Some background: the "native" volume representation in PulseAudio is to have independent volume for each channel, but some UIs may prefer to have one "overall volume" slider and two sliders for controlling the left-right and rear-front balances. There have always been helper functions for mapping the left-right and rear-front balances to per-channel volumes and vice versa. The LFE channel is not included in any of the conversions, however. To allow users to also control the LFE channel volume some UIs (at least the Gnome sound configuration tool) have added the LFE channel control as a separate slider, but in practice that had weird interactions with the overall volume slider.

To resolve this problem, we now have helper functions for controlling the balance between LFE and non-LFE channels, which allow changing the balance without affecting the overall volume. All applications that present the left-right and rear-front balances to the user are advised to start using the new API for dealing with the LFE volume.

The new functions are pa_cvolume_get_lfe_balance, pa_cvolume_set_lfe_balance and pa_channel_map_can_lfe_balance.

Module-dbus-protocol improvements

Port and card profile availability is now visible through the D-Bus API.

Notes for packagers

More flexible configuration file handling

The configuration files /etc/pulse/client.conf and /etc/pulse/daemon.conf can now be amended by creating files under /etc/pulse/client.conf.d and /etc/pulse/deamon.conf.d. This makes it easier for distributions to handle a situation where some configuration option should be set differently if a particular package is installed. Options set in the files installed in the .d directories override the options set in the main files.

pulsecore-8.0.so moved to a private directory

pulsecore-X.Y.so used to be installed in the top level /usr/lib directory, but that was not a good place for it, since it's an internal library not meant for applications. The library is now installed under /usr/lib/pulseaudio.

git shortlog

Ahmed S. Darwish (5):
      log: Introduce PULSE_LOG_JOURNAL environment variable
      log: Fix compilation error on non-systemd systems
      build-sys: bootstrap.sh: Do a make only if configure has succeeded
      scripts: Introduce benchmark_memory_usage.sh
      scripts: Plot memory benchmarks using gnuplot

Alexander E. Patrakov (1):
      alsa-sink: Don't pretend to support passthrough on HDMI surround sinks

Andrey Semashev (1):
      soxr: Use soxr_clear() if libsoxr version is 0.1.2 or later.

Arun Raghavan (15):
      resampler: Don't expose soxr methods if they are not supported
      tests: Set appropriate timeouts for a couple of tests
      build: Add IRC notifications to Travis
      sink: Make early drain reporting propagate down to filters
      source: Deal with filter having more channels than the master
      alsa: Use helper function for byte conversion across sample specs
      tests: Make echo-cancel-test not crash
      echo-cancel: Don't skip canceller when sink is inactive
      build: Move to using Travis trusty images
      daemon: Sanitise message about unsupported high res timers
      alsa: Don't disable timer-based scheduling on USB devices
      sink-input, source-output: Add some debug output on start_move()
      stream: Clarify pa_stream_writable_size() documentation
      build-sys: Use #ifdef with HAVE_FAST_64BIT_OPERATIONS
      Update NEWS for 8.0

David Henningsson (23):
      alsa-mixer: Add "Mic Boost" and "Line Boost" to analog-input.conf
      client: Use pa_xnew0 when creating a client
      card: Use pa_xnew0 when creating a card
      shm: Warn on not being able to open shm files
      card: Use pa_xmalloc0 when creating card profiles
      module-alsa-card: Report available ports before unavailable ones
      pstream: Fix use-after-free in srb_callback
      alsa-mixer: Ignore volume with unexpected number of channels
      volume: Refactor get/set balance/fade
      volume: Add LFE balance API
      alsa-mixer: Add "Front Headphone" to headset mic path
      alsa-mixer: Return early in case of no mixer poll descriptors
      card: Add variables for splitting up a profile
      alsa-mixer: Fill in input and output names
      device-port: Add preferred_profile field to pa_device_port
      card: Update preferred_profile for ports when profile changes
      card-restore: Save and restore "preferred profile" of port
      module-switch-on-port-available: Use input and output names
      module-switch-on-port-available: Route to preferred profile
      module-card-restore: Remove "version" from internal entry struct
      card: Only update port's preferred profile if profile is saved
      typedefs.h: Move some typedefs to a separate file
      gitignore: Add .orig and .rej to gitignore

Deepak Srivastava (1):
      Rename functions with "tostring" in the name to one with "to_string" to conform with the convention.

Felipe Sateler (5):
      daemon: Use Type=notify for systemd service
      pulseaudio.1: document that systemd notification only works without daemonization
      build-sys: Make pulsecore a private library
      travis: Run make install in travis.
      build-sys: Fix install order of libpulsecore

Georg Chini (2):
      null-sink: correct update of timestamp when state changes to RUNNING or IDLE
      loopback: Validate the rate parameter

Jason Gerecke (1):
      bluetooth: Prevent aborts caused by invalid module arguments

John Horan (1):
      make availability of ports visible over dbus

Juho Hämäläinen (2):
      dbus: Add card profile availability info to API
      alsa-mixer: Have valid proplist for synthesized path as well.

Julien Isorce (2):
      core-util: avoid calling fchmod if already right mode
      thread-mainloop: keep SIGSYS unblocked if currently trapped

Kamil Rytarowski (7):
      netbsd: NetBSD ships with paccept(2) a superset of Linux-specific accept4()
      netbsd: Improve handling of  and  headers
      netbsd: Fix unportable test(1) construct
      core-rtclock: Add missing declaration of struct timespec
      core, pulse, modules: Fix undefined behavior with array subscript of invalid type
      netbsd: Revamp NetBSD platform checks
      NetBSD: Stop depending upon nonstandard __WORDSIZE

KimJeongYeon (1):
      module-tunnel: Fix double free

Kiran Krishnappa (1):
      module: Remove redundant core argument from pa_module_unload()

Lev Melnikovsky (1):
      rtp: fix non null terminated string / non portable sscanf

Manish Sogi (1):
      bluetooth: bluez4: Remove the unused "auto_connect" parameter as it is not used in bluez4

Mihai Moldovan (4):
      configure.ac: add HAVE_COREAUDIO to automake and code.
      default.pa.in: load module-coreaudio-detect if HAVE_COREAUDIO.
      system.pa.in: load module-coreaudio-detect if HAVE_COREAUDIO.
      module-coreaudio-device: get channel name as CFString and convert to plain C string.

Mingye Wang (Arthur2e5) (1):
      i18n: Updated zh_CN translation

Nazar Mokrynskyi (1):
      alsa-mixer: sb-omni-surround-5.1.conf: remove analog-surround-21, add Linux 4.3+ support

Peter Mattern (1):
      pacmd: Fix typo in set-default-* help

Peter Meerwald (1):
      core: Fallbacks for machine-id in filesystem

Pierre Ossman (1):
      context: continue without srbchannel if it fails

Ross Burton (1):
      git-version-gen: Avoid further processing when tarball-version is present

Shawn Walker (1):
      build-sys: don't use the nodelete linker flag on executables

Takashi Iwai (1):
      alsa-mixer: Recognize "Dock Line Out" jack

Tanu Kaskinen (12):
      alsa-mixer: Add "Dock Line Out" jack handling to analog-output-speaker-always
      build-sys: fix the default bash completion directory
      alsa-ucm: fix pa_device_port.profiles leak
      man: document when system.pa is used instead of default.pa
      man: remove a reference to pacmd from default.pa.5
      core-util: improve comments in pa_machine_id()
      build-sys: fix PULSE_LOCALEDIR definition
      conf-parser: add support for .d directories
      client-conf, daemon-conf: enable .d directories
      always-sink: simplify hook management with pa_module_hook_connect()
      build-sys: bump sonames
      build-sys: add typedefs.h to libpulsecore SOURCES

Thomas Petazzoni (1):
      pulsecore/packet: avoid redefinition of pa_packet structure

Yuri Chornoivan (1):
      i18n: Update Ukrainian translation

Zbigniew Kempczyński (1):
      alsa-sink: Avoid unloading alsa-sink module before calling try_recover()

jungsup lee (1):
      rtpoll: Fix build error when building with DEBUG_TIMING