2013-09-28 18:01:12 +02:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#include <sndio.h>
|
|
|
|
#include "audio_in.h"
|
2013-12-17 02:39:45 +01:00
|
|
|
#include "common/msg.h"
|
2013-09-28 18:01:12 +02:00
|
|
|
|
|
|
|
int ai_sndio_setup(audio_in_t *ai)
|
|
|
|
{
|
|
|
|
struct sio_par par;
|
|
|
|
|
|
|
|
sio_initpar(&par);
|
|
|
|
|
|
|
|
par.bits = 16;
|
|
|
|
par.sig = 1;
|
2014-09-23 21:04:37 +02:00
|
|
|
par.le = SIO_LE_NATIVE;
|
2013-09-28 18:01:12 +02:00
|
|
|
par.rchan = ai->req_channels;
|
|
|
|
par.rate = ai->req_samplerate;
|
2014-04-13 18:00:51 +02:00
|
|
|
par.appbufsz = ai->req_samplerate; /* 1 sec */
|
2013-09-28 18:01:12 +02:00
|
|
|
|
|
|
|
if (!sio_setpar(ai->sndio.hdl, &par) || !sio_getpar(ai->sndio.hdl, &par)) {
|
2014-04-13 18:00:51 +02:00
|
|
|
MP_ERR(ai, "could not configure sndio audio");
|
|
|
|
return -1;
|
2013-09-28 18:01:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
2015-10-30 15:51:26 +01:00
|
|
|
const char *device = ai->sndio.device;
|
|
|
|
if (!device)
|
|
|
|
device = "default";
|
|
|
|
if ((ai->sndio.hdl = sio_open(device, SIO_REC, 0)) == NULL) {
|
2014-04-13 18:00:51 +02:00
|
|
|
MP_ERR(ai, "could not open sndio audio");
|
|
|
|
return -1;
|
2013-09-28 18:01:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
err = ai_sndio_setup(ai);
|
|
|
|
|
|
|
|
return err;
|
|
|
|
}
|