diff options
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/usb/uvideo.c | 36 | ||||
-rw-r--r-- | sys/dev/usb/uvideo.h | 9 |
2 files changed, 24 insertions, 21 deletions
diff --git a/sys/dev/usb/uvideo.c b/sys/dev/usb/uvideo.c index d82bf4eb2f5..b45a7ef7710 100644 --- a/sys/dev/usb/uvideo.c +++ b/sys/dev/usb/uvideo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvideo.c,v 1.23 2008/06/05 20:50:28 mglocker Exp $ */ +/* $OpenBSD: uvideo.c,v 1.24 2008/06/06 19:14:45 mglocker Exp $ */ /* * Copyright (c) 2008 Robert Nagy <robert@openbsd.org> @@ -1755,8 +1755,8 @@ uvideo_reqbufs(void *v, struct v4l2_requestbuffers *rb) buf_size = UGETDW(sc->sc_desc_probe.dwMaxVideoFrameSize); buf_size_total = buf_count * buf_size; buf_size_total = round_page(buf_size_total); /* page align buffer */ - sc->sc_mmap_buffer.buf = malloc(buf_size_total, M_DEVBUF, M_NOWAIT); - if (sc->sc_mmap_buffer.buf == NULL) { + sc->sc_mmap_buffer = malloc(buf_size_total, M_DEVBUF, M_NOWAIT); + if (sc->sc_mmap_buffer == NULL) { printf("%s: can't allocate mmap buffer!\n", DEVNAME(sc)); return (EINVAL); } @@ -1765,20 +1765,22 @@ uvideo_reqbufs(void *v, struct v4l2_requestbuffers *rb) /* fill the v4l2_buffer structure */ for (i = 0; i < buf_count; i++) { - sc->sc_mmap_buffer.v4l2_buf[i].index = i; - sc->sc_mmap_buffer.v4l2_buf[i].m.offset = i * buf_size; - sc->sc_mmap_buffer.v4l2_buf[i].length = buf_size; - sc->sc_mmap_buffer.v4l2_buf[i].type = - V4L2_BUF_TYPE_VIDEO_CAPTURE; - sc->sc_mmap_buffer.v4l2_buf[i].sequence = 0; - sc->sc_mmap_buffer.v4l2_buf[i].field = V4L2_FIELD_NONE; - sc->sc_mmap_buffer.v4l2_buf[i].memory = V4L2_MEMORY_MMAP; - sc->sc_mmap_buffer.v4l2_buf[i].flags = V4L2_MEMORY_MMAP; + sc->sc_mmap[i].buf = sc->sc_mmap_buffer + (i * buf_size); + + sc->sc_mmap[i].v4l2_buf.index = i; + sc->sc_mmap[i].v4l2_buf.m.offset = i * buf_size; + sc->sc_mmap[i].v4l2_buf.length = buf_size; + sc->sc_mmap[i].v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + sc->sc_mmap[i].v4l2_buf.sequence = 0; + sc->sc_mmap[i].v4l2_buf.field = V4L2_FIELD_NONE; + sc->sc_mmap[i].v4l2_buf.memory = V4L2_MEMORY_MMAP; + sc->sc_mmap[i].v4l2_buf.flags = V4L2_MEMORY_MMAP; + DPRINTF(1, "%s: %s: index=%d, offset=%d, length=%d\n", DEVNAME(sc), __func__, - sc->sc_mmap_buffer.v4l2_buf[i].index, - sc->sc_mmap_buffer.v4l2_buf[i].m.offset, - sc->sc_mmap_buffer.v4l2_buf[i].length); + sc->sc_mmap[i].v4l2_buf.index, + sc->sc_mmap[i].v4l2_buf.m.offset, + sc->sc_mmap[i].v4l2_buf.length); } /* tell how many buffers we have really allocated */ @@ -1796,7 +1798,7 @@ uvideo_querybuf(void *v, struct v4l2_buffer *qb) qb->memory != V4L2_MEMORY_MMAP) return (EINVAL); - bcopy(&sc->sc_mmap_buffer.v4l2_buf[qb->index], qb, + bcopy(&sc->sc_mmap[qb->index].v4l2_buf, qb, sizeof(struct v4l2_buffer)); DPRINTF(1, "%s: %s: index=%d, offset=%d, length=%d\n", @@ -1823,7 +1825,7 @@ uvideo_mappage(void *v, off_t off, int prot) struct uvideo_softc *sc = v; caddr_t p; - p = sc->sc_mmap_buffer.buf + off; + p = sc->sc_mmap_buffer + off; return (p); } diff --git a/sys/dev/usb/uvideo.h b/sys/dev/usb/uvideo.h index 593ea01138c..33b1865bc13 100644 --- a/sys/dev/usb/uvideo.h +++ b/sys/dev/usb/uvideo.h @@ -1,4 +1,4 @@ -/* $OpenBSD: uvideo.h,v 1.10 2008/06/05 20:50:28 mglocker Exp $ */ +/* $OpenBSD: uvideo.h,v 1.11 2008/06/06 19:14:45 mglocker Exp $ */ /* * Copyright (c) 2007 Robert Nagy <robert@openbsd.org> @@ -352,7 +352,7 @@ struct uvideo_sample_buffer { }; #define UVIDEO_MAX_BUFFERS 256 -struct uvideo_mmap_buffer { +struct uvideo_mmap { /* * TODO * Complete buffer so we can queue/dequeue video frames. @@ -360,7 +360,7 @@ struct uvideo_mmap_buffer { */ uint8_t *buf; - struct v4l2_buffer v4l2_buf[UVIDEO_MAX_BUFFERS]; + struct v4l2_buffer v4l2_buf; }; struct uvideo_softc { @@ -392,7 +392,8 @@ struct uvideo_softc { u_int32_t quirks; struct uvideo_sample_buffer sc_sample_buffer; - struct uvideo_mmap_buffer sc_mmap_buffer; + struct uvideo_mmap sc_mmap[UVIDEO_MAX_BUFFERS]; + uint8_t *sc_mmap_buffer; struct vnode *sc_vp; struct usb_task sc_task_write; |