pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

audio/openal-soft: ALSA backend is broken on NetBSD



Hi,

I found that the ALSA backend of audio/openal-soft is broken on NetBSD for three reasons:

1. It continually spams a message "available samples exceeds the buffer size" to stderr but plays no audio at all. This is because snd_pcm_avail_update() reports a size larger than that of the ring buffer, which makes no sense, is not a documented behavior, but is apparently not a bug according to the mo********ing codebase of audio/alsa-lib. Removing the following lines makes it play the audio as expected:

  alc/backends/alsa.cpp:486:
  >        if(avail > buffer_size)
  >        {
  >            WARN("available samples exceeds the buffer size\n");
  >            snd_pcm_reset(mPcmHandle);
  >            continue;
  >        }

  alc/backends/alsa.cpp:568:
  >         if(static_cast<snd_pcm_uframes_t>(avail) > buffer_size)
  >         {
  >             WARN("available samples exceeds the buffer size\n");
  >             snd_pcm_reset(mPcmHandle);
  >             continue;
  >         }

2. But even if you remove lines mentioned above, int AlsaPlayback::mixerProc() in alc/backends/alsa.cpp does some kind of busy loop all the time and wastes CPU time for no reason.

3. The busy loop in mixerProc() refuses to exit on shutdown. Applications using OpenAL cannot exit gracefully, because the backend ignores the shutdown request.

So I think it's better to disable the ALSA backend on this platform, especially since the SunAudio backend works perfectly, and even more so thanks to the in-kernel mixer. I mean I propose the following change to the package. Do you have any opinions?

--- options.mk  30 Nov 2019 13:40:29 -0000      1.1
+++ options.mk  17 Jul 2023 11:21:34 -0000
@@ -1,9 +1,16 @@
 # $NetBSD: options.mk,v 1.1 2019/11/30 13:40:29 nia Exp $

 PKG_OPTIONS_VAR=               PKG_OPTIONS.openal-soft
-PKG_SUPPORTED_OPTIONS=         alsa jack pulseaudio
+PKG_SUPPORTED_OPTIONS=         jack pulseaudio
 PKG_SUGGESTED_OPTIONS.Linux+=  alsa

+.include "../../mk/bsd.prefs.mk"
+
+.if ${OPSYS} != "NetBSD"
+# The ALSA backend is broken on this platform. Don't use it.
+PKG_SUPPORTED_OPTIONS+=        alsa
+.endif
+
 .include "../../mk/bsd.options.mk"

 .if !empty(PKG_OPTIONS:Malsa)


Home | Main Index | Thread Index | Old Index