]> Nishi Git Mirror - gwion.git/commitdiff
:art: Try Alsa
authorfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 5 Mar 2019 22:35:05 +0000 (23:35 +0100)
committerfennecdjay <astor.jeremie@wanadoo.fr>
Tue, 5 Mar 2019 22:35:05 +0000 (23:35 +0100)
include/driver.h
include/plug.h
include/vm.h
src/arg.c
src/drvr/driver.c
src/gwion.c
src/lib/ugen.c
src/main.c
src/plug.c
src/vm/vm.c

index 37759c99ae6744e14e7f0431b1ef71764ccca311..758d0bf37ac3ac24d829cebe8cc60b780eb9d157 100644 (file)
@@ -2,19 +2,12 @@
 #define __DRIVER
 typedef struct driver_wrapper* Driver_;
 typedef struct containing_driver_info {
-  m_uint in, out;
-  m_uint chan;
-  uint   sr;
-  m_uint bufsize;
-  m_uint bufnum;
-  m_str card;
-  m_uint backend;
-  m_uint format;
+  uint8_t in, out;
+  uint32_t   sr;
   m_str arg;
   void (*func)(Driver_);
   void (*run)(const VM*);
   void* data;
-  unsigned raw : 1;
 } DriverInfo;
 
 
index 0e18dfc45e74f492a0aba847564b8b1789fcde2b..2bebfc8f360b480657e0013ca40947ab62018ba0 100644 (file)
@@ -26,5 +26,6 @@ void plug_end(const Gwion gwion);
 #define GWMODEND(a)  ANN void  GWMODEND_NAME(const Gwion gwion, void* self)
 #define GWDRIVER(a)  ANN void  GWDRIVER_NAME(struct driver_wrapper* d)
 
-void plug_ini(const Gwion gwion, const Vector);
+ANN void plug_ini(const Gwion gwion, const Vector);
+ANN Vector split_args(const m_str str);
 #endif
index d8a4c8741544ccbfa15919f8d9c286dde815885b..44e057f39d31758f80c15afa43da9824fbd5c957 100644 (file)
@@ -19,8 +19,8 @@ struct BBQ_ {
   m_float* in;
   m_float* out;
   uint32_t sr; // int 32
-  uint8_t nchan;
   uint8_t n_in;
+  uint8_t n_out;
 };
 
 typedef struct Shreduler_* Shreduler;
index 749733bd70126301ce223800bf7eb90878a46692..ac7f43913573e794c81fe69e991aa178d7d62b22 100644 (file)
--- a/src/arg.c
+++ b/src/arg.c
@@ -38,8 +38,8 @@ static const struct option long_option[] = {
   { "alone",    1, NULL, 'a' },
   { "in",       1, NULL, 'i' },
   { "out",      1, NULL, 'o' },
-  { "bufsize",  1, NULL, 'b' },
-  { "bufnum",   1, NULL, 'n' },
+//  { "bufsize",  1, NULL, 'b' },
+//  { "bufnum",   1, NULL, 'n' },
   { "loop",     1, NULL, 'l' },
   { "format",   1, NULL, 'l' },
   { "help",     0, NULL, '?' },
@@ -93,14 +93,14 @@ ANN static void arg_add(Arg* arg) {
 
 ANN static void arg_drvr(DriverInfo* di, const int i) {
     switch(i) {
-      case 'c':
-        di->card     = optarg;
-        break;
-      case 'g':
-        di->chan     = (m_uint)strtol(optarg, NULL, 10);
-        di->in       = (m_uint)strtol(optarg, NULL, 10);
-        di->out      = (m_uint)strtol(optarg, NULL, 10);
-        break;
+//      case 'c':
+//        di->card     = optarg;
+        break;
+//      case 'g':
+//        di->chan     = (m_uint)strtol(optarg, NULL, 10);
+//        di->in       = (m_uint)strtol(optarg, NULL, 10);
+//        di->out      = (m_uint)strtol(optarg, NULL, 10);
+//        break;
       case 'i':
         di->in       = (m_uint)strtol(optarg, NULL, 10);
         break;
@@ -119,15 +119,15 @@ ANN static void arg_drvr(DriverInfo* di, const int i) {
       case 'e':
         select_backend(di, optarg);
         break;
-      case 'r':
-        di->raw = 1;
-        break;
-      case 'n':
-        di->bufnum    = (m_uint)strtol(optarg, NULL, 10);
-        break;
-      case 'b':
-        di->bufsize    = (m_uint)strtol(optarg, NULL, 10);
-        break;
+//      case 'r':
+//        di->raw = 1;
+//        break;
+//      case 'n':
+//        di->bufnum    = (m_uint)strtol(optarg, NULL, 10);
+//        break;
+//      case 'b':
+//        di->bufsize    = (m_uint)strtol(optarg, NULL, 10);
+//        break;
     default:
       gw_err("Unknown argument '%c'\n", i);
   }
index fe299a633526c64e37f1ae8368ee375a6b80b36d..2939f570c7f252e52dee09b92e8267686c0b119a 100644 (file)
@@ -15,7 +15,7 @@ ANN struct BBQ_* new_bbq(DriverInfo* di) {
   bbq->in  = (m_float*)xcalloc(di->in, SZ_FLOAT);
   bbq->n_in = (uint8_t)di->in;
   bbq->sr = di->sr;
-  bbq->nchan = (uint8_t)di->chan;
+  bbq->n_out = (uint8_t)di->out;
   return bbq;
 }
 
index 9594284a96c144de7b765e7b3528363557dd6120..eda2402a22c4cbdc0ee9b2a545878a18b9b6b553 100644 (file)
@@ -50,8 +50,9 @@ ANN m_bool gwion_audio(const Gwion gwion, DriverInfo* di) {
   }
   di->func(gwion->driver);
   VM* vm = gwion->vm;
-  return gwion->driver->ini(vm, di) > 0 &&
-    (vm->bbq = new_bbq(di));
+  CHECK_BB(gwion->driver->ini(vm, di));
+  vm->bbq = new_bbq(di);
+  return GW_OK;
 }
 
 ANN m_bool gwion_engine(const Gwion gwion) {
index 8e84e1b2b98cfe6feb161cddc4dcda5676faa206..0a0da187e3b336277a293904a0c8ec9a6d0be814 100644 (file)
@@ -312,7 +312,7 @@ static GWION_IMPORT(global_ugens) {
   const VM* vm = gwi_vm(gwi);
   struct ugen_importer hole = { vm, compute_mono, "blackhole", 1, NULL };
   add_ugen(gwi, &hole);
-  struct ugen_importer dac = { vm, dac_tick, "dac", vm->bbq->nchan, NULL };
+  struct ugen_importer dac = { vm, dac_tick, "dac", vm->bbq->n_out, NULL };
   add_ugen(gwi, &dac);
   struct ugen_importer adc = { vm, adc_tick, "adc", vm->bbq->n_in, NULL };
   add_ugen(gwi, &adc);
index a52b01c9621b5a94241bb9081b5bb84539366900..eb8d347be5f63969750eeff44548032e1a160d2f 100644 (file)
@@ -17,8 +17,8 @@ static void sig(int unused __attribute__((unused))) {
 
 int main(int argc, char** argv) {
   Arg arg = { .argc = argc, .argv=argv, .loop=-1 };
-  DriverInfo di = { .in=2, .out=2, .chan=2, .sr=48000, .bufsize=256,
-    .bufnum=3, .card="default:CARD=CODEC", .func=D_FUNC, .run=vm_run };
+  DriverInfo di = { .in=2, .out=2, /* .chan=2, */ .sr=48000, /* .bufsize=256,
+    .bufnum=3, .card="default:CARD=CODEC",*/ .func=D_FUNC, .run=vm_run };
   if(parse_args(&arg, &di)) {
     arg_release(&arg);
     return 0;
@@ -26,7 +26,7 @@ int main(int argc, char** argv) {
   gwion_init(&gwion, &arg.lib);
   signal(SIGINT, sig);
   signal(SIGTERM, sig);
-  if(gwion_audio(&gwion, &di) && gwion_engine(&gwion)) {
+  if(gwion_audio(&gwion, &di) > 0 && gwion_engine(&gwion)) {
     plug_ini(&gwion, &arg.mod);
     for(m_uint i = 0; i < vector_size(&arg.add); i++)
       compile_filename(&gwion, (m_str)vector_at(&arg.add, i));
index 7e657403e9c235bf8c7587dc33bcafca75e67de8..e1c2e2960f1a45cf2110fb56236bac25dd64531c 100644 (file)
@@ -52,8 +52,6 @@ ANN static void plug_get(PlugInfo* p, const m_str c) {
     const driver drv = DLFUNC(dl, driver, GWDRIVER_NAME);
     if(drv) {
       const modstr str = DLFUNC(dl, modstr, GWMODSTR_NAME);
-printf("%s %s\n", __func__, str());
-//      map_set(&p->drv, (vtype)str(), (vtype)drv);
       map_set(&p->drv, (vtype)str(), (vtype)drv);
     }
   } else
@@ -95,21 +93,25 @@ void plug_end(const Gwion gwion) {
   map_release(&gwion->plug->drv);
 }
 
+ANN Vector split_args(const m_str str) {
+  const m_str arg = strchr(str, '=');
+  m_str c, d = strdup(arg+1);
+  c = d;
+  const Vector args = new_vector();
+  while(d)
+    vector_add(args, (vtype)strdup(strsep(&d, ",")));
+  free(d);
+  free(c);
+  return args;
+}
+
 ANN static Vector get_arg(const m_str name, const Vector v) {
   const size_t len = strlen(name);
   for(m_uint i = vector_size(v) + 1; --i;) {
     const m_str str = (m_str)vector_at(v, i - 1);
     if(!strncmp(name, str, len)) {
-      const m_str arg = strchr(str, '=');
-      m_str c, d = strdup(arg+1);
-      c = d;
-      const Vector args = new_vector();
-      while(d)
-        vector_add(args, (vtype)strdup(strsep(&d, ",")));
-      free(d);
-      free(c);
       vector_rem(v, i-1);
-      return args;
+      return split_args(str);
     }
   }
   return NULL;
index 49f9dcd2164cbd569c1cef674487480c7a077782..91f22138738d7ac35fa19a5da545adfb06606493 100644 (file)
@@ -71,9 +71,11 @@ void vm_remove(const VM* vm, const m_uint index) {
 ANN void free_vm(VM* vm) {
   vector_release(&vm->shreduler->shreds);
   vector_release(&vm->ugen);
-  xfree(vm->bbq->in);
-  xfree(vm->bbq->out);
-  xfree(vm->bbq);
+  if(vm->bbq) {
+    xfree(vm->bbq->in);
+    xfree(vm->bbq->out);
+    xfree(vm->bbq);
+  }
   xfree(vm->shreduler);
   free(vm);
 }