]> Nishi Git Mirror - gwion.git/commitdiff
:art: Driver now in DriverInfo
authorfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 7 Mar 2019 10:08:51 +0000 (11:08 +0100)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Thu, 7 Mar 2019 10:08:51 +0000 (11:08 +0100)
include/driver.h
include/gwion.h
src/gwion.c
src/plug.c

index 1d8724db3ec2c7705c2847beb3d98a8c16d9d210..ee17077d4bb756a194049723ddefdb8e28c811e0 100644 (file)
@@ -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;
 
index f2ff3affa00f7fc87acbddf2e364f369b04b4d4c..cdacd0efbfe3b499813834c1de9c893874b5d4b4 100644 (file)
@@ -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;
index e760a12fe388ae645d8ef4e9da5086f3c29258d6..79a920dbcd1af011646ea74196aa07dd063b8dbc 100644 (file)
 #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);
index 663405512434cd6c2b5a94f89d8c26c3e6b053fb..0d43dffd3cdef29624679248012705aa3516a1e5 100644 (file)
@@ -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);