Commit 5154296e48b4f0a034a01ca866ada1622fd7235f

Thomas de Grivel 2018-07-26T17:36:12

rtbuf_sndio

diff --git a/build/rtbuf_sndio/Makefile b/build/rtbuf_sndio/Makefile
index 04d21b1..76e9218 100644
--- a/build/rtbuf_sndio/Makefile
+++ b/build/rtbuf_sndio/Makefile
@@ -7,7 +7,7 @@ CFLAGS = -O0 -ggdb -W -Wall -Werror -fpic
 
 LDFLAGS = -fPIC -shared
 LIBS = -lsndio
-HEADERS = rtbuf.h rtbuf_lib.h rtbuf_signal.h
+HEADERS = rtbuf.h rtbuf_lib.h rtbuf_signal.h rtbuf_sndio.h
 OBJECTS = rtbuf_sndio.o
 
 SRC = ${HEADERS} ${OBJECTS:%.o=%.c}
diff --git a/rtbuf_sndio.c b/rtbuf_sndio.c
index 2f04fbf..2a18289 100644
--- a/rtbuf_sndio.c
+++ b/rtbuf_sndio.c
@@ -5,49 +5,30 @@
 #include "rtbuf.h"
 #include "rtbuf_lib.h"
 #include "rtbuf_signal.h"
-
-enum {
-  RTBUF_SNDIO_LEFT = 0,
-  RTBUF_SNDIO_RIGHT,
-  RTBUF_SNDIO_CHANNELS
-};
-
-typedef struct sndio_input_data {
-  double samples[RTBUF_SNDIO_CHANNELS][RTBUF_SIGNAL_SAMPLES];
-  short short_samples[RTBUF_SNDIO_CHANNELS * RTBUF_SIGNAL_SAMPLES];
-} s_sndio_input_data;
-
-static int sndio_input (s_rtbuf *rtb);
-static int sndio_input_start (s_rtbuf *rtb);
-static int sndio_input_stop (s_rtbuf *rtb);
-
-typedef struct sndio_output_data {
-  short samples[RTBUF_SNDIO_CHANNELS * RTBUF_SIGNAL_SAMPLES];
-  struct sio_hdl *sio_hdl;
-  struct sio_par want;
-  struct sio_par have;
-} s_sndio_output_data;
-
-static int sndio_output (s_rtbuf *rtb);
-static int sndio_output_start (s_rtbuf *rtb);
-static int sndio_output_stop (s_rtbuf *rtb);
-static const char *sndio_output_vars[] = { "left", "right", 0 };
-
-extern const char     *rtbuf_lib_name;
-extern unsigned long   rtbuf_lib_ver;
-extern s_rtbuf_lib_fun rtbuf_lib_fun[];
+#include "rtbuf_sndio.h"
 
 const char     *rtbuf_lib_name = "sndio";
 unsigned long   rtbuf_lib_ver = RTBUF_LIB_VER;
 s_rtbuf_lib_fun rtbuf_lib_fun[] = {
-  { "input", sndio_input, sndio_input_start, sndio_input_stop,
-    sizeof(s_sndio_input_data) / sizeof(double), sizeof(double), 0 },
-  { "output", sndio_output, sndio_output_start, sndio_output_stop,
-    1, sizeof(s_sndio_output_data), sndio_output_vars },
+  { "input", rtbuf_sndio_input, rtbuf_sndio_input_start,
+    rtbuf_sndio_input_stop,
+    sizeof(s_rtbuf_sndio_input_data) / sizeof(double) + 1,
+    sizeof(double), 0 },
+  { "output", rtbuf_sndio_output, rtbuf_sndio_output_start,
+    rtbuf_sndio_output_stop,
+    sizeof(s_rtbuf_sndio_output_data) / sizeof(short) + 1,
+    sizeof(short),
+    (const char*[]) { "left", "right", 0 } },
   { 0, 0, 0, 0, 0, 0, 0 }
 };
 
-int sndio_input (s_rtbuf *rtb)
+void print_sio_par (struct sio_par *par)
+{
+  printf("#<sio_par bits=%i sig=%i rchan=%i pchan=%i rate=%i>",
+         par->bits, par->sig, par->rchan, par->pchan, par->rate);
+}
+
+int rtbuf_sndio_input (s_rtbuf *rtb)
 {
   /*
     s_sndio_input_data *data = (s_sndio_input_data*) rtb->data;
@@ -56,25 +37,19 @@ int sndio_input (s_rtbuf *rtb)
   return 0;
 }
 
-int sndio_input_start (s_rtbuf *rtb)
+int rtbuf_sndio_input_start (s_rtbuf *rtb)
 {
   (void) rtb;
   return 0;
 }
 
-int sndio_input_stop (s_rtbuf *rtb)
+int rtbuf_sndio_input_stop (s_rtbuf *rtb)
 {
   (void) rtb;
   return 0;
 }
 
-void print_sio_par (struct sio_par *par)
-{
-  printf("#<sio_par bits=%i sig=%i rchan=%i pchan=%i rate=%i>",
-         par->bits, par->sig, par->rchan, par->pchan, par->rate);
-}
-
-void sndio_output_parameters (struct sio_par *want)
+void rtbuf_sndio_output_parameters (struct sio_par *want)
 {
   bzero(want, sizeof(struct sio_par));
   sio_initpar(want);
@@ -88,7 +63,7 @@ void sndio_output_parameters (struct sio_par *want)
   print_sio_par(want); printf("\n");
 }
 
-int sndio_output_check_parameters (struct sio_par *have)
+int rtbuf_sndio_output_check_parameters (struct sio_par *have)
 {
   print_sio_par(have); printf("\n");
   int ok = (have->bits == 16 &&
@@ -99,21 +74,22 @@ int sndio_output_check_parameters (struct sio_par *have)
   return ok;
 }
 
-int sndio_output_start (s_rtbuf *rtb)
+int rtbuf_sndio_output_start (s_rtbuf *rtb)
 {
-  s_sndio_output_data *data = (s_sndio_output_data*) rtb->data;
+  s_rtbuf_sndio_output_data *data;
   int err = 0;
+  data = (s_rtbuf_sndio_output_data*) rtb->data;
   if (!data->sio_hdl) {
     data->sio_hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0);
     if (!data->sio_hdl)
       err = rtbuf_err("sndio_output_start: sio_open failed");
     else {
-      sndio_output_parameters(&data->want);
+      rtbuf_sndio_output_parameters(&data->want);
       if (sio_setpar(data->sio_hdl, &data->want) != 1)
         err = rtbuf_err("sndio_output_start: sio_setpar failed");
       else if (sio_getpar(data->sio_hdl, &data->have) != 1)
         err = rtbuf_err("sndio_output_start: sio_getpar failed");
-      else if (!sndio_output_check_parameters(&data->have))
+      else if (!rtbuf_sndio_output_check_parameters(&data->have))
         err = rtbuf_err("sndio_output_start: check_parameters failed");
       else if (sio_start(data->sio_hdl) != 1)
         err = rtbuf_err("sndio_output_start: sio_start failed");
@@ -122,9 +98,10 @@ int sndio_output_start (s_rtbuf *rtb)
   return err;
 }
 
-int sndio_output_stop (s_rtbuf *rtb)
+int rtbuf_sndio_output_stop (s_rtbuf *rtb)
 {
-  s_sndio_output_data *data = (s_sndio_output_data*) rtb->data;
+  s_rtbuf_sndio_output_data *data;
+  data = (s_rtbuf_sndio_output_data*) rtb->data;
   if (data->sio_hdl) {
     sio_close(data->sio_hdl);
     data->sio_hdl = 0;
@@ -132,23 +109,15 @@ int sndio_output_stop (s_rtbuf *rtb)
   return 0;
 }
 
-double min (double a, double b)
+int rtbuf_sndio_output (s_rtbuf *rtb)
 {
-  return a < b ? a : b;
-}
-
-double max (double a, double b)
-{
-  return a > b ? a : b;
-}
-
-int sndio_output (s_rtbuf *rtb)
-{
-  s_sndio_output_data *data = (s_sndio_output_data*) rtb->data;
+  s_rtbuf_sndio_output_data *data;
   double *in[RTBUF_SNDIO_CHANNELS];
-  short *sample = data->samples;
+  short *sample;
   unsigned int i = 0;
   unsigned int j = 0;
+  data = (s_rtbuf_sndio_output_data*) rtb->data;
+  sample = data->samples;
   //printf("sndio_output");
   while (j < RTBUF_SNDIO_CHANNELS) {
     in[j] = rtb->var[j] < 0 ? 0 : (double*) g_rtbuf[rtb->var[j]].data;
@@ -175,10 +144,3 @@ int sndio_output (s_rtbuf *rtb)
   //printf("\n");
   return 0;
 }
-/*
-int rtbuf_err (const char *msg)
-{
-  fprintf(stderr, "%s\n", msg);
-  return -1;
-}
-*/
diff --git a/rtbuf_sndio.h b/rtbuf_sndio.h
new file mode 100644
index 0000000..224f584
--- /dev/null
+++ b/rtbuf_sndio.h
@@ -0,0 +1,30 @@
+#ifndef RTBUF_SNDIO_H
+#define RTBUF_SNDIO_H
+
+enum {
+  RTBUF_SNDIO_LEFT = 0,
+  RTBUF_SNDIO_RIGHT,
+  RTBUF_SNDIO_CHANNELS
+};
+
+typedef struct rtbuf_sndio_input_data {
+  double samples[RTBUF_SNDIO_CHANNELS][RTBUF_SIGNAL_SAMPLES];
+  short short_samples[RTBUF_SNDIO_CHANNELS * RTBUF_SIGNAL_SAMPLES];
+} s_rtbuf_sndio_input_data;
+
+int rtbuf_sndio_input (s_rtbuf *rtb);
+int rtbuf_sndio_input_start (s_rtbuf *rtb);
+int rtbuf_sndio_input_stop (s_rtbuf *rtb);
+
+typedef struct rtbuf_sndio_output_data {
+  short samples[RTBUF_SNDIO_CHANNELS * RTBUF_SIGNAL_SAMPLES];
+  struct sio_hdl *sio_hdl;
+  struct sio_par want;
+  struct sio_par have;
+} s_rtbuf_sndio_output_data;
+
+int rtbuf_sndio_output (s_rtbuf *rtb);
+int rtbuf_sndio_output_start (s_rtbuf *rtb);
+int rtbuf_sndio_output_stop (s_rtbuf *rtb);
+
+#endif