summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Glocker <mglocker@cvs.openbsd.org>2008-06-08 20:11:31 +0000
committerMarcus Glocker <mglocker@cvs.openbsd.org>2008-06-08 20:11:31 +0000
commit5fa04617da2eefbf68755abcee411f88f654dfc0 (patch)
tree819e68dc15f192890728226b3b173111cd4059d0
parent4cae2a9aaccefd813f3d221cdc60abc88d3b6df9 (diff)
If we have reached the end of the mmap frame buffer, start over again
(ring buffer). Add some more DPRINTFs to follow the queueing. OK robert@
-rw-r--r--sys/dev/usb/uvideo.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/sys/dev/usb/uvideo.c b/sys/dev/usb/uvideo.c
index 128c8f471f8..c6526b90611 100644
--- a/sys/dev/usb/uvideo.c
+++ b/sys/dev/usb/uvideo.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvideo.c,v 1.26 2008/06/08 00:18:33 robert Exp $ */
+/* $OpenBSD: uvideo.c,v 1.27 2008/06/08 20:11:30 mglocker Exp $ */
/*
* Copyright (c) 2008 Robert Nagy <robert@openbsd.org>
@@ -1243,15 +1243,21 @@ uvideo_mmap_queue(struct uvideo_softc *sc, uint8_t *buf, int len)
if (sc->sc_mmap_cur == sc->sc_mmap_count)
panic("uvideo_mmap_queue: mmap queue is full!");
- /* copy frame to mmap buffer */
+ /* copy frame to mmap buffer and report length */
bcopy(buf, sc->sc_mmap[sc->sc_mmap_cur].buf, len);
+ sc->sc_mmap[sc->sc_mmap_cur].v4l2_buf.bytesused = len;
/* queue it */
SIMPLEQ_INSERT_TAIL(&sc->sc_mmap_q, &sc->sc_mmap[sc->sc_mmap_cur],
q_frames);
+ DPRINTF(1, "%s: %s: frame queued on index %d\n",
+ DEVNAME(sc), __func__, sc->sc_mmap_cur);
/* point to next mmap buffer */
sc->sc_mmap_cur++;
+ if (sc->sc_mmap_cur == sc->sc_mmap_count)
+ /* we reached the end of the mmap buffer, start over */
+ sc->sc_mmap_cur = 0;
wakeup(sc);
@@ -1863,6 +1869,9 @@ uvideo_qbuf(void *v, struct v4l2_buffer *qb)
sc->sc_mmap[qb->index].v4l2_buf.flags |= V4L2_BUF_FLAG_MAPPED;
sc->sc_mmap[qb->index].v4l2_buf.flags |= V4L2_BUF_FLAG_QUEUED;
+ DPRINTF(1, "%s: %s: buffer on index %d ready for queueing\n",
+ DEVNAME(sc), __func__, qb->index);
+
return (0);
}
@@ -1888,8 +1897,9 @@ uvideo_dqbuf(void *v, struct v4l2_buffer *dqb)
mmap->v4l2_buf.flags |= V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE;
+ DPRINTF(1, "%s: %s: frame dequeued from index %d\n",
+ DEVNAME(sc), __func__, mmap->v4l2_buf.index);
SIMPLEQ_REMOVE_HEAD(&sc->sc_mmap_q, q_frames);
- sc->sc_mmap_cur--;
return (0);
}