windows support
This commit is contained in:
parent
f1cd631aae
commit
b9004acd79
16 changed files with 208 additions and 32 deletions
64
audio/thread/body.c
Normal file
64
audio/thread/body.c
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
static void thread_routine(void* arg) {
|
||||
driver_t* drv = arg;
|
||||
void* data;
|
||||
|
||||
data = malloc(drv->frames * 2 * 2);
|
||||
|
||||
while(1) {
|
||||
drv->handler(drv, drv->user, data, drv->frames);
|
||||
|
||||
drv_write(drv, data, drv->frames);
|
||||
|
||||
MDEMutexLock(drv->mutex);
|
||||
if(drv->quit) {
|
||||
MDEMutexUnlock(&drv->mutex);
|
||||
break;
|
||||
}
|
||||
MDEMutexUnlock(drv->mutex);
|
||||
}
|
||||
|
||||
free(data);
|
||||
}
|
||||
|
||||
MDEAudio MDEAudioOpen(MDEAudioHandler handler, void* user) {
|
||||
int rate = MDEAudioRate;
|
||||
driver_t* drv = malloc(sizeof(*drv));
|
||||
memset(drv, 0, sizeof(*drv));
|
||||
|
||||
drv->quit = 0;
|
||||
drv->handler = handler;
|
||||
drv->user = user;
|
||||
drv->init = 0;
|
||||
|
||||
drv->mutex = MDEMutexCreate();
|
||||
|
||||
if(!(drv->init = drv_open(drv))) {
|
||||
MDEAudioClose(drv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return drv;
|
||||
}
|
||||
|
||||
void MDEAudioClose(MDEAudio handle) {
|
||||
driver_t* drv = handle;
|
||||
|
||||
if(drv->init) {
|
||||
MDEMutexLock(drv->mutex);
|
||||
drv->quit = 1;
|
||||
MDEMutexLock(drv->mutex);
|
||||
MDEThreadJoin(drv->thread);
|
||||
}
|
||||
|
||||
MDEMutexDestroy(drv->mutex);
|
||||
|
||||
drv_close(drv);
|
||||
|
||||
free(drv);
|
||||
}
|
||||
|
||||
void MDEAudioStart(MDEAudio handle) {
|
||||
driver_t* drv = handle;
|
||||
|
||||
drv->thread = MDEThreadCreate(thread_routine, handle);
|
||||
}
|
||||
17
audio/thread/decl.c
Normal file
17
audio/thread/decl.c
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include <MDE/Audio/Audio.h>
|
||||
#include <MDE/Core/Thread.h>
|
||||
#include <MDE/Core/Mutex.h>
|
||||
|
||||
typedef struct driver {
|
||||
driver_context_t context;
|
||||
|
||||
int init;
|
||||
int frames;
|
||||
|
||||
MDEAudioHandler handler;
|
||||
void* user;
|
||||
|
||||
int quit;
|
||||
MDEThread thread;
|
||||
MDEMutex mutex;
|
||||
} driver_t;
|
||||
Loading…
Add table
Add a link
Reference in a new issue