=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sndiod/dev.c,v retrieving revision 1.14 retrieving revision 1.15 diff -c -r1.14 -r1.15 *** src/usr.bin/sndiod/dev.c 2014/03/07 10:23:05 1.14 --- src/usr.bin/sndiod/dev.c 2014/03/17 17:16:06 1.15 *************** *** 1,4 **** ! /* $OpenBSD: dev.c,v 1.14 2014/03/07 10:23:05 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * --- 1,4 ---- ! /* $OpenBSD: dev.c,v 1.15 2014/03/17 17:16:06 ratchov Exp $ */ /* * Copyright (c) 2008-2012 Alexandre Ratchov * *************** *** 739,747 **** dev_sub_bcopy(struct dev *d, struct slot *s) { adata_t *idata, *odata; ! int ocount; ! idata = (s->mode & MODE_MON) ? DEV_PBUF(d) : d->rbuf; odata = (adata_t *)abuf_wgetblk(&s->sub.buf, &ocount); #ifdef DEBUG if (ocount < s->round * s->sub.bpf) { --- 739,753 ---- dev_sub_bcopy(struct dev *d, struct slot *s) { adata_t *idata, *odata; ! int ocount, moffs; ! 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); #ifdef DEBUG if (ocount < s->round * s->sub.bpf) { *************** *** 863,873 **** } 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->sub.prime == 0) { dev_sub_bcopy(d, s); --- 869,874 ---- *************** *** 884,889 **** --- 885,895 ---- 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; } if ((d->mode & MODE_PLAY) && d->encbuf) { *************** *** 1094,1101 **** /* * Create device <-> mixer buffer */ - d->pbuf = xmalloc(d->bufsz * d->pchan * sizeof(adata_t)); d->poffs = 0; d->mode |= MODE_MON; /* --- 1100,1108 ---- /* * Create device <-> mixer buffer */ d->poffs = 0; + d->psize = d->bufsz + d->round; + d->pbuf = xmalloc(d->psize * d->pchan * sizeof(adata_t)); d->mode |= MODE_MON; /*