aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18/cx18-mailbox.c
diff options
context:
space:
mode:
authorSimon Farnsworth <simon.farnsworth@onelan.co.uk>2011-05-03 08:57:40 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-05-20 09:30:22 -0300
commit1bf5842fe3b61d2dbbced96dbd27ad26fe93444a (patch)
tree26c19327c2668ca8690e3a47b0846f9825beb991 /drivers/media/video/cx18/cx18-mailbox.c
parent81dfea886c73ea36439672b90626a354354dadd2 (diff)
downloadkernel_samsung_smdk4412-1bf5842fe3b61d2dbbced96dbd27ad26fe93444a.zip
kernel_samsung_smdk4412-1bf5842fe3b61d2dbbced96dbd27ad26fe93444a.tar.gz
kernel_samsung_smdk4412-1bf5842fe3b61d2dbbced96dbd27ad26fe93444a.tar.bz2
[media] cx18: Clean up mmap() support for raw YUV
The initial version of this patch (commit d5976931639176bb6777755d96b9f8d959f79e9e) had some issues: * It didn't correctly calculate the size of the YUV buffer for 4:2:2, resulting in capture sometimes being offset by 1/3rd of a picture. * There were a lot of variables duplicating information the driver already knew, which have been removed. * There was an in-kernel format conversion - libv4l can do this one, and is the right place to do format conversions anyway. * Some magic numbers weren't properly explained. Fix all these issues, leaving just the move from videobuf to videobuf2 to do. Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk> Acked-by: Andy Walls <awalls@md.metrocast.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx18/cx18-mailbox.c')
-rw-r--r--drivers/media/video/cx18/cx18-mailbox.c17
1 files changed, 3 insertions, 14 deletions
diff --git a/drivers/media/video/cx18/cx18-mailbox.c b/drivers/media/video/cx18/cx18-mailbox.c
index d4d8873..5ecae93 100644
--- a/drivers/media/video/cx18/cx18-mailbox.c
+++ b/drivers/media/video/cx18/cx18-mailbox.c
@@ -177,7 +177,7 @@ static void cx18_mdl_send_to_videobuf(struct cx18_stream *s,
if (list_empty(&s->vb_capture))
goto out;
- vb_buf = list_entry(s->vb_capture.next, struct cx18_videobuf_buffer,
+ vb_buf = list_first_entry(&s->vb_capture, struct cx18_videobuf_buffer,
vb.queue);
p = videobuf_to_vmalloc(&vb_buf->vb);
@@ -202,25 +202,14 @@ static void cx18_mdl_send_to_videobuf(struct cx18_stream *s,
vb_buf->bytes_used = 0;
}
- /* */
if (dispatch) {
-
- if (s->pixelformat == V4L2_PIX_FMT_YUYV) {
- /* UYVY to YUYV */
- for (i = 0; i < (720 * 480 * 2); i += 2) {
- u = *(p + i);
- *(p + i) = *(p + i + 1);
- *(p + i + 1) = u;
- }
- }
-
- do_gettimeofday(&vb_buf->vb.ts);
+ ktime_get_ts(&vb_buf->vb.ts);
list_del(&vb_buf->vb.queue);
vb_buf->vb.state = VIDEOBUF_DONE;
wake_up(&vb_buf->vb.done);
}
- mod_timer(&s->vb_timeout, jiffies + (HZ / 10));
+ mod_timer(&s->vb_timeout, msecs_to_jiffies(2000) + jiffies);
out:
spin_unlock(&s->vb_lock);