summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Ratchov <ratchov@cvs.openbsd.org>2008-08-14 09:39:17 +0000
committerAlexandre Ratchov <ratchov@cvs.openbsd.org>2008-08-14 09:39:17 +0000
commit176ae4d737b11d07d5a98e458c06aae69b507792 (patch)
treeb091913f7883b40fcb046f698c1b70e8960176c8
parent733f511cf5bea0e1866aa4cc8b573de6f0979600 (diff)
factor code that discards data from abuf strucure into a single
abuf_rdiscard() routine. Similarly add abuf_wcommit() routine for writing. The purpose is to stop manupulating FIFO pointers in various places outiside abuf.c, its too error prone. No behaviour change. ok jakemsr
-rw-r--r--usr.bin/aucat/abuf.c29
-rw-r--r--usr.bin/aucat/abuf.h4
-rw-r--r--usr.bin/aucat/aproc.c70
-rw-r--r--usr.bin/aucat/conf.h6
4 files changed, 56 insertions, 53 deletions
diff --git a/usr.bin/aucat/abuf.c b/usr.bin/aucat/abuf.c
index e79af1199f9..a3143d9ac18 100644
--- a/usr.bin/aucat/abuf.c
+++ b/usr.bin/aucat/abuf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: abuf.c,v 1.2 2008/05/25 21:16:37 ratchov Exp $ */
+/* $OpenBSD: abuf.c,v 1.3 2008/08/14 09:39:16 ratchov Exp $ */
/*
* Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
*
@@ -26,12 +26,6 @@
*
* TODO:
*
- * (easy) create abuf_wcommitblk(), abuf_rdiscardblk() instead of tweeking
- * the fifo pointers by hand. But first, find shorter function names...
- *
- * (easy) dont initialize aproc-specific stuff in abuf_new(), let the
- * aproc xxx_new() routines do it
- *
* (hard) make abuf_fill() a boolean depending on whether
* eof is reached. So the caller can do:
*
@@ -107,6 +101,27 @@ abuf_rgetblk(struct abuf *buf, unsigned *rsize, unsigned ofs)
}
/*
+ * Discard the block at the start postion
+ */
+void
+abuf_rdiscard(struct abuf *buf, unsigned count)
+{
+ buf->used -= count;
+ buf->start += count;
+ if (buf->start >= buf->len)
+ buf->start -= buf->len;
+}
+
+/*
+ * Commit the data written at the end postion
+ */
+void
+abuf_wcommit(struct abuf *buf, unsigned count)
+{
+ buf->used += count;
+}
+
+/*
* Get a pointer to the writable block at offset ofs.
*/
unsigned char *
diff --git a/usr.bin/aucat/abuf.h b/usr.bin/aucat/abuf.h
index 66dd1ac3154..d7345e0dcd5 100644
--- a/usr.bin/aucat/abuf.h
+++ b/usr.bin/aucat/abuf.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: abuf.h,v 1.4 2008/06/02 17:06:36 ratchov Exp $ */
+/* $OpenBSD: abuf.h,v 1.5 2008/08/14 09:39:16 ratchov Exp $ */
/*
* Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
*
@@ -88,6 +88,8 @@ struct abuf *abuf_new(unsigned, unsigned);
void abuf_del(struct abuf *);
unsigned char *abuf_rgetblk(struct abuf *, unsigned *, unsigned);
unsigned char *abuf_wgetblk(struct abuf *, unsigned *, unsigned);
+void abuf_rdiscard(struct abuf *, unsigned);
+void abuf_wcommit(struct abuf *, unsigned);
void abuf_fill(struct abuf *);
void abuf_flush(struct abuf *);
void abuf_eof(struct abuf *);
diff --git a/usr.bin/aucat/aproc.c b/usr.bin/aucat/aproc.c
index ab9e7ede8a4..b938bb6907d 100644
--- a/usr.bin/aucat/aproc.c
+++ b/usr.bin/aucat/aproc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aproc.c,v 1.5 2008/06/02 17:06:36 ratchov Exp $ */
+/* $OpenBSD: aproc.c,v 1.6 2008/08/14 09:39:16 ratchov Exp $ */
/*
* Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
*
@@ -37,10 +37,6 @@
* convers anything to 16bit signed) and one for the output (that
* converts 16bit signed to anything)
*
- * (hard) handle underruns in rpipe and mix
- *
- * (hard) handle overruns in wpipe and sub
- *
* (hard) add a lowpass filter for the resampler. Quality is
* not acceptable as is.
*/
@@ -104,10 +100,13 @@ rpipe_in(struct aproc *p, struct abuf *ibuf_dummy)
unsigned char *data;
unsigned count;
+ DPRINTFN(3, "rpipe_in: %s\n", p->name);
+
if (ABUF_FULL(obuf))
return 0;
data = abuf_wgetblk(obuf, &count, 0);
- obuf->used += file_read(f, data, count);
+ count = file_read(f, data, count);
+ abuf_wcommit(obuf, count);
abuf_flush(obuf);
return !ABUF_FULL(obuf);
}
@@ -119,10 +118,13 @@ rpipe_out(struct aproc *p, struct abuf *obuf)
unsigned char *data;
unsigned count;
+ DPRINTFN(3, "rpipe_out: %s\n", p->name);
+
if (!(f->state & FILE_ROK))
return 0;
data = abuf_wgetblk(obuf, &count, 0);
- obuf->used += file_read(f, data, count);
+ count = file_read(f, data, count);
+ abuf_wcommit(obuf, count);
return f->state & FILE_ROK;
}
@@ -184,15 +186,14 @@ wpipe_in(struct aproc *p, struct abuf *ibuf)
unsigned char *data;
unsigned count;
+ DPRINTFN(3, "wpipe_in: %s\n", p->name);
+
if (!(f->state & FILE_WOK))
return 0;
data = abuf_rgetblk(ibuf, &count, 0);
count = file_write(f, data, count);
- ibuf->used -= count;
- ibuf->start += count;
- if (ibuf->start >= ibuf->len)
- ibuf->start -= ibuf->len;
+ abuf_rdiscard(ibuf, count);
return f->state & FILE_WOK;
}
@@ -204,14 +205,13 @@ wpipe_out(struct aproc *p, struct abuf *obuf_dummy)
unsigned char *data;
unsigned count;
+ DPRINTFN(3, "wpipe_out: %s\n", p->name);
+
if (ABUF_EMPTY(ibuf))
return 0;
data = abuf_rgetblk(ibuf, &count, 0);
count = file_write(f, data, count);
- ibuf->used -= count;
- ibuf->start += count;
- if (ibuf->start >= ibuf->len)
- ibuf->start -= ibuf->len;
+ abuf_rdiscard(ibuf, count);
if (ABUF_EOF(ibuf)) {
abuf_hup(ibuf);
wpipe_del(p);
@@ -262,7 +262,7 @@ mix_bzero(struct aproc *p)
short *odata;
unsigned ocount;
- DPRINTFN(4, "mix_bzero: used = %u, zero = %u\n",
+ DPRINTFN(4, "mix_bzero: used = %u, todo = %u\n",
obuf->used, obuf->mixtodo);
odata = (short *)abuf_wgetblk(obuf, &ocount, obuf->mixtodo);
if (ocount == 0)
@@ -282,7 +282,7 @@ mix_badd(struct abuf *ibuf, struct abuf *obuf)
unsigned i, scount, icount, ocount;
int vol = ibuf->mixvol;
- DPRINTFN(4, "mix_badd: zero = %u, done = %u\n",
+ DPRINTFN(4, "mix_badd: todo = %u, done = %u\n",
obuf->mixtodo, ibuf->mixdone);
idata = (short *)abuf_rgetblk(ibuf, &icount, 0);
@@ -298,15 +298,11 @@ mix_badd(struct abuf *ibuf, struct abuf *obuf)
*odata += (*idata * vol) >> ADATA_SHIFT;
idata++;
odata++;
- }
-
- ibuf->used -= scount;
+ }
+ abuf_rdiscard(ibuf, scount);
ibuf->mixdone += scount;
- ibuf->start += scount;
- if (ibuf->start >= ibuf->len)
- ibuf->start -= ibuf->len;
- DPRINTFN(4, "mix_badd: added %u, done = %u, zero = %u\n",
+ DPRINTFN(4, "mix_badd: added %u, done = %u, todo = %u\n",
scount, ibuf->mixdone, obuf->mixtodo);
}
@@ -355,7 +351,7 @@ mix_in(struct aproc *p, struct abuf *ibuf)
if (ocount == 0)
return 0;
- obuf->used += ocount;
+ abuf_wcommit(obuf, ocount);
obuf->mixtodo -= ocount;
abuf_flush(obuf);
mix_bzero(p);
@@ -381,7 +377,7 @@ mix_out(struct aproc *p, struct abuf *obuf)
struct abuf *i, *inext;
unsigned ocount, drop;
- DPRINTFN(4, "mix_out: used = %u, zero = %u\n",
+ DPRINTFN(4, "mix_out: used = %u, todo = %u\n",
obuf->used, obuf->mixtodo);
mix_bzero(p);
@@ -421,7 +417,7 @@ mix_out(struct aproc *p, struct abuf *obuf)
aproc_del(p);
return 0;
}
- obuf->used += ocount;
+ abuf_wcommit(obuf, ocount);
obuf->mixtodo -= ocount;
LIST_FOREACH(i, &p->ibuflist, ient) {
i->mixdone -= ocount;
@@ -505,8 +501,8 @@ sub_bcopy(struct abuf *ibuf, struct abuf *obuf)
return;
scount = (icount < ocount) ? icount : ocount;
memcpy(odata, idata, scount);
+ abuf_wcommit(obuf, scount);
obuf->subdone += scount;
- obuf->used += scount;
DPRINTFN(4, "sub_bcopy: %u bytes\n", scount);
}
@@ -560,10 +556,7 @@ sub_in(struct aproc *p, struct abuf *ibuf)
LIST_FOREACH(i, &p->obuflist, oent) {
i->subdone -= done;
}
- ibuf->used -= done;
- ibuf->start += done;
- if (ibuf->start >= ibuf->len)
- ibuf->start -= ibuf->len;
+ abuf_rdiscard(ibuf, done);
return again;
}
@@ -610,10 +603,7 @@ sub_out(struct aproc *p, struct abuf *obuf)
LIST_FOREACH(i, &p->obuflist, oent) {
i->subdone -= done;
}
- ibuf->used -= done;
- ibuf->start += done;
- if (ibuf->start >= ibuf->len)
- ibuf->start -= ibuf->len;
+ abuf_rdiscard(ibuf, done);
if (ABUF_EOF(ibuf)) {
abuf_hup(ibuf);
for (i = LIST_FIRST(&p->obuflist);
@@ -799,13 +789,9 @@ conv_bcopy(struct aconv *ist, struct aconv *ost,
* Update FIFO pointers.
*/
icount -= ifr * ist->bpf;
- ibuf->used -= icount;
- ibuf->start += icount;
- if (ibuf->start >= ibuf->len)
- ibuf->start -= ibuf->len;
-
ocount -= ofr * ost->bpf;
- obuf->used += ocount;
+ abuf_rdiscard(ibuf, icount);
+ abuf_wcommit(obuf, ocount);
}
void
diff --git a/usr.bin/aucat/conf.h b/usr.bin/aucat/conf.h
index 0246e6f81a7..0938315a2b5 100644
--- a/usr.bin/aucat/conf.h
+++ b/usr.bin/aucat/conf.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: conf.h,v 1.2 2008/05/28 07:36:23 ratchov Exp $ */
+/* $OpenBSD: conf.h,v 1.3 2008/08/14 09:39:16 ratchov Exp $ */
/*
* Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
*
@@ -14,8 +14,8 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#ifndef ACONF_H
-#define ACONF_H
+#ifndef CONF_H
+#define CONF_H
/*
* debug trace levels: