PulseAudio 13.0 is out now! Read the release notes to find out what’s new.
Last month I did some work on pavucontrol. I finished the patch that changes the stream device selection button to a drop-down list (that’s still pending review). I also fixed the logic of when pavucontrol shows advanced options for sinks and sources. It used to hide the compressed format configuration for all sinks that don’t have any ports. That didn’t cause problems before, because it used to be so that all sinks that support compressed formats happened to also have ports, but now the null sink also supports compressed format configuration, and the null sink doesn’t have ports. While working on that, I also noticed that the sink and source widgets didn’t handle updates from the server correctly. Every update caused pavucontrol to send a “set port” command to the server using the currently selected port, which often isn’t that harmful, but it could cause trouble in some cases, because PulseAudio needs to know when a port has been selected by the user and when it has been selected as part of some automatic policy. That’s now fixed.
module-null-sink can be configured at load time to support compressed formats, but it didn’t support changing the supported format list at runtime. All the “hard” parts of that were actually already implemented, the only thing missing was a flag that marks the sink as one that supports runtime format configuration. I added that flag, and together with the pavucontrol fixes it’s now possible to use pavucontrol (or pactl) to configure the null sink formats at runtime. That’s not particularly exciting for regular users, though; the compressed format support in the null sink is useful mainly for debugging and testing.
The Modules wiki page was missing documentation for module-null-sink’s “formats” argument, I fixed that shortcoming.
Flat volumes have always been a controversial feature in PulseAudio. If you’re not familiar with the feature, here’s a short summary: with flat volumes the stream volumes control also the sink volume. In the simple case of only one stream, the stream and the sink volume are always the same. In case of multiple streams, the sink volume is set to the maximum of the stream volumes. The purpose of this is to simplify the volume control of an application: the full volume range is always available via the application volume slider, so there’s no need to think about the sink volume. In practice, however, this has caused more harm than good (the worst problem is that some application automatically set their stream volume to 100%, causing the audio to be played at the maximum volume that the hardware can produce), and most large distributions have patched PulseAudio to disable flat volumes by default. I’ve been meaning for a long time to submit a patch to disable the feature by default also in upstream, and now that’s finally done.
Here’s a list of patches I reviewed last month:
- Samuel Thibault submitted a patch by Svante Signell to make the webrtc-audio-processing library build on GNU/Hurd and GNU/kFreeBSD.
- Jan Alexander Steffens fixed the module-tunnel-sink build when using Meson, and he also fixed the way how X11 compiler flags are passed to module-tunnel-source.
- Rasmus Thomsen fixed the Meson build system to work with musl, which requires linking to an external libintl library.
- Arun Raghavan updated an older merge request that implements automatic channel reconfiguration for passthrough streams. It’s needed for high bitrate passthrough streams (Dolby TrueHD and DTS-HD Master Audio). Support for those high bitrate passthrough streams were advertised in the 13.0 release notes, but it turned out that it didn’t actually work yet, because we forgot that these patches were needed for it to work. I reviewed the first three patches (and requested several changes), I will continue with the rest soon.
- Peter Levine made a fix for a build failure with Clang 9.0.0. The new Clang version apparently doesn’t like implicit casts from void pointers to unsigned longs.
This post was originally written on 2019-10-10, and first made available to my Patreon supporters. Speaking of Patreon – I’m using crowdfunding in an attempt to make it financially sustainable to continue my volunteer work as a PulseAudio maintainer. If you’d like to help, check out my Patreon page (or Liberapay).