mdelibs/audio/thread/body.c

64 lines
1.1 KiB
C
Raw Normal View History

2025-11-25 11:08:13 +09:00
static void thread_routine(void* arg) {
2025-11-22 17:36:48 +09:00
driver_t* drv = arg;
2025-11-22 17:56:29 +09:00
void* data;
2025-11-22 17:36:48 +09:00
data = malloc(drv->frames * 2 * 2);
2025-11-22 17:56:29 +09:00
while(1) {
2025-11-22 17:36:48 +09:00
drv->handler(drv, drv->user, data, drv->frames);
drv_write(drv, data, drv->frames);
2025-11-25 11:08:13 +09:00
MDEMutexLock(drv->mutex);
2025-11-22 17:56:29 +09:00
if(drv->quit) {
2025-11-25 11:08:13 +09:00
MDEMutexUnlock(&drv->mutex);
2025-11-22 17:36:48 +09:00
break;
}
2025-11-25 11:08:13 +09:00
MDEMutexUnlock(drv->mutex);
2025-11-22 17:36:48 +09:00
}
free(data);
}
2025-11-24 19:49:08 +09:00
MDEAudio MDEAudioOpen(MDEAudioHandler handler, void* user) {
2025-11-22 17:56:29 +09:00
int rate = MDEAudioRate;
driver_t* drv = malloc(sizeof(*drv));
2025-11-22 17:36:48 +09:00
memset(drv, 0, sizeof(*drv));
2025-11-22 17:56:29 +09:00
drv->quit = 0;
2025-11-22 17:36:48 +09:00
drv->handler = handler;
2025-11-22 17:56:29 +09:00
drv->user = user;
drv->init = 0;
2025-11-22 17:36:48 +09:00
2025-11-25 11:08:13 +09:00
drv->mutex = MDEMutexCreate();
2025-11-22 17:36:48 +09:00
2025-11-22 17:56:29 +09:00
if(!(drv->init = drv_open(drv))) {
2025-11-22 17:36:48 +09:00
MDEAudioClose(drv);
return NULL;
}
return drv;
}
2025-11-24 19:49:08 +09:00
void MDEAudioClose(MDEAudio handle) {
2025-11-22 17:36:48 +09:00
driver_t* drv = handle;
2025-11-22 17:56:29 +09:00
if(drv->init) {
2025-11-25 11:08:13 +09:00
MDEMutexLock(drv->mutex);
2025-11-22 17:36:48 +09:00
drv->quit = 1;
2025-11-25 11:08:13 +09:00
MDEMutexLock(drv->mutex);
MDEThreadJoin(drv->thread);
2025-11-22 17:36:48 +09:00
}
2025-11-25 11:08:13 +09:00
MDEMutexDestroy(drv->mutex);
2025-11-22 17:36:48 +09:00
drv_close(drv);
free(drv);
}
2025-11-24 19:49:08 +09:00
void MDEAudioStart(MDEAudio handle) {
2025-11-22 17:36:48 +09:00
driver_t* drv = handle;
2025-11-25 11:08:13 +09:00
drv->thread = MDEThreadCreate(thread_routine, handle);
2025-11-22 17:36:48 +09:00
}