summaryrefslogtreecommitdiffstats
path: root/stream/ai_sndio.c
blob: 10e95cea62cfd8889a4517d94a289bda797c7379 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>

#include "config.h"

#include <sndio.h>
#include "audio_in.h"
#include "common/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 = SIO_LE_NATIVE;
    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_ERR(ai, "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;

    const char *device = ai->sndio.device;
    if (!device)
        device = "default";
    if ((ai->sndio.hdl = sio_open(device, SIO_REC, 0)) == NULL) {
        MP_ERR(ai, "could not open sndio audio");
        return -1;
    }

    err = ai_sndio_setup(ai);

    return err;
}