summaryrefslogtreecommitdiffstats
path: root/stream/ai_sndio.c
diff options
context:
space:
mode:
Diffstat (limited to 'stream/ai_sndio.c')
-rw-r--r--stream/ai_sndio.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/stream/ai_sndio.c b/stream/ai_sndio.c
new file mode 100644
index 0000000000..b486bb9210
--- /dev/null
+++ b/stream/ai_sndio.c
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "config.h"
+
+#include <sndio.h>
+#include "audio_in.h"
+#include "mpvcore/mp_msg.h"
+
+int ai_sndio_setup(audio_in_t *ai)
+{
+ struct sio_par par;
+
+ sio_initpar(&par);
+
+ par.bits = 16;
+ par.sig = 1;
+ par.le = 1;
+ par.rchan = ai->req_channels;
+ par.rate = ai->req_samplerate;
+ par.appbufsz = ai->req_samplerate; /* 1 sec */
+
+ if (!sio_setpar(ai->sndio.hdl, &par) || !sio_getpar(ai->sndio.hdl, &par)) {
+ mp_msg(MSGT_TV, MSGL_ERR, "could not configure sndio audio");
+ return -1;
+ }
+
+ ai->channels = par.rchan;
+ ai->samplerate = par.rate;
+ ai->samplesize = par.bits;
+ ai->bytes_per_sample = par.bps;
+ ai->blocksize = par.round * par.bps;
+
+ return 0;
+}
+
+int ai_sndio_init(audio_in_t *ai)
+{
+ int err;
+
+ if ((ai->sndio.hdl = sio_open(ai->sndio.device, SIO_REC, 0)) == NULL) {
+ mp_msg(MSGT_TV, MSGL_ERR, "could not open sndio audio");
+ return -1;
+ }
+
+ err = ai_sndio_setup(ai);
+
+ return err;
+}