When user space queues a buffer using VIDIOC_QBUF, the kernel
should set flags in struct v4l2_buffer as specified in the V4L2
documentation.
---
 drivers/media/video/videobuf-core.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/videobuf-core.c 
b/drivers/media/video/videobuf-core.c
index b7b0584..1322056 100644
--- a/drivers/media/video/videobuf-core.c
+++ b/drivers/media/video/videobuf-core.c
@@ -477,6 +477,7 @@ int videobuf_qbuf(struct videobuf_queue *q,
        struct videobuf_buffer *buf;
        enum v4l2_field field;
        unsigned long flags = 0;
+       __u32 buffer_flags = b->flags;
        int retval;
 
        MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS);
@@ -531,6 +532,8 @@ int videobuf_qbuf(struct videobuf_queue *q,
                                   "but buffer addr is zero!\n");
                        goto done;
                }
+               buffer_flags |= V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED;
+               buffer_flags &= ~V4L2_BUF_FLAG_DONE;
                break;
        case V4L2_MEMORY_USERPTR:
                if (b->length < buf->bsize) {
@@ -541,6 +544,8 @@ int videobuf_qbuf(struct videobuf_queue *q,
                    buf->baddr != b->m.userptr)
                        q->ops->buf_release(q, buf);
                buf->baddr = b->m.userptr;
+               buffer_flags |= V4L2_BUF_FLAG_QUEUED;
+               buffer_flags &= ~(V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_DONE);
                break;
        case V4L2_MEMORY_OVERLAY:
                buf->boff = b->m.offset;
@@ -564,6 +569,8 @@ int videobuf_qbuf(struct videobuf_queue *q,
                q->ops->buf_queue(q, buf);
                spin_unlock_irqrestore(q->irqlock, flags);
        }
+
+       b->flags = buffer_flags;
        dprintk(1, "qbuf: succeded\n");
        retval = 0;
        wake_up_interruptible_sync(&q->wait);
-- 
1.5.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to