Skip to content

Commit 1c4953a

Browse files
committed
Sound (NetBSD): use OSS instead of pulseaudio
Fix #1527
1 parent 3ad5d5c commit 1c4953a

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ cmake_dependent_option(ENABLE_GLX "Enable glx" ON "LINUX OR FreeBSD OR OpenBSD O
7575
cmake_dependent_option(ENABLE_OSMESA "Enable osmesa" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR SunOS" OFF)
7676
cmake_dependent_option(ENABLE_OPENCL "Enable opencl" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR WIN32 OR ANDROID OR SunOS" OFF)
7777
cmake_dependent_option(ENABLE_FREETYPE "Enable freetype" ON "ANDROID" OFF)
78-
cmake_dependent_option(ENABLE_PULSE "Enable pulse" ON "LINUX OR OpenBSD OR NetBSD OR SunOS" OFF)
78+
cmake_dependent_option(ENABLE_PULSE "Enable pulse" ON "LINUX OR OpenBSD OR SunOS" OFF)
7979
cmake_dependent_option(ENABLE_DDCUTIL "Enable ddcutil" ON "LINUX" OFF)
8080
cmake_dependent_option(ENABLE_DIRECTX_HEADERS "Enable DirectX headers for WSL" ON "LINUX" OFF)
8181
cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR DragonFly" OFF)
@@ -761,7 +761,7 @@ elseif(NetBSD)
761761
src/detection/poweradapter/poweradapter_nosupport.c
762762
src/detection/processes/processes_nbsd.c
763763
src/detection/gtk_qt/qt.c
764-
src/detection/sound/sound_linux.c
764+
src/detection/sound/sound_bsd.c
765765
src/detection/swap/swap_obsd.c
766766
src/detection/terminalfont/terminalfont_linux.c
767767
src/detection/terminalshell/terminalshell_linux.c
@@ -1509,6 +1509,7 @@ elseif(NetBSD)
15091509
target_link_libraries(libfastfetch
15101510
PRIVATE "m"
15111511
PRIVATE "prop"
1512+
PRIVATE "ossaudio"
15121513
)
15131514
elseif(SunOS)
15141515
target_link_libraries(libfastfetch

src/detection/sound/sound_bsd.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,27 @@
44

55
#include <fcntl.h>
66
#include <sys/soundcard.h>
7+
#include <unistd.h>
78

89
const char* ffDetectSound(FFlist* devices)
910
{
10-
char path[] = "/dev/mixer0";
11+
#ifndef __NetBSD__
1112
int defaultDev = ffSysctlGetInt("hw.snd.default_unit", -1);
12-
1313
if (defaultDev == -1)
1414
return "sysctl(hw.snd.default_unit) failed";
15+
#else
16+
int defaultDev;
17+
{
18+
char mixerp[8];
19+
if (readlink("/dev/mixer", mixerp, ARRAY_SIZE(mixerp)) != 6)
20+
return "readlink(/dev/mixer) failed";
21+
defaultDev = mixerp[5] - '0';
22+
if (defaultDev < 0 || defaultDev > 9)
23+
return "Invalid mixer device";
24+
}
25+
#endif
26+
27+
char path[] = "/dev/mixer0";
1528

1629
struct oss_sysinfo info = { .nummixers = 9 };
1730

@@ -33,8 +46,11 @@ const char* ffDetectSound(FFlist* devices)
3346
if (!(devmask & SOUND_MASK_VOLUME))
3447
continue;
3548

49+
#if defined(SOUND_MIXER_MUTE) && (SOUND_MIXER_MUTE != SOUND_MIXER_NONE)
50+
#define FF_SOUND_HAVE_MIXER_MUTE 1
3651
uint32_t mutemask = 0;
37-
ioctl(fd, SOUND_MIXER_READ_MUTE, &mutemask); // doesn't seem to be available on DragonFly
52+
ioctl(fd, SOUND_MIXER_READ_MUTE, &mutemask);
53+
#endif
3854

3955
struct oss_card_info ci = { .card = idev };
4056
if (ioctl(fd, SNDCTL_CARDINFO, &ci) < 0)
@@ -49,9 +65,11 @@ const char* ffDetectSound(FFlist* devices)
4965
ffStrbufInitF(&device->name, "%s %s", ci.longname, ci.hw_info);
5066
ffStrbufTrimRightSpace(&device->name);
5167
ffStrbufInitF(&device->platformApi, "%s %s", info.product, info.version);
52-
device->volume = mutemask & SOUND_MASK_VOLUME
53-
? 0
54-
: ((uint8_t) volume /*left*/ + (uint8_t) (volume >> 8) /*right*/) / 2;
68+
device->volume =
69+
#ifdef FF_SOUND_HAVE_MIXER_MUTE
70+
mutemask & SOUND_MASK_VOLUME ? 0 :
71+
#endif
72+
((uint8_t) volume /*left*/ + (uint8_t) (volume >> 8) /*right*/) / 2;
5573
device->active = true;
5674
device->main = defaultDev == idev;
5775
}

0 commit comments

Comments
 (0)