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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html