From: fennecdjay Date: Thu, 7 Mar 2019 10:08:51 +0000 (+0100) Subject: :art: Driver now in DriverInfo X-Git-Tag: nightly~2753^2~22 X-Git-Url: http://10.11.0.4:5575/?a=commitdiff_plain;h=ffee4302e20c67d229c42638333bc2467825d7bb;p=gwion.git :art: Driver now in DriverInfo --- diff --git a/include/driver.h b/include/driver.h index 1d8724db..ee17077d 100644 --- a/include/driver.h +++ b/include/driver.h @@ -2,15 +2,16 @@ #define __DRIVER struct Driver_; -typedef void (*f_drvset)(struct Driver_*); -typedef void (*f_run)(const VM*); +typedef void (*f_diset)(struct Driver_*); +typedef void (*f_dirun)(const VM*); typedef struct DriverInfo_ { uint32_t sr; m_str arg; - f_drvset func; - f_run run; + f_diset func; + f_dirun run; void* data; + struct Driver_* driver; uint8_t in, out; } DriverInfo; diff --git a/include/gwion.h b/include/gwion.h index f2ff3aff..cdacd0ef 100644 --- a/include/gwion.h +++ b/include/gwion.h @@ -5,12 +5,11 @@ typedef struct Gwion_* Gwion; #include "driver.h" struct Gwion_ { PlugInfo* plug; - Driver* driver; -// scanner + DriverInfo* di; +// arg + // sym // mem -// rnd -// dl Env env; Emitter emit; VM* vm; diff --git a/src/gwion.c b/src/gwion.c index e760a12f..79a920db 100644 --- a/src/gwion.c +++ b/src/gwion.c @@ -24,6 +24,14 @@ #define VMBENCH_END #endif +ANN static DriverInfo* new_driverinfo(void) { + DriverInfo *di = (DriverInfo*)xcalloc(1, sizeof(DriverInfo)); + di->sr = 48000; + di->in = di->out = 2; + di->driver = (Driver*)xcalloc(1, sizeof(Driver)); + return di; +} + ANN void gwion_init(const Gwion gwion, const Vector args) { gwion->vm = new_vm(); gwion->emit = new_emitter(); @@ -31,7 +39,9 @@ ANN void gwion_init(const Gwion gwion, const Vector args) { gwion->emit->env = gwion->env; gwion->vm->gwion = gwion; gwion->env->gwion = gwion; - gwion->driver = (Driver*)xcalloc(1, sizeof(Driver)); + gwion->di = new_driverinfo(); +// gwion->di = (Driver*)xcalloc(1, sizeof(DriverInfo)); +// gwion->di->driver = (Driver*)xcalloc(1, sizeof(Driver)); gwion->plug = (PlugInfo*)xmalloc(sizeof(PlugInfo)); plug_discover(gwion->plug, args); } @@ -43,14 +53,14 @@ ANN m_bool gwion_audio(const Gwion gwion, DriverInfo* di) { const m_str name = (m_str)VKEY(&gwion->plug->drv, i); const size_t len = strlen(name); if(!strncmp(name, di->arg, len)) { - di->func = (f_drvset)VVAL(&gwion->plug->drv, i); + di->func = (f_diset)VVAL(&gwion->plug->drv, i); break; } } } - di->func(gwion->driver); + di->func(gwion->di->driver); VM* vm = gwion->vm; - CHECK_BB(gwion->driver->ini(vm, di)); + CHECK_BB(gwion->di->driver->ini(vm, di)); vm->bbq = new_bbq(di); return GW_OK; } @@ -63,14 +73,15 @@ ANN void gwion_run(const Gwion gwion, DriverInfo* di) { VM* vm = gwion->vm; vm->is_running = 1; VMBENCH_INI - gwion->driver->run(vm, di); + gwion->di->driver->run(vm, di); VMBENCH_END } ANN void gwion_release(const Gwion gwion, DriverInfo* di) { - if(gwion->driver->del) - gwion->driver->del(gwion->vm, di); - xfree(gwion->driver); + if(gwion->di->driver->del) + gwion->di->driver->del(gwion->vm, di); + xfree(gwion->di->driver); + xfree(gwion->di); plug_end(gwion); free_env(gwion->env); free_emitter(gwion->emit); diff --git a/src/plug.c b/src/plug.c index 66340551..0d43dffd 100644 --- a/src/plug.c +++ b/src/plug.c @@ -49,7 +49,7 @@ ANN static void plug_get(PlugInfo* p, const m_str c) { plug->end = DLFUNC(dl, modend, GWMODEND_NAME); vector_add(&p->vec[GWPLUG_MODULE], (vtype)plug); } - const f_drvset drv = DLFUNC(dl, f_drvset, GWDRIVER_NAME); + const f_diset drv = DLFUNC(dl, f_diset, GWDRIVER_NAME); if(drv) { const modstr str = DLFUNC(dl, modstr, GWMODSTR_NAME); map_set(&p->drv, (vtype)str(), (vtype)drv);