aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/backends/oss.cpp
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2018-11-15 23:02:26 -0800
committerChris Robinson <[email protected]>2018-11-15 23:02:26 -0800
commitc78b42fb4e49a431e8c0b7b7ff8da0102e1aeb5d (patch)
treec483cdaa95cb41b8a9c6b271ed6c35c3dbb52add /Alc/backends/oss.cpp
parent7884cec02b62605cbc046f2311bf3f3b35e20777 (diff)
Convert the OSS backend factory
Diffstat (limited to 'Alc/backends/oss.cpp')
-rw-r--r--Alc/backends/oss.cpp131
1 files changed, 54 insertions, 77 deletions
diff --git a/Alc/backends/oss.cpp b/Alc/backends/oss.cpp
index 9baa7346..cf95bcfe 100644
--- a/Alc/backends/oss.cpp
+++ b/Alc/backends/oss.cpp
@@ -20,6 +20,8 @@
#include "config.h"
+#include "backends/oss.h"
+
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/time.h>
@@ -45,8 +47,6 @@
#include "ringbuffer.h"
#include "compat.h"
-#include "backends/base.h"
-
#include <sys/soundcard.h>
/*
@@ -239,7 +239,6 @@ int log2i(ALCuint x)
return y;
}
-} // namespace
struct ALCplaybackOSS final : public ALCbackend {
int fd{-1};
@@ -250,31 +249,31 @@ struct ALCplaybackOSS final : public ALCbackend {
std::thread thread;
};
-static int ALCplaybackOSS_mixerProc(ALCplaybackOSS *self);
-
-static void ALCplaybackOSS_Construct(ALCplaybackOSS *self, ALCdevice *device);
-static void ALCplaybackOSS_Destruct(ALCplaybackOSS *self);
-static ALCenum ALCplaybackOSS_open(ALCplaybackOSS *self, const ALCchar *name);
-static ALCboolean ALCplaybackOSS_reset(ALCplaybackOSS *self);
-static ALCboolean ALCplaybackOSS_start(ALCplaybackOSS *self);
-static void ALCplaybackOSS_stop(ALCplaybackOSS *self);
-static DECLARE_FORWARD2(ALCplaybackOSS, ALCbackend, ALCenum, captureSamples, ALCvoid*, ALCuint)
-static DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, ALCuint, availableSamples)
-static DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, ClockLatency, getClockLatency)
-static DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, void, lock)
-static DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, void, unlock)
+int ALCplaybackOSS_mixerProc(ALCplaybackOSS *self);
+
+void ALCplaybackOSS_Construct(ALCplaybackOSS *self, ALCdevice *device);
+void ALCplaybackOSS_Destruct(ALCplaybackOSS *self);
+ALCenum ALCplaybackOSS_open(ALCplaybackOSS *self, const ALCchar *name);
+ALCboolean ALCplaybackOSS_reset(ALCplaybackOSS *self);
+ALCboolean ALCplaybackOSS_start(ALCplaybackOSS *self);
+void ALCplaybackOSS_stop(ALCplaybackOSS *self);
+DECLARE_FORWARD2(ALCplaybackOSS, ALCbackend, ALCenum, captureSamples, ALCvoid*, ALCuint)
+DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, ALCuint, availableSamples)
+DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, ClockLatency, getClockLatency)
+DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, void, lock)
+DECLARE_FORWARD(ALCplaybackOSS, ALCbackend, void, unlock)
DECLARE_DEFAULT_ALLOCATORS(ALCplaybackOSS)
DEFINE_ALCBACKEND_VTABLE(ALCplaybackOSS);
-static void ALCplaybackOSS_Construct(ALCplaybackOSS *self, ALCdevice *device)
+void ALCplaybackOSS_Construct(ALCplaybackOSS *self, ALCdevice *device)
{
new (self) ALCplaybackOSS{};
ALCbackend_Construct(STATIC_CAST(ALCbackend, self), device);
SET_VTABLE2(ALCplaybackOSS, ALCbackend, self);
}
-static void ALCplaybackOSS_Destruct(ALCplaybackOSS *self)
+void ALCplaybackOSS_Destruct(ALCplaybackOSS *self)
{
if(self->fd != -1)
close(self->fd);
@@ -285,7 +284,7 @@ static void ALCplaybackOSS_Destruct(ALCplaybackOSS *self)
}
-static int ALCplaybackOSS_mixerProc(ALCplaybackOSS *self)
+int ALCplaybackOSS_mixerProc(ALCplaybackOSS *self)
{
ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice;
struct timeval timeout;
@@ -353,7 +352,7 @@ static int ALCplaybackOSS_mixerProc(ALCplaybackOSS *self)
}
-static ALCenum ALCplaybackOSS_open(ALCplaybackOSS *self, const ALCchar *name)
+ALCenum ALCplaybackOSS_open(ALCplaybackOSS *self, const ALCchar *name)
{
ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice;
@@ -387,7 +386,7 @@ static ALCenum ALCplaybackOSS_open(ALCplaybackOSS *self, const ALCchar *name)
return ALC_NO_ERROR;
}
-static ALCboolean ALCplaybackOSS_reset(ALCplaybackOSS *self)
+ALCboolean ALCplaybackOSS_reset(ALCplaybackOSS *self)
{
ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice;
int numFragmentsLogSize;
@@ -469,7 +468,7 @@ static ALCboolean ALCplaybackOSS_reset(ALCplaybackOSS *self)
return ALC_TRUE;
}
-static ALCboolean ALCplaybackOSS_start(ALCplaybackOSS *self)
+ALCboolean ALCplaybackOSS_start(ALCplaybackOSS *self)
{
ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice;
@@ -490,7 +489,7 @@ static ALCboolean ALCplaybackOSS_start(ALCplaybackOSS *self)
return ALC_FALSE;
}
-static void ALCplaybackOSS_stop(ALCplaybackOSS *self)
+void ALCplaybackOSS_stop(ALCplaybackOSS *self)
{
if(self->killNow.exchange(AL_TRUE) || !self->thread.joinable())
return;
@@ -512,31 +511,31 @@ struct ALCcaptureOSS final : public ALCbackend {
std::thread thread;
};
-static int ALCcaptureOSS_recordProc(ALCcaptureOSS *self);
-
-static void ALCcaptureOSS_Construct(ALCcaptureOSS *self, ALCdevice *device);
-static void ALCcaptureOSS_Destruct(ALCcaptureOSS *self);
-static ALCenum ALCcaptureOSS_open(ALCcaptureOSS *self, const ALCchar *name);
-static DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, ALCboolean, reset)
-static ALCboolean ALCcaptureOSS_start(ALCcaptureOSS *self);
-static void ALCcaptureOSS_stop(ALCcaptureOSS *self);
-static ALCenum ALCcaptureOSS_captureSamples(ALCcaptureOSS *self, ALCvoid *buffer, ALCuint samples);
-static ALCuint ALCcaptureOSS_availableSamples(ALCcaptureOSS *self);
-static DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, ClockLatency, getClockLatency)
-static DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, void, lock)
-static DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, void, unlock)
+int ALCcaptureOSS_recordProc(ALCcaptureOSS *self);
+
+void ALCcaptureOSS_Construct(ALCcaptureOSS *self, ALCdevice *device);
+void ALCcaptureOSS_Destruct(ALCcaptureOSS *self);
+ALCenum ALCcaptureOSS_open(ALCcaptureOSS *self, const ALCchar *name);
+DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, ALCboolean, reset)
+ALCboolean ALCcaptureOSS_start(ALCcaptureOSS *self);
+void ALCcaptureOSS_stop(ALCcaptureOSS *self);
+ALCenum ALCcaptureOSS_captureSamples(ALCcaptureOSS *self, ALCvoid *buffer, ALCuint samples);
+ALCuint ALCcaptureOSS_availableSamples(ALCcaptureOSS *self);
+DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, ClockLatency, getClockLatency)
+DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, void, lock)
+DECLARE_FORWARD(ALCcaptureOSS, ALCbackend, void, unlock)
DECLARE_DEFAULT_ALLOCATORS(ALCcaptureOSS)
DEFINE_ALCBACKEND_VTABLE(ALCcaptureOSS);
-static void ALCcaptureOSS_Construct(ALCcaptureOSS *self, ALCdevice *device)
+void ALCcaptureOSS_Construct(ALCcaptureOSS *self, ALCdevice *device)
{
new (self) ALCcaptureOSS{};
ALCbackend_Construct(STATIC_CAST(ALCbackend, self), device);
SET_VTABLE2(ALCcaptureOSS, ALCbackend, self);
}
-static void ALCcaptureOSS_Destruct(ALCcaptureOSS *self)
+void ALCcaptureOSS_Destruct(ALCcaptureOSS *self)
{
if(self->fd != -1)
close(self->fd);
@@ -549,7 +548,7 @@ static void ALCcaptureOSS_Destruct(ALCcaptureOSS *self)
}
-static int ALCcaptureOSS_recordProc(ALCcaptureOSS *self)
+int ALCcaptureOSS_recordProc(ALCcaptureOSS *self)
{
ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice;
struct timeval timeout;
@@ -606,7 +605,7 @@ static int ALCcaptureOSS_recordProc(ALCcaptureOSS *self)
}
-static ALCenum ALCcaptureOSS_open(ALCcaptureOSS *self, const ALCchar *name)
+ALCenum ALCcaptureOSS_open(ALCcaptureOSS *self, const ALCchar *name)
{
ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice;
@@ -719,7 +718,7 @@ static ALCenum ALCcaptureOSS_open(ALCcaptureOSS *self, const ALCchar *name)
return ALC_NO_ERROR;
}
-static ALCboolean ALCcaptureOSS_start(ALCcaptureOSS *self)
+ALCboolean ALCcaptureOSS_start(ALCcaptureOSS *self)
{
try {
self->killNow.store(AL_FALSE);
@@ -734,7 +733,7 @@ static ALCboolean ALCcaptureOSS_start(ALCcaptureOSS *self)
return ALC_FALSE;
}
-static void ALCcaptureOSS_stop(ALCcaptureOSS *self)
+void ALCcaptureOSS_stop(ALCcaptureOSS *self)
{
if(self->killNow.exchange(AL_TRUE) || !self->thread.joinable())
return;
@@ -745,66 +744,44 @@ static void ALCcaptureOSS_stop(ALCcaptureOSS *self)
ERR("Error resetting device: %s\n", strerror(errno));
}
-static ALCenum ALCcaptureOSS_captureSamples(ALCcaptureOSS *self, ALCvoid *buffer, ALCuint samples)
+ALCenum ALCcaptureOSS_captureSamples(ALCcaptureOSS *self, ALCvoid *buffer, ALCuint samples)
{
ll_ringbuffer_read(self->ring, static_cast<char*>(buffer), samples);
return ALC_NO_ERROR;
}
-static ALCuint ALCcaptureOSS_availableSamples(ALCcaptureOSS *self)
+ALCuint ALCcaptureOSS_availableSamples(ALCcaptureOSS *self)
{
return ll_ringbuffer_read_space(self->ring);
}
+} // namespace
-struct ALCossBackendFactory final : public ALCbackendFactory {
- ALCossBackendFactory() noexcept;
-};
-
-ALCbackendFactory *ALCossBackendFactory_getFactory(void);
-
-static ALCboolean ALCossBackendFactory_init(ALCossBackendFactory *self);
-static void ALCossBackendFactory_deinit(ALCossBackendFactory *self);
-static ALCboolean ALCossBackendFactory_querySupport(ALCossBackendFactory *self, ALCbackend_Type type);
-static void ALCossBackendFactory_probe(ALCossBackendFactory *self, enum DevProbe type, std::string *outnames);
-static ALCbackend* ALCossBackendFactory_createBackend(ALCossBackendFactory *self, ALCdevice *device, ALCbackend_Type type);
-DEFINE_ALCBACKENDFACTORY_VTABLE(ALCossBackendFactory);
-
-
-ALCossBackendFactory::ALCossBackendFactory() noexcept
- : ALCbackendFactory{GET_VTABLE2(ALCossBackendFactory, ALCbackendFactory)}
-{ }
-ALCbackendFactory *ALCossBackendFactory_getFactory(void)
+BackendFactory &OSSBackendFactory::getFactory()
{
- static ALCossBackendFactory factory{};
- return STATIC_CAST(ALCbackendFactory, &factory);
+ static OSSBackendFactory factory{};
+ return factory;
}
-
-ALCboolean ALCossBackendFactory_init(ALCossBackendFactory* UNUSED(self))
+bool OSSBackendFactory::init()
{
ConfigValueStr(nullptr, "oss", "device", &DefaultPlayback);
ConfigValueStr(nullptr, "oss", "capture", &DefaultCapture);
- return ALC_TRUE;
+ return true;
}
-void ALCossBackendFactory_deinit(ALCossBackendFactory* UNUSED(self))
+void OSSBackendFactory::deinit()
{
PlaybackDevices.clear();
CaptureDevices.clear();
}
+bool OSSBackendFactory::querySupport(ALCbackend_Type type)
+{ return (type == ALCbackend_Playback || type == ALCbackend_Capture); }
-ALCboolean ALCossBackendFactory_querySupport(ALCossBackendFactory* UNUSED(self), ALCbackend_Type type)
-{
- if(type == ALCbackend_Playback || type == ALCbackend_Capture)
- return ALC_TRUE;
- return ALC_FALSE;
-}
-
-void ALCossBackendFactory_probe(ALCossBackendFactory* UNUSED(self), enum DevProbe type, std::string *outnames)
+void OSSBackendFactory::probe(enum DevProbe type, std::string *outnames)
{
auto add_device = [outnames](const DevMap &entry) -> void
{
@@ -834,7 +811,7 @@ void ALCossBackendFactory_probe(ALCossBackendFactory* UNUSED(self), enum DevProb
}
}
-ALCbackend* ALCossBackendFactory_createBackend(ALCossBackendFactory* UNUSED(self), ALCdevice *device, ALCbackend_Type type)
+ALCbackend *OSSBackendFactory::createBackend(ALCdevice *device, ALCbackend_Type type)
{
if(type == ALCbackend_Playback)
{