diff options
author | Simon Farnsworth <simon.farnsworth@onelan.co.uk> | 2011-05-03 08:57:40 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-05-20 09:30:22 -0300 |
commit | 1bf5842fe3b61d2dbbced96dbd27ad26fe93444a (patch) | |
tree | 26c19327c2668ca8690e3a47b0846f9825beb991 /drivers/media/video/cx18/cx18-mailbox.c | |
parent | 81dfea886c73ea36439672b90626a354354dadd2 (diff) |
[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.c | 17 |
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 d4d88738d89..5ecae931ac3 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); |