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