diff options
author | Chris Robinson <[email protected]> | 2013-10-28 12:30:57 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2013-10-28 12:30:57 -0700 |
commit | 20bcb68ad6439bebc35bd9bb941916ad151cb690 (patch) | |
tree | e9dba9efaa2089410ad6c1b04c449982f2b3ce2c /Alc/backends/base.c | |
parent | 0617df9b5f6dd2b01d248edd0b4ad989d1c343f8 (diff) |
Move ALCbackend base stuff to a separate file
Diffstat (limited to 'Alc/backends/base.c')
-rw-r--r-- | Alc/backends/base.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Alc/backends/base.c b/Alc/backends/base.c new file mode 100644 index 00000000..70f7a181 --- /dev/null +++ b/Alc/backends/base.c @@ -0,0 +1,122 @@ + +#include "config.h" + +#include <stdlib.h> + +#include "alMain.h" + +#include "backends/base.h" + + +/* Base ALCbackend method implementations. */ +void ALCbackend_Construct(ALCbackend *self, ALCdevice *device) +{ + self->mDevice = device; + InitializeCriticalSection(&self->mMutex); +} + +void ALCbackend_Destruct(ALCbackend *self) +{ + DeleteCriticalSection(&self->mMutex); +} + +ALint64 ALCbackend_getLatency(ALCbackend* UNUSED(self)) +{ + return 0; +} + +void ALCbackend_lock(ALCbackend *self) +{ + EnterCriticalSection(&self->mMutex); +} + +void ALCbackend_unlock(ALCbackend *self) +{ + LeaveCriticalSection(&self->mMutex); +} + + +/* Wrapper to use an old-style backend with the new interface. */ +typedef struct BackendWrapper { + DERIVE_FROM_TYPE(ALCbackend); +} BackendWrapper; +#define BACKENDWRAPPER_INITIALIZER { { GET_VTABLE2(ALCbackend, BackendWrapper) } } + +static void BackendWrapper_Construct(BackendWrapper *self, ALCdevice *device) +{ + ALCbackend_Construct(STATIC_CAST(ALCbackend, self), device); +} + +static void BackendWrapper_Destruct(BackendWrapper *self) +{ + ALCbackend_Destruct(STATIC_CAST(ALCbackend, self)); +} + +static ALCenum BackendWrapper_open(BackendWrapper *self, const ALCchar *name) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + return device->Funcs->OpenPlayback(device, name); +} + +static void BackendWrapper_close(BackendWrapper *self) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + device->Funcs->ClosePlayback(device); +} + +static ALCboolean BackendWrapper_reset(BackendWrapper *self) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + return device->Funcs->ResetPlayback(device); +} + +static ALCboolean BackendWrapper_start(BackendWrapper *self) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + return device->Funcs->StartPlayback(device); +} + +static void BackendWrapper_stop(BackendWrapper *self) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + device->Funcs->StopPlayback(device); +} + +static ALint64 BackendWrapper_getLatency(BackendWrapper *self) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + return device->Funcs->GetLatency(device); +} + +static void BackendWrapper_lock(BackendWrapper *self) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + return device->Funcs->Lock(device); +} + +static void BackendWrapper_unlock(BackendWrapper *self) +{ + ALCdevice *device = STATIC_CAST(ALCbackend, self)->mDevice; + return device->Funcs->Unlock(device); +} + +static void BackendWrapper_Delete(BackendWrapper *self) +{ + free(self); +} + +DEFINE_ALCBACKEND_VTABLE(BackendWrapper); + + +ALCbackend *create_backend_wrapper(ALCdevice *device) +{ + BackendWrapper *backend; + + backend = malloc(sizeof(*backend)); + if(!backend) return NULL; + SET_VTABLE2(BackendWrapper, ALCbackend, backend); + + BackendWrapper_Construct(backend, device); + + return STATIC_CAST(ALCbackend, backend); +} |