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