mirror of https://github.com/ericonr/sndio.git
unbreak monitoring mode (was 1 block off)
This commit is contained in:
parent
559d953ef6
commit
0c70f95bd5
23
sndiod/dev.c
23
sndiod/dev.c
|
@ -740,9 +740,15 @@ void
|
||||||
dev_sub_bcopy(struct dev *d, struct slot *s)
|
dev_sub_bcopy(struct dev *d, struct slot *s)
|
||||||
{
|
{
|
||||||
adata_t *idata, *odata;
|
adata_t *idata, *odata;
|
||||||
int ocount;
|
int ocount, moffs;
|
||||||
|
|
||||||
idata = (s->mode & MODE_MON) ? DEV_PBUF(d) : d->rbuf;
|
if (s->mode & MODE_MON) {
|
||||||
|
moffs = d->poffs + d->round;
|
||||||
|
if (moffs == d->psize)
|
||||||
|
moffs = 0;
|
||||||
|
idata = d->pbuf + moffs * d->pchan;
|
||||||
|
} else
|
||||||
|
idata = d->rbuf;
|
||||||
odata = (adata_t *)abuf_wgetblk(&s->sub.buf, &ocount);
|
odata = (adata_t *)abuf_wgetblk(&s->sub.buf, &ocount);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (ocount < s->round * s->sub.bpf) {
|
if (ocount < s->round * s->sub.bpf) {
|
||||||
|
@ -864,11 +870,6 @@ dev_full_cycle(struct dev *d)
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (s->mode & MODE_PLAY) {
|
|
||||||
dev_mix_badd(d, s);
|
|
||||||
if (s->pstate != SLOT_STOP)
|
|
||||||
s->ops->fill(s->arg);
|
|
||||||
}
|
|
||||||
if ((s->mode & MODE_RECMASK) && !(s->pstate == SLOT_STOP)) {
|
if ((s->mode & MODE_RECMASK) && !(s->pstate == SLOT_STOP)) {
|
||||||
if (s->sub.prime == 0) {
|
if (s->sub.prime == 0) {
|
||||||
dev_sub_bcopy(d, s);
|
dev_sub_bcopy(d, s);
|
||||||
|
@ -885,6 +886,11 @@ dev_full_cycle(struct dev *d)
|
||||||
s->sub.prime--;
|
s->sub.prime--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (s->mode & MODE_PLAY) {
|
||||||
|
dev_mix_badd(d, s);
|
||||||
|
if (s->pstate != SLOT_STOP)
|
||||||
|
s->ops->fill(s->arg);
|
||||||
|
}
|
||||||
ps = &s->next;
|
ps = &s->next;
|
||||||
}
|
}
|
||||||
if ((d->mode & MODE_PLAY) && d->encbuf) {
|
if ((d->mode & MODE_PLAY) && d->encbuf) {
|
||||||
|
@ -1095,8 +1101,9 @@ dev_open(struct dev *d)
|
||||||
/*
|
/*
|
||||||
* Create device <-> mixer buffer
|
* Create device <-> mixer buffer
|
||||||
*/
|
*/
|
||||||
d->pbuf = xmalloc(d->bufsz * d->pchan * sizeof(adata_t));
|
|
||||||
d->poffs = 0;
|
d->poffs = 0;
|
||||||
|
d->psize = d->bufsz + d->round;
|
||||||
|
d->pbuf = xmalloc(d->psize * d->pchan * sizeof(adata_t));
|
||||||
d->mode |= MODE_MON;
|
d->mode |= MODE_MON;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -113,6 +113,7 @@ struct dev {
|
||||||
adata_t *pbuf; /* array of play buffers */
|
adata_t *pbuf; /* array of play buffers */
|
||||||
#define DEV_PBUF(d) ((d)->pbuf + (d)->poffs * (d)->pchan)
|
#define DEV_PBUF(d) ((d)->pbuf + (d)->poffs * (d)->pchan)
|
||||||
int poffs; /* index of current play buf */
|
int poffs; /* index of current play buf */
|
||||||
|
int psize; /* size of play buffer */
|
||||||
struct conv enc; /* native->device format */
|
struct conv enc; /* native->device format */
|
||||||
struct conv dec; /* device->native format */
|
struct conv dec; /* device->native format */
|
||||||
unsigned char *encbuf; /* buffer for encoding */
|
unsigned char *encbuf; /* buffer for encoding */
|
||||||
|
|
|
@ -415,7 +415,7 @@ dev_sio_run(void *arg)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
d->poffs += d->round;
|
d->poffs += d->round;
|
||||||
if (d->poffs == d->bufsz)
|
if (d->poffs == d->psize)
|
||||||
d->poffs = 0;
|
d->poffs = 0;
|
||||||
if ((d->mode & MODE_REC) && d->prime == 0) {
|
if ((d->mode & MODE_REC) && d->prime == 0) {
|
||||||
d->sio.cstate = DEV_SIO_READ;
|
d->sio.cstate = DEV_SIO_READ;
|
||||||
|
|
Loading…
Reference in New Issue