Last monthly report: November 2020

Yes, this is really my last monthly report. More about that at the end of the post.

PulseAudio 14.0 is finally out! You can find out what’s new from the release notes. My work in November was mostly about preparing the release. The release notes are mostly written by me. I also fixed a recent regression in handling headphone unplug events, documented the “description” and “description-key” options in the ALSA mapping configuration, and disabled the experimental GStreamer-based RTP implementation by default in the Autotools build system.

Last month’s reviews:

  • Arun Raghavan fixed a regression caused by the new “availability group” feature. Output wasn’t any more automatically switched to a newly plugged in headset, if the hardware didn’t know the type of the device (headset, headphones or microphone).
  • Arun also changed the availability group logic so that if a port would be the only member of a group (which is the usual case), the group is deleted and the port is not added to any availability group. This should make life easier for applications handling the availability groups and the pactl list output less confusing.
  • Igor Kovalenko changed the pactl list output so that it explicitly says when a port’s availability is unknown (previously the availability was mentioned only if it was known).
  • Igor also added more debug logging in the code that decides whether to automatically switch to a port when its availability changes.
  • Igor also made a fix for the same regression that I mentioned in the first paragraph. When I reviewed Igor’s patch, I decided to fix the bug in a different way.
  • Pali Rohár fixed some compiler warnings in the ALSA code.
  • Arun Raghavan reverted a public API change that was introduced in PulseAudio 13.0. The change was not meant to affect applications, but it did, so we chose to revert it. Reverting the change might again break some applications, but probably reverting will cause less problems than keeping the change.

So, I have decided to end the crowdfunding of my work on Patreon and Liberapay. My financial situation has improved, and I don’t want to ask for donations when it’s unnecessary. I will continue my PulseAudio work as before, but I have stopped maintaining recipes in OpenEmbedded (I don’t use OpenEmbedded myself anymore, so I was not very motivated to do that work). Big thank you to everyone who has supported me on Patreon and Liberapay during the last four years!

October 2020

The new availability group logic turned out to be pretty badly broken, ports were sometimes assigned to the same group when they shouldn’t have, and sometimes not added to the same group when they should have. HDMI ports were always in the same group even though they are always independent. I fixed these issues.

It was reported that PulseAudio used an Airplay device in the network too eagerly for music players and there was no obvious way to disable that routing behaviour. The problem turned out to be that the RAOP sink sets the device.intended_roles=music property and module-intended-roles then routes all music players to the RAOP sink. It might make sense to disable module-intended-roles by default, since its routing policy is a bit too simplistic, but for now I decided to just drop the device.intended_roles=music property from the RAOP sink.

There’s an open issue titled “help with PulseAudio maintanance needed!”, which discusses how to get more people to the maintainer team. One idea was to add a note to the project front page informing people that the PulseAudio project is currently understaffed. I wrote such note and added it to the front page.

For completeness, here are some tiny patches I made too: I added missing documentation for the intended-roles mapping option in the ALSA configuration, I fixed an outdated comment in the CI configuration, I removed trailing whitespaces from the GitLab issue template (a user mentioned in IRC that the spaces in the template were very annoying), and I removed references to non-existent multichannel paths in the ALSA configuration.

Last month’s reviews:

  • Igor Kovalenko fixed a crash that people had seemingly randomly when using the release candidates.
  • Jaroslav Kysela submitted a patch for supporting ALSA mixer volume elements with more than two channels. There were things to fix, I haven’t reviewed the latest version yet.
  • Jaroslav Kysela decreased the log message severity from an error to debug for messages about the sound card driver returning unusually large values when querying various buffer fill level related things. The messages instruct the user to report the anomaly to the ALSA developers, but those bug reports have not actually been useful.
  • Philipp Gortan made a fix for a pavucontrol crash when quitting with Ctrl-Q. That crash had actually already been fixed in a different way, but Philipp’s small patch was OK to merge anyway.

This post was originally written on 2020-11-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).

September 2020

It was reported that Creative X-Fi cards have the center speaker muted by default, because PulseAudio doesn’t understand the “Center/LFE” mixer element. PulseAudio already supports the “CLFE” mixer element, which is semantically the same, so this was easy to fix simply by copying the CLFE sections in the mixer configuration files.

PulseAudio has always been able to start automatically when some client tries to connect to it, and there’s a configuration option called “autospawn” that can be used to enable or disable this. Nowadays PulseAudio is usually managed by systemd, which has its own mechanism for doing the same thing, and the autospawn option doesn’t affect systemd. This has been causing some confusion, so I added a note about this to the pulse-client.conf man page.

It was reported that when jackd is started and PulseAudio creates the JACK sink and source, those virtual devices aren’t automatically made the default, so the user has to manually do that. The JACK sink and source have very low priorities, and I tried to fix the problem by making the priorities very high instead, but that doesn’t help if the user has earlier manually set the default devices to the sound card that is taken over by jackd. A better fix would be more complicated. Oh well, at least the situation is a bit better, since with my patch things work as expected when the default devices haven’t been manually set.

I submitted a patch to set the LC_NUMERIC locale variable to “C” in PulseAudio, meaning that number formatting is not localized. This was done so that floating point numbers are parsed consistently regardless of the user’s locale settings. Parsing the beamforming parameters in module-echo-cancel didn’t work for some users, because if the locale used a comma for the decimal point, that made the parameter string ambiguous, since commas are also used for separating parameters from each other.

A pthread_mutex_unlock() failure was observed on FreeBSD, which is unnecessarily difficult to debug, because PulseAudio doesn’t log the reason for the failure. I made a patch that improves the logging.

I continued working on the messaging API documentation. While doing that I noticed that there are still a couple of things in the API that I want to change, which I will have to sort out with Georg.

Last month’s reviews:

  • Kevin Degelin updated the freedesktop runtime in the pavucontrol flatpak and contributed some other improvements as well.
  • Alper Nebi Yasak tried fixing duplication in UCM sink descriptions, but I rejected that, because the duplication in the description seemed to happen due to some deeper problem that needs to be fixed.
  • I finished the review of Nazar Mokrynskyi’s old patch to improve mono recording on Behringer UMC22. It had mostly been reviewed already, but the latest changes hadn’t been checked yet.
  • Libin Yang made a fix for nonsensical port switches (unplugging HDMI would change output from speakers to headphones). Usually PulseAudio creates only one sink per sound card, but new machines that use UCM sometimes create multiple sinks and module-switch-on-port-available doesn’t yet handle that well. Libin’s original patch had some issues and discussion is ongoing about how to fix the bug without introducing new ones.
  • Christopher Snowhill submitted improvements for module-virtual-surround-sink. Alexander Patrakov reviewed the difficult signal processing parts, I reviewed the higher-level changes in the module.
  • Assigning the new “availability groups” to ports is currently badly broken for non-UCM cards, which Jaroslav Kysela tried to fix. I rejected the fix, because Jaroslav’s fix would have introduced new configuration that seemed unnecessary. (At the time of writing I have submitted a different fix, but apparently it doesn’t work well either.) Jaroslav’s merge request contained also two smaller fixes for parsing port types and setting a correct type for the headset mic port, which were merged.

This post was originally written on 2020-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).

August 2020

PulseAudio

Some months ago I made a fix for the HyperX Cloud Orbit S USB headset, which didn’t work with PulseAudio, because PulseAudio generates the internal card name using the device serial number and in this case the serial number was so long that the card name exceeded the maximum allowed length. I wrote some udev rules to make the card name shorter, but since I didn’t have the headset myself, I didn’t want to submit a merge request before the bug reporter had confirmed that the udev rules work. I now received the confirmation, so I submitted the fix (patch 1, patch 2).

It was reported that an atomic operation test fails to build on Hurd. I fixed that.

I added a target to Meson for building the Doxygen documentation (patch 1, patch 2).

I submitted the availability group fixes that I worked on in July.

I fixed the memory leaks that I had introduced in my fixups for the message API merge request. It’s been a long journey to get the message API finished, but now it’s finally ready to merged as soon as 14.0 gets released. I still have some documentation improvements in progress, though, but I’ll submit those separately.

Last month’s reviews:

  • Hubenchang submitted fixes for some compiler warnings. I reviewed the initial submission and requested changes, I haven’t yet reviewed the updated patches.
  • Rosen Penev fixed a failure building against an OpenSSL version that is built without deprecated APIs.
  • Rosen Penev also fixed some printf format specifiers that were incorrect for 32-bit builds.
  • Arun Raghavan wrote configuration for the Audigy line of PCI sound cards by Creative Technologies. PulseAudio 13.0 broke the simultaneous output and input support on these cards, the new configuration makes the cards work properly again.
  • I continued reviewing Jaroslav Kysela’s patch to skip sound cards whose UCM configuration says that they should be skipped. The review process is still ongoing.
  • Tom Yan fixed a code ordering issue in the startup code: the exit-idle-time configuration option value wasn’t taken into consideration during the startup.
  • Kai-Heng Feng added configuration for HP Thunderbolt Dock 120W G2 and its speakerphone module (the dock and the module appear as separate sound cards). The sound cards work to some extent also without custom configuration, but the configuration improves the device descriptions and adds a hint that the speakerphone is intended for phone streams. Due to the ongoing code freeze, the patches will be merged after 14.0 has been released.

OpenEmbedded

I continued working on swithing the pulseaudio recipe from Autotools to Meson. Apart from final testing, I completed the work. At the time of writing, I’ve done the testing too; I will submit the patches once the freeze in OpenEmbedded ends.

This post was originally written on 2020-09-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).

July 2020

PulseAudio

While reviewing a null pointer dereferencing fix in the UCM volume probing code, I noticed another null pointer bug in the same function and fixed it.

The protocol version was recently incremented, but it was incremented only in the Autotools build system, the change was missing from the Meson build system. I fixed that.

I finished reviewing Georg Chini’s message API patches and did some fixups myself based on the review. My fixups contained a memory leak bug that I still haven’t fixed. That’s the last remaining issue before the feature can be merged. I also worked on better documentation for the message API, that work is not yet finished.

I made some fixes for the availability group logic, but I didn’t publish those yet, because I have other cleanups for the availability group feature in progress and I plan to put all those changes in one merge request.

Device port availability changes didn’t emit all necessary notifications to clients, causing pavucontrol and other GUI applictions to show outdated port status. I fixed that.

Last month’s reviews:

  • Eero Nurkkala fixed a crash when a UCM device doesn’t have a mixer device configured for it.
  • Yousuf Philips added “Settings” to the list of categories that pavucontrol is in.
  • UCM configuration can indicate that a sound card should be ignored, because another sound card’s configuration contains the configuration also for this card. Jaroslav Kysela implemented the sound card skipping feature for PulseAudio, but it needs more work and is not yet merged.
  • Tomasz Kontusz added support for the Astro A50 gaming headset.
  • Zhaochengyi fixed a crash when reading or writing fails in the connection between PulseAudio and the application.
  • Arun Raghavan got rid of compiler warnings caused by deprecated GLib macro and function calls, and by potential unaligned variable access to a packed struct.

OpenEmbedded

I upgraded the alsa-lib recipe from 1.2.3.1 to 1.2.3.2.

I fixed PulseAudio’s ARM assembly code that used the r7 register, which doesn’t work when using the Thumb instruction set with stack pointers enabled, because Thumb reserves r7 for the stack pointer. I also replaced an older workaround for that problem in the pulseaudio recipe using the patch I wrote.

As part of the effort to convert the pulseaudio recipe to use Meson instead of Autotools, I investigated whether it’s necessary to explicitly disable ARM Neon code if the target machine doesn’t support Neon. Currently the recipe does that disabling, but PulseAudio’s Meson build system doesn’t have an option to do that. The disabling was apparently added to work around a bug in the Neon detection part in PulseAudio’s Autoconf code, but that was a long time ago and the bug has been fixed. I found out that it’s still possible to set up the configuration flags so that the build will fail if the explicit Neon disabling is removed, but it has to be done in a way that is probably unlikely to happen in practice. Furthermore, the same problem doesn’t occur when using Meson, so it appears that I won’t have to replicate the Neon disabling part with Meson.

This post was originally written on 2020-08-06, 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).

June 2020

In last month’s report I mentioned a rejected patch that wanted to change the semantics of the –check option from checking for a running server process to attempting connection. Even though the patch got rejected, something good came out of it: I improved the documentation of the option to make its limitations clear.

I fixed a bug in our “fallback mapping” code. The term fallback mapping means alsa device configuration that is used when none of the normal device configurations work. We have three fallback configurations for input, and when we resort to the fallback configurations, only one should be used. However, certain hardware showed that PulseAudio actually uses all fallbacks that work, in this case resulting in two input devices, even though in reality there’s only one hardware device. This is now fixed, only one fallback is used.

When PulseAudio uses ALSA UCM to configure the hardware, PulseAudio runs a “disable sequence” and an “enable sequence” when switching ports on a device. I made a patch that runs the disable sequence also when suspending a device, after a concern was raised that if the disable sequence isn’t run always when not using a device, it may result in some amplifiers or other hardware components left active, consuming power unnecessarily. I’m not sure if that’s a real issue, since closing the device should be enough for the kernel to know to turn off all components, and even if it’s a real issue, then the issue has existed forever (also when not using UCM). Nevertheless, the feature wasn’t hard to implement so I wrote a patch… but somehow my patch breaks mute handling. I haven’t yet investigated the bug (the patch hasn’t been merged yet, so the bug doesn’t affect users).

It was reported that the “avoid-resampling” option in daemon.conf didn’t have any effect on module-null-sink. The avoid-resampling option means that sinks reconfigure their sample rate to whatever applications are using. The null sink should support this, but the reconfiguration just wasn’t happening. I fixed this bug.

I worked on improving the documentation and doing some other cleanup of the new availability group stuff that Jaroslav Kysela contributed recently. This is still work in progress.

Last month’s reviews:

  • Klaus Frank proposed a patch for adding configuration for xrdp source and sink to default.pa. This was rejected, because the xrdp modules are not part of upstream PulseAudio. As an alternative solution we discussed adding support for installing configuration snippets to a default.pa.d directory, where the xrdp package could install its configuration. Let’s see if Klaus will implement it at some point.
  • Hugo Osvaldo Barrera removed an obsolete Travis CI configuration file.
  • Leon Kowarschick added a style class to the pavucontrol window, which allows users or themes to use Gtk CSS rules that target pavucontrol specifically.
  • I continued reviewing Georg Chini’s messaging API patches.
  • Libin Yang fixed a crash when building PulseAudio with the DEBUG flag.
  • Yousuf Philips tagged pavucontrol with some Xfce specific categories to make pavucontrol appear in Xfce’s settings dialog.
  • Jaroslav Kysela implemented the API changes that are needed for making GNOME’s “What did you plug in?” dialog work with UCM devices.
  • Libin Yang fixed the order of event notifications when plugging in headphones, if that also causes an automatic default sink change. The wrong event order confused GNOME’s sound settings.

This post was originally written on 2020-07-09, 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).

May 2020

This May was a very unproductive month for me, but I did something at least:

When the user selects a device for output in the GNOME sound settings application, the application moves current streams to the selected device, and in order to have consistent routing also for streams not currently playing, it overwrites all stream routing settings in PulseAudio’s stream-restore database. That’s pretty ugly and sometimes causes problems, but it was necessary in order to make the routing take effect immediately when selecting a new output device. PulseAudio doesn’t automatically move streams when changing the default sink. Or it didn’t in the past. In the upcoming 14.0 release streams will be automatically moved, so the GNOME sound settings application won’t need to do any stream moving and it doesn’t need to overwrite the stream-restore database. There’s still a problem: the database modifications done earlier will still have effect, and the effects can be pretty bad: for example, it was reported that after upgrading to the latest release candidate, GNOME’s audio test played to the wrong device. I made a heavy-handed fix: when upgrading to PulseAudio 14.0, all old per-stream routing settings will be forgotten. We can’t distinguish between valid per-stream routing settings and invalid settings that were done by the GNOME sound settings, so we had to decide between keeping the invalid settings or forgetting valid settings. Forgetting valid settings seemed like the less bad option. (Systems that don’t use GNOME can build PulseAudio without the “forget old settings” feature, so this is not forced on everyone.)

I also fixed a few compiler warnings in the RAOP sink, and clarified the threaded mainloop API documentation after discussing with someone who had misunderstood the locking rules.

I reviewed the following patches last month:

  • Simon Pilkington implemented the XDG base directory specification for loading the ALSA path configuration files. This will allow users to customize the path configuration without editing files under /usr/share. The patch only applies to the path configuration files, not to the closely related profile set files, but Simon plans to implement the same also for the profile set files.
  • Felix Dörre made a patch that changes PulseAudio’s –check option so that instead of checking whether a pulseaudio process is running, a connection attempt is done. I rejected the patch, because changing option semantics is risky. People may be depending on the old documented behaviour (although in this case it’s possible that people would actually prefer a connection check in most cases, but there’s no way to know for sure).
  • Rafał Mikrut made a patch that changes how the Meson build system figures out the PulseAudio version number. When building PulseAudio from a git checkout, the version number comes from git tags, and Rafał’s checkout apparently was missing the tags and the build failed. I rejected the patch, because it didn’t make sense to me to allow invalid version numbers.

This post was originally written on 2020-06-05, 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).

April 2020

A user complained about unclear information in the module-null-sink documentation about what compressed formats it supports. Since the list of supported formats is needed in multiple places in command line and configuration file documentation, I created the SupportedAudioFormats wiki page that lists all supported formats, both PCM and compressed, and then I went through the documentation and added links to that page where appropriate.

My reviews in April:

  • Mattias Jernberg added hardware volume control support for the SteelSeries Arctis 7 USB headset. The patch will be merged after the freeze.
  • Jaroslav Kysela fixed a bug in UCM port activation: the UCM device enable sequence was not run when the UCM configuration didn’t specify any hardware volume control.
  • Georg Chini fixed a bug in module-stream-restore: the module saves the preferred device of streams in a database, but that was not being restored if the preferred device happened not to exist at the stream creation time, and the lack of a preferred device was also propagated back to the database, causing PulseAudio to completely forget the device that the user had previously chosen for the stream.
  • Arnaud Ferraris submitted a patch for modifying the logic in module-switch-on-port-available regarding when (not) to switch card profiles. I had to reject that, because the change would probably have had unwanted effects for other users. I proposed an alternative solution to the problem he’s facing on the PinePhone, and he said he’d work on it.
  • Stefan Bruens made module-raop-sink work in environments that have firewalls that allow incoming UDP packets only after the host has sent a UDP packet first.
  • I reviewed one more patch from Georg Chini’s messaging API patches.
  • In the last monthly report I mentioned that PulseAudio’s client API should provide some more information in order to make GNOME’s “What did you plug in?” dialog work on new laptops that use ALSA UCM for setting up the mixer. Jaroslav Kysela implemented that API and I made the first review pass. There were things to improve, and I haven’t yet reviewed the latest version of the patches.

This post was originally written on 2020-05-12, 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).

March 2020

PulseAudio

There are several people working on getting new laptops working using the SOF (Sound Open Firmware) kernel driver and ALSA’s UCM configuration system. The UCM code in PulseAudio isn’t completely mature yet, and there have been several issues to work through to get the laptops working. One issue is that the “What did you plug in?” dialog in GNOME doesn’t work with UCM, because the port names in PulseAudio are different. (The dialog is used to select between headphones, headset or microphone when the hardware doesn’t provide information about which of those was plugged in.) One option would be to try to converting the port names that the UCM code generates to the old port names that GNOME is assuming PulseAudio to use, but the old port names aren’t really ideal either. The GNOME code also pokes at the ALSA mixer, because PulseAudio doesn’t provide enough information, which would be nice to fix. I discussed the topic and came up with a proposal for making more information available through the PulseAudio client API. Jaroslav Kysela from ALSA offered to implement the proposal.

It was pointed out that the documentation for module-switch-on-connect and module-switch-on-port-available was lacking. I improved the documentation.

I revisited an old bug report about S/PDIF devices appearing in PulseAudio despite the sound card not having any S/PDIF outputs or inputs. I fixed the problem by adding the sound card in question to a S/PDIF blacklist in alsa-lib.

Some users have reported getting memfd related errors spammed to the system log when using PulseEffects. The root cause is still unknown, but I submitted a patch for logging the error only once.

Some USB headsets (and also a Sennheiser DAC) have separate sinks for voice audio and everything else. PulseAudio currently assigns the same priority to both, and it’s seemingly random which one gets to be the default sink. I submitted a patch for reducing the voice sink priority.

The UCM code logged messages about falling back to default channel count as errors. I lowered the log level.

I noticed that the Meson build system made libpulsecore depend on libpulse. Neither library is supposed to depend on the other, I fixed this issue.

Last month’s patch reviews:

  • Patrick McLean submitted configuration for the Sennheiser GSX 1000 USB DAC. There were things to fix, I haven’t yet reviewed the latest iteration.
  • Khem Raj fixed a problem with GCC 10 in PulseAudio’s NEON assembly code.
  • PulseAudio’s CI system uses some external templates, which changed and broke PulseAudio’s CI system. Arun Raghavan adapted our CI system to the changes.
  • I haven’t had time to review Georg Chini’s messaging API patches for a long time, now I got one more patch reviewed.

OpenEmbedded

I finished updating the ALSA recipes to version 1.2.2. I didn’t submit the patches yet, because OpenEmbedded was preparing for a release and a freeze was ongoing.

I continued converting the PulseAudio recipe to use Meson instead of Autotools. The recipe had some old stuff in the recipe that I didn’t quite understand but that looked like it could be relevant for the build system, and I spent some time digging up the origin of that stuff. At least the OE_LT_RPATH_ALLOW variable seemed to be useless cruft that can be removed. The recipe also explicitly disables NEON optimizations if the target CPU doesn’t support NEON, but the Meson build system doesn’t support doing that. It looks like the explicit disabling shouldn’t be necessary any more even with Autotools, the build system should auto-detect NEON support, but I will have to verify that.

A patch was submitted to the openembedded-core mailing list that fixes a PulseAudio compilation problem with the Thumb instruction set. The fix isn’t the best possible, and I’d like to fix the problem in upstream, so I tried to reproduce the problem. I didn’t yet manage to get a test setup working, I’ll continue working on this.

This post was originally written on 2020-04-12, 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).

February 2020

PulseAudio

As I mentioned in the last report, Fedora offered to host a translation service (Weblate) for us. I (almost) finished the needed preparations: I added the translation template files to version control and merged translations from Fedora’s old translation service (Zanata). The merged translations are still pending review, though, so PulseAudio can’t quite yet be translated on Weblate, but pavucontrol and paprefs can. I added links to Weblate to the pavucontrol and paprefs home pages. If you’re interested in contributing translations, here’s the link for pavucontrol: https://translate.fedoraproject.org/projects/pulseaudio/pavucontrol/ and here’s the link for paprefs: https://translate.fedoraproject.org/projects/pulseaudio/paprefs/.

Arun released the first release candidate of PulseAudio 14.0. I worked on the release notes (there’s still a lot left to do).

I continued working on the UCM configuration for Sound Blaster Audigy Rx. I didn’t make much concrete progress, but I had a discussion on the alsa-devel mailing list with Jaroslav Kysela about the difference between the various ways to configure volume and mute controls elements in UCM. The thread evolved into a discussion about “device variants”, which are a planned UCM concept for dealing with variable channel counts on one device (for example, sometimes the “Speaker” device can have separate stereo and surround modes). Now I have much better understanding about how the ALSA developers think UCM configurations should be structured.

My patch reviews from the last month:

  • Georg Chini fixed a bug in the new stream rescuing logic. Streams weren’t being rescued if a device without any ports was removed.
  • Jaroslav Kysela fixed the default channel logic in PulseAudio’s UCM code. The fallback to two channels wasn’t being applied in many cases.
  • Jan Koester made it possible to configure custom installation directories for pkg-config and CMake files.
  • Lionel fixed a compilation issue in pavucontrol. I don’t know why I’m not seeing the issue on my machine, maybe I have an older or newer version of Gtk, but the fix was good in any case.
  • Patrick McLean added custom configuration for Sennheiser GSX 1000 gaming DAC. With the patch PulseAudio will show separate sinks for voice and other audio. There were some cleanups to be done, so the patch is not merged yet, but it won’t be merged until after PulseAudio 14.0 has been released anyway, due to the release freeze.

OpenEmbedded

There’s a new mailing list for Yocto documentation patches. I updated the yocto-docs README to reflect the new patch submission process.

I added a version check to PulseAudio’s module loading code. With the patch PulseAudio will reject modules whose version doesn’t match the daemon’s version. This is related to my ongoing effort to remove the version number from the module installation path. The changing installation path is an inconvenience for me when doing recipe updates in OpenEmbedded.

PulseAudio has currently two build systems: the old one that uses autoconf and automake and the new one that uses Meson. I’m working on switching to Meson in OpenEmbedded, and I noticed that Pulseaudio’s Meson build system doesn’t have an option to enable or disable Valgrind (it’s automatically enabled if Valgrind is found in the build environment). I implemented a configuration option for controlling the Valgrind support.

The ALSA project made a new release, so I started updating the ALSA recipes.

This post was originally written on 2020-03-02, 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).