diff --git a/audio/openal-soft/Makefile b/audio/openal-soft/Makefile index 8fd1b304d13f..dbab671cc79a 100644 --- a/audio/openal-soft/Makefile +++ b/audio/openal-soft/Makefile @@ -1,120 +1,119 @@ PORTNAME= openal-soft -PORTVERSION= 1.25.0 -PORTREVISION= 1 +PORTVERSION= 1.25.1 CATEGORIES= audio MASTER_SITES= https://openal-soft.org/openal-releases/ MAINTAINER= multimedia@FreeBSD.org COMMENT= Software implementation of the OpenAL specification WWW= https://openal-soft.org/ LICENSE= LGPL20+ LICENSE_FILE= ${WRKSRC}/COPYING LIB_DEPENDS= libdbus-1.so:devel/dbus USES= cmake compiler:c++20-lang pkgconfig tar:bzip2 USE_LDCONFIG= yes CMAKE_ARGS= -DCMAKE_INSTALL_DATADIR:STRING="${PREFIX}/etc" CMAKE_ON= ALSOFT_BACKEND_WAVE CMAKE_OFF= ALSOFT_BACKEND_ALSA \ ALSOFT_DLOPEN \ ALSOFT_EXAMPLES \ ALSOFT_ENABLE_MODULES \ ALSOFT_REQUIRE_SOLARIS \ CMAKE_CXX_SCAN_FOR_MODULES # Use pthread instead of C11 threads CFLAGS+= -D__STDC_NO_THREADS__ # do not link with librt and libdl. LDFLAGS+= -Wl,--as-needed LDFLAGS_i386= -Wl,-z,notext PLIST_SUB= SOVERSION=${PORTVERSION} OPTIONS_DEFINE= CONFIG EXAMPLES JACK OSS PIPEWIRE PORTAUDIO \ PULSEAUDIO SDL SNDIO UTILS OPTIONS_DEFINE_aarch64= SIMD OPTIONS_DEFINE_amd64= SIMD OPTIONS_DEFINE_i386= SIMD OPTIONS_DEFAULT= OSS UTILS OPTIONS_DEFAULT_aarch64=SIMD OPTIONS_DEFAULT_amd64= SIMD OPTIONS_DEFAULT_i386= SIMD OPTIONS_SUB= yes CONFIG_DESC= Install configuration utility (needs Qt6) UTILS_DESC= Build and install utility programs CONFIG_IMPLIES= UTILS CONFIG_USES= qt:6 CONFIG_USE= QT=base CONFIG_CMAKE_BOOL_OFF= ALSOFT_NO_CONFIG_UTIL JACK_LIB_DEPENDS= libjack.so:audio/jack JACK_CMAKE_BOOL= ALSOFT_BACKEND_JACK ALSOFT_REQUIRE_JACK OSS_CMAKE_BOOL= ALSOFT_BACKEND_OSS ALSOFT_REQUIRE_OSS PIPEWIRE_LIB_DEPENDS= libpipewire-0.3.so:multimedia/pipewire PIPEWIRE_USES= localbase:ldflags PIPEWIRE_CMAKE_BOOL= ALSOFT_BACKEND_PIPEWIRE ALSOFT_REQUIRE_PIPEWIRE PORTAUDIO_LIB_DEPENDS= libportaudio.so:audio/portaudio PORTAUDIO_CMAKE_BOOL= ALSOFT_BACKEND_PORTAUDIO ALSOFT_REQUIRE_PORTAUDIO PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio PULSEAUDIO_CMAKE_BOOL= ALSOFT_BACKEND_PULSEAUDIO ALSOFT_REQUIRE_PULSEAUDIO SDL_USES= sdl SDL_USE= SDL=sdl2 SDL_CMAKE_BOOL= ALSOFT_BACKEND_SDL2 ALSOFT_REQUIRE_SDL2 SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio SNDIO_CMAKE_BOOL= ALSOFT_BACKEND_SNDIO ALSOFT_REQUIRE_SNDIO UTILS_LIB_DEPENDS= libmysofa.so:audio/libmysofa UTILS_CMAKE_BOOL= ALSOFT_UTILS .include .if ${PORT_OPTIONS:MSIMD} . if !${MACHINE_CPU:Msse} CMAKE_OFF+= ALSOFT_CPUEXT_SSE . endif . if !${MACHINE_CPU:Msse2} CMAKE_OFF+= ALSOFT_CPUEXT_SSE2 . endif . if !${MACHINE_CPU:Msse3} CMAKE_OFF+= ALSOFT_CPUEXT_SSE3 . endif . if !${MACHINE_CPU:Msse41} CMAKE_OFF+= ALSOFT_CPUEXT_SSE4_1 . endif .else CMAKE_OFF+= ALSOFT_CPUEXT_NEON \ ALSOFT_CPUEXT_SSE \ ALSOFT_CPUEXT_SSE2 \ ALSOFT_CPUEXT_SSE3 \ ALSOFT_CPUEXT_SSE4_1 .endif # The following is actually meant for lld 15.0 and later, but the ports # framework does not support LINKER_TYPE and LINKER_VERSION yet. .if ${COMPILER_TYPE} == "clang" # Turn off checking of dynamic relocations, to avoid lld diagnostics about # possibly incorrect addend values. LDFLAGS_i386+= -Wl,--no-check-dynamic-relocations .endif post-patch: @${REINPLACE_CMD} 's|/etc/openal|${ETCDIR}|' \ ${WRKSRC}/alc/alconfig.cpp post-install-EXAMPLES-on: (cd ${WRKSRC}/examples && ${COPYTREE_SHARE} . \ ${STAGEDIR}${EXAMPLESDIR}) .include diff --git a/audio/openal-soft/distinfo b/audio/openal-soft/distinfo index a38c45c7f411..290decb63d58 100644 --- a/audio/openal-soft/distinfo +++ b/audio/openal-soft/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1766818253 -SHA256 (openal-soft-1.25.0.tar.bz2) = f671087c9043b1e92cd0b125af6f43663249d3c02bc6d580d774a47a91050e0e -SIZE (openal-soft-1.25.0.tar.bz2) = 1111903 +TIMESTAMP = 1769146884 +SHA256 (openal-soft-1.25.1.tar.bz2) = 4c2aff6f81975f46ecc5148d092c4948c71dbfb76e4b9ba4bf1fce287f47d4b5 +SIZE (openal-soft-1.25.1.tar.bz2) = 1119330 diff --git a/audio/openal-soft/files/patch-alc_backends_oss.cpp b/audio/openal-soft/files/patch-alc_backends_oss.cpp deleted file mode 100644 index 5be079686963..000000000000 --- a/audio/openal-soft/files/patch-alc_backends_oss.cpp +++ /dev/null @@ -1,523 +0,0 @@ -Backport upstream commits to fix build. - -https://github.com/kcat/openal-soft/commit/278d1dc4d607b84e4e7b2d93af094d7932588962 -https://github.com/kcat/openal-soft/commit/b93a15cc886cda8ce7626e84c637bdaf7c346773 -https://github.com/kcat/openal-soft/commit/5f0bf631d7d43f568f10065aae561c892c02d43e -https://github.com/kcat/openal-soft/commit/78a2ddb791163ae0d603937c88613523d27fa22d - -https://github.com/kcat/openal-soft/issues/1215 - ---- alc/backends/oss.cpp.orig 2025-12-22 09:17:45 UTC -+++ alc/backends/oss.cpp -@@ -33,6 +33,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -65,12 +66,9 @@ - #define SOUND_MIXER_WRITE MIXER_WRITE - #endif - --#if defined(SOUND_VERSION) && (SOUND_VERSION < 0x040000) -+#if (defined(SOUND_VERSION) && (SOUND_VERSION < 0x040000)) || !defined(SNDCTL_AUDIOINFO) - #define ALC_OSS_COMPAT - #endif --#ifndef SNDCTL_AUDIOINFO --#define ALC_OSS_COMPAT --#endif - - /* - * FreeBSD strongly discourages the use of specific devices, -@@ -98,32 +96,28 @@ std::vector CaptureDevices; - std::vector PlaybackDevices; - std::vector CaptureDevices; - -- --#ifdef ALC_OSS_COMPAT -- --#define DSP_CAP_OUTPUT 0x00020000 --#define DSP_CAP_INPUT 0x00010000 --void ALCossListPopulate(std::vector &devlist, int type) --{ -- devlist.emplace_back(std::string{GetDefaultName()}, -- (type==DSP_CAP_INPUT) ? DefaultCapture : DefaultPlayback); --} -- --#else -- - class FileHandle { - int mFd{-1}; - - public: - FileHandle() = default; - FileHandle(const FileHandle&) = delete; -- FileHandle& operator=(const FileHandle&) = delete; -+ FileHandle(FileHandle&& rhs) noexcept : mFd{std::exchange(rhs.mFd, -1)} { } - ~FileHandle() { if(mFd != -1) ::close(mFd); } - -+ auto operator=(const FileHandle&) -> FileHandle& = delete; -+ auto operator=(FileHandle&& rhs) noexcept -> FileHandle& -+ { -+ close(); -+ mFd = std::exchange(rhs.mFd, -1); -+ return *this; -+ } -+ - template -- [[nodiscard]] auto open(const char *fname, Args&& ...args) -> bool -+ [[nodiscard]] auto open(gsl::czstring const fname, Args&& ...args) -> bool - { - close(); -+ /* NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) */ - mFd = ::open(fname, std::forward(args)...); - return mFd != -1; - } -@@ -134,10 +128,35 @@ class FileHandle { (public) - mFd = -1; - } - -- [[nodiscard]] -- auto get() const noexcept -> int { return mFd; } -+ template -+ [[nodiscard]] auto ioctl(Args&& ...args) const -+ { -+ /* NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg) */ -+ return ::ioctl(mFd, std::forward(args)...); -+ } -+ -+ [[nodiscard]] auto read(std::span const bytes) const -+ { return ::read(mFd, bytes.data(), bytes.size()); } -+ -+ [[nodiscard]] auto write(std::span const bytes) const -+ { return ::write(mFd, bytes.data(), bytes.size()); } -+ -+ [[nodiscard]] auto get() const noexcept -> int { return mFd; } - }; - -+ -+#ifdef ALC_OSS_COMPAT -+ -+#define DSP_CAP_OUTPUT 0x00020000 -+#define DSP_CAP_INPUT 0x00010000 -+void ALCossListPopulate(std::vector &devlist, int type) -+{ -+ devlist.emplace_back(std::string{GetDefaultName()}, -+ (type==DSP_CAP_INPUT) ? DefaultCapture : DefaultPlayback); -+} -+ -+#else -+ - void ALCossListAppend(std::vector &list, std::string_view handle, std::string_view path) - { - #ifdef ALC_OSS_DEVNODE_TRUC -@@ -149,45 +168,63 @@ void ALCossListAppend(std::vector &list, std:: - if(strncmp(path.data() + i, handle.data() + hoffset, path.size() - i) == 0) - handle = handle.substr(0, hoffset); - path = path.substr(0, i); -+ break; - } - } - #endif -- if(handle.empty()) -- handle = path; -+ if(path.empty()) -+ return; - - if(std::ranges::find(list, path, &DevMap::device_name) != list.end()) - return; - -+ if(handle.empty()) -+ handle = path; -+ - auto count = 1; - auto newname = std::string{handle}; - while(std::ranges::find(list, newname, &DevMap::name) != list.end()) - newname = al::format("{} #{}", handle, ++count); - -- const auto &entry = list.emplace_back(std::move(newname), path); -- TRACE("Got device \"{}\", \"{}\"", entry.name, entry.device_name); -+ const auto &entry = list.emplace_back(std::move(newname), std::string{path}); -+ TRACE(R"(Got device "{}", "{}")", entry.name, entry.device_name); - } - --void ALCossListPopulate(std::vector &devlist, int type_flag) -+void ALCossListPopulate(std::vector &devlist, int const type_flag) - { -+ /* Make sure to move the default device to the start of the devlist (or -+ * adding the default if it doesn't exist) before returning. -+ */ -+ auto _ = gsl::finally([&devlist, type_flag] -+ { -+ auto const &defdev = (type_flag == DSP_CAP_INPUT) ? DefaultCapture : DefaultPlayback; -+ if(auto const iter = std::ranges::find(devlist, defdev, &DevMap::device_name); -+ iter != devlist.end()) -+ std::ranges::rotate(devlist.begin(), iter, iter+1); -+ else -+ devlist.insert(devlist.begin(), DevMap{std::string{GetDefaultName()}, defdev}); -+ devlist.shrink_to_fit(); -+ }); -+ - auto si = oss_sysinfo{}; - auto file = FileHandle{}; - if(!file.open("/dev/mixer", O_RDONLY)) - { - TRACE("Could not open /dev/mixer: {}", std::generic_category().message(errno)); -- goto done; -+ return; - } - -- if(ioctl(file.get(), SNDCTL_SYSINFO, &si) == -1) -+ if(file.ioctl(SNDCTL_SYSINFO, &si) == -1) - { - TRACE("SNDCTL_SYSINFO failed: {}", std::generic_category().message(errno)); -- goto done; -+ return; - } - -- for(int i{0};i < si.numaudios;i++) -+ for(auto const i : std::views::iota(0, si.numaudios)) - { -- oss_audioinfo ai{}; -+ auto ai = oss_audioinfo{}; - ai.dev = i; -- if(ioctl(file.get(), SNDCTL_AUDIOINFO, &ai) == -1) -+ if(file.ioctl(SNDCTL_AUDIOINFO, &ai) == -1) - { - ERR("SNDCTL_AUDIOINFO ({}) failed: {}", i, std::generic_category().message(errno)); - continue; -@@ -195,30 +232,17 @@ void ALCossListPopulate(std::vector &devlist, - if(!(ai.caps&type_flag) || ai.devnode[0] == '\0') - continue; - -- std::string_view handle; -- if(ai.handle[0] != '\0') -- handle = {ai.handle, strnlen(ai.handle, sizeof(ai.handle))}; -- else -- handle = {ai.name, strnlen(ai.name, sizeof(ai.name))}; -- const std::string_view devnode{ai.devnode, strnlen(ai.devnode, sizeof(ai.devnode))}; -+ auto const handle = std::invoke([&ai]() -> std::string_view -+ { -+ if(ai.handle[0] != '\0') -+ return {std::data(ai.handle), strnlen(std::data(ai.handle), std::size(ai.handle))}; -+ return {std::data(ai.name), strnlen(std::data(ai.name), std::size(ai.name))}; -+ }); -+ auto const devnode = std::string_view{std::data(ai.devnode), -+ strnlen(std::data(ai.devnode), std::size(ai.devnode))}; - - ALCossListAppend(devlist, handle, devnode); - } -- --done: -- file.close(); -- -- const char *defdev{((type_flag==DSP_CAP_INPUT) ? DefaultCapture : DefaultPlayback).c_str()}; -- auto iter = std::ranges::find(devlist, defdev, &DevMap::device_name); -- if(iter == devlist.end()) -- devlist.insert(devlist.begin(), DevMap{GetDefaultName(), defdev}); -- else -- { -- auto entry = DevMap{std::move(*iter)}; -- devlist.erase(iter); -- devlist.insert(devlist.begin(), std::move(entry)); -- } -- devlist.shrink_to_fit(); - } - - #endif -@@ -247,7 +271,7 @@ struct OSSPlayback final : BackendBase { - void start() override; - void stop() override; - -- int mFd{-1}; -+ FileHandle mFd; - - std::vector mMixData; - -@@ -255,12 +279,7 @@ struct OSSPlayback final : BackendBase { - std::thread mThread; - }; - --OSSPlayback::~OSSPlayback() --{ -- if(mFd != -1) -- ::close(mFd); -- mFd = -1; --} -+OSSPlayback::~OSSPlayback() = default; - - - void OSSPlayback::mixerProc() -@@ -275,7 +294,7 @@ void OSSPlayback::mixerProc() - && mDevice->Connected.load(std::memory_order_acquire)) - { - auto pollitem = pollfd{}; -- pollitem.fd = mFd; -+ pollitem.fd = mFd.get(); - pollitem.events = POLLOUT; - - if(const auto pret = poll(&pollitem, 1, 1000); pret < 0) -@@ -298,7 +317,7 @@ void OSSPlayback::mixerProc() - gsl::narrow_cast(write_buf.size()/frame_size), frame_step); - while(!write_buf.empty() && !mKillNow.load(std::memory_order_acquire)) - { -- const auto wrote = write(mFd, write_buf.data(), write_buf.size()); -+ const auto wrote = mFd.write(write_buf); - if(wrote < 0) - { - if(errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) -@@ -332,15 +351,10 @@ void OSSPlayback::open(std::string_view name) - devname = iter->device_name.c_str(); - } - -- const auto fd = ::open(devname, O_WRONLY); /* NOLINT(cppcoreguidelines-pro-type-vararg) */ -- if(fd == -1) -+ if(not mFd.open(devname, O_WRONLY)) - throw al::backend_exception{al::backend_error::NoDevice, "Could not open {}: {}", devname, - std::generic_category().message(errno)}; - -- if(mFd != -1) -- ::close(mFd); -- mFd = fd; -- - mDeviceName = name; - } - -@@ -349,21 +363,21 @@ auto OSSPlayback::reset() -> bool - auto ossFormat = int{}; - switch(mDevice->FmtType) - { -- case DevFmtByte: -- ossFormat = AFMT_S8; -- break; -- case DevFmtUByte: -- ossFormat = AFMT_U8; -- break; -- case DevFmtUShort: -- case DevFmtInt: -- case DevFmtUInt: -- case DevFmtFloat: -- mDevice->FmtType = DevFmtShort; -- [[fallthrough]]; -- case DevFmtShort: -- ossFormat = AFMT_S16_NE; -- break; -+ case DevFmtByte: -+ ossFormat = AFMT_S8; -+ break; -+ case DevFmtUByte: -+ ossFormat = AFMT_U8; -+ break; -+ case DevFmtUShort: -+ case DevFmtInt: -+ case DevFmtUInt: -+ case DevFmtFloat: -+ mDevice->FmtType = DevFmtShort; -+ [[fallthrough]]; -+ case DevFmtShort: -+ ossFormat = AFMT_S16_NE; -+ break; - } - - auto numChannels = mDevice->channelsFromFmt(); -@@ -373,22 +387,20 @@ auto OSSPlayback::reset() -> bool - auto numFragmentsLogSize = ((mDevice->mBufferSize + mDevice->mUpdateSize/2) - / mDevice->mUpdateSize) << 16u; - /* According to the OSS spec, 16 bytes is the minimum period size. */ -- numFragmentsLogSize |= std::max(log2i(mDevice->mUpdateSize * frameSize), 4u); -+ numFragmentsLogSize |= std::max(log2i(mDevice->mUpdateSize * frameSize), 4_u32); - - auto info = audio_buf_info{}; - #define CHECKERR(func) if((func) < 0) \ - throw al::backend_exception{al::backend_error::DeviceError, #func " failed: {}", \ - std::generic_category().message(errno)}; -- -- /* NOLINTBEGIN(cppcoreguidelines-pro-type-vararg) */ - /* Don't fail if SETFRAGMENT fails. We can handle just about anything -- * that's reported back via GETOSPACE */ -- ioctl(mFd, SNDCTL_DSP_SETFRAGMENT, &numFragmentsLogSize); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_SETFMT, &ossFormat)); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_CHANNELS, &numChannels)); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_SPEED, &ossSpeed)); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_GETOSPACE, &info)); -- /* NOLINTEND(cppcoreguidelines-pro-type-vararg) */ -+ * that's reported back via GETOSPACE. -+ */ -+ std::ignore = mFd.ioctl(SNDCTL_DSP_SETFRAGMENT, &numFragmentsLogSize); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_SETFMT, &ossFormat)); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_CHANNELS, &numChannels)); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_SPEED, &ossSpeed)); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_GETOSPACE, &info)); - #undef CHECKERR - - if(mDevice->channelsFromFmt() != numChannels) -@@ -436,14 +448,14 @@ void OSSPlayback::stop() - return; - mThread.join(); - -- if(ioctl(mFd, SNDCTL_DSP_RESET) != 0) /* NOLINT(cppcoreguidelines-pro-type-vararg) */ -+ if(mFd.ioctl(SNDCTL_DSP_RESET) != 0) - ERR("Error resetting device: {}", std::generic_category().message(errno)); - } - - --struct OSScapture final : public BackendBase { -- explicit OSScapture(gsl::not_null device) noexcept : BackendBase{device} { } -- ~OSScapture() override; -+struct OSSCapture final : BackendBase { -+ explicit OSSCapture(gsl::not_null const device) noexcept : BackendBase{device} { } -+ ~OSSCapture() override; - - void recordProc() const; - -@@ -453,7 +465,7 @@ struct OSScapture final : public BackendBase { - void captureSamples(std::span outbuffer) override; - auto availableSamples() -> usize override; - -- int mFd{-1}; -+ FileHandle mFd; - - RingBufferPtr mRing; - -@@ -461,15 +473,10 @@ struct OSScapture final : public BackendBase { - std::thread mThread; - }; - --OSScapture::~OSScapture() --{ -- if(mFd != -1) -- close(mFd); -- mFd = -1; --} -+OSSCapture::~OSSCapture() = default; - - --void OSScapture::recordProc() const -+void OSSCapture::recordProc() const - { - SetRTPriority(); - althrd_setname(GetRecordThreadName()); -@@ -478,7 +485,7 @@ void OSScapture::recordProc() const - while(!mKillNow.load(std::memory_order_acquire)) - { - auto pollitem = pollfd{}; -- pollitem.fd = mFd; -+ pollitem.fd = mFd.get(); - pollitem.events = POLLIN; - - if(auto const pret = poll(&pollitem, 1, 1000); pret < 0) -@@ -496,10 +503,9 @@ void OSScapture::recordProc() const - continue; - } - -- auto vec = mRing->getWriteVector(); -- if(!vec[0].empty()) -+ if(auto const vec = mRing->getWriteVector(); !vec[0].empty()) - { -- auto amt = read(mFd, vec[0].data(), vec[0].size()); -+ auto const amt = mFd.read(vec[0]); - if(amt < 0) - { - auto const errstr = std::generic_category().message(errno); -@@ -513,7 +519,7 @@ void OSScapture::recordProc() const - } - - --void OSScapture::open(std::string_view name) -+void OSSCapture::open(std::string_view name) - { - auto *devname = DefaultCapture.c_str(); - if(name.empty()) -@@ -523,15 +529,14 @@ void OSScapture::open(std::string_view name) - if(CaptureDevices.empty()) - ALCossListPopulate(CaptureDevices, DSP_CAP_INPUT); - -- auto iter = std::ranges::find(CaptureDevices, name, &DevMap::name); -+ auto const iter = std::ranges::find(CaptureDevices, name, &DevMap::name); - if(iter == CaptureDevices.end()) - throw al::backend_exception{al::backend_error::NoDevice, - "Device name \"{}\" not found", name}; - devname = iter->device_name.c_str(); - } - -- mFd = ::open(devname, O_RDONLY); /* NOLINT(cppcoreguidelines-pro-type-vararg) */ -- if(mFd == -1) -+ if(not mFd.open(devname, O_RDONLY)) - throw al::backend_exception{al::backend_error::NoDevice, "Could not open {}: {}", devname, - std::generic_category().message(errno)}; - -@@ -568,13 +573,11 @@ void OSScapture::open(std::string_view name) - throw al::backend_exception{al::backend_error::DeviceError, #func " failed: {}", \ - std::generic_category().message(errno)}; \ - } -- /* NOLINTBEGIN(cppcoreguidelines-pro-type-vararg) */ -- CHECKERR(ioctl(mFd, SNDCTL_DSP_SETFRAGMENT, &numFragmentsLogSize)); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_SETFMT, &ossFormat)); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_CHANNELS, &numChannels)); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_SPEED, &ossSpeed)); -- CHECKERR(ioctl(mFd, SNDCTL_DSP_GETISPACE, &info)); -- /* NOLINTEND(cppcoreguidelines-pro-type-vararg) */ -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_SETFRAGMENT, &numFragmentsLogSize)); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_SETFMT, &ossFormat)); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_CHANNELS, &numChannels)); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_SPEED, &ossSpeed)); -+ CHECKERR(mFd.ioctl(SNDCTL_DSP_GETISPACE, &info)); - #undef CHECKERR - - if(mDevice->channelsFromFmt() != numChannels) -@@ -594,11 +597,11 @@ void OSScapture::open(std::string_view name) - mDeviceName = name; - } - --void OSScapture::start() -+void OSSCapture::start() - { - try { - mKillNow.store(false, std::memory_order_release); -- mThread = std::thread{&OSScapture::recordProc, this}; -+ mThread = std::thread{&OSSCapture::recordProc, this}; - } - catch(std::exception& e) { - throw al::backend_exception{al::backend_error::DeviceError, -@@ -606,20 +609,20 @@ void OSScapture::start() - } - } - --void OSScapture::stop() -+void OSSCapture::stop() - { - if(mKillNow.exchange(true, std::memory_order_acq_rel) || !mThread.joinable()) - return; - mThread.join(); - -- if(ioctl(mFd, SNDCTL_DSP_RESET) != 0) /* NOLINT(cppcoreguidelines-pro-type-vararg) */ -+ if(mFd.ioctl(SNDCTL_DSP_RESET) != 0) - ERR("Error resetting device: {}", std::generic_category().message(errno)); - } - --void OSScapture::captureSamples(std::span outbuffer) -+void OSSCapture::captureSamples(std::span outbuffer) - { std::ignore = mRing->read(outbuffer); } - --auto OSScapture::availableSamples() -> usize -+auto OSSCapture::availableSamples() -> usize - { return mRing->readSpace(); } - - } // namespace -@@ -672,12 +675,12 @@ auto OSSBackendFactory::createBackend(gsl::not_null BackendFactory& - { -- static OSSBackendFactory factory{}; -+ static auto factory = OSSBackendFactory{}; - return factory; - }