[media] vb2: set timestamp when using write()
When using write() to write data to an output video node the vb2 core should set timestamps if V4L2_BUF_FLAG_TIMESTAMP_COPY is set. Nobody else is able to provide this information with the write() operation. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Pawel Osciak <pawel@osciak.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
Родитель
dcc2428a5e
Коммит
ebd7c50510
|
@ -22,6 +22,7 @@
|
|||
#include <media/v4l2-dev.h>
|
||||
#include <media/v4l2-fh.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/videobuf2-core.h>
|
||||
|
||||
static int debug;
|
||||
|
@ -2800,6 +2801,14 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_
|
|||
{
|
||||
struct vb2_fileio_data *fileio;
|
||||
struct vb2_fileio_buf *buf;
|
||||
/*
|
||||
* When using write() to write data to an output video node the vb2 core
|
||||
* should set timestamps if V4L2_BUF_FLAG_TIMESTAMP_COPY is set. Nobody
|
||||
* else is able to provide this information with the write() operation.
|
||||
*/
|
||||
bool set_timestamp = !read &&
|
||||
(q->timestamp_flags & V4L2_BUF_FLAG_TIMESTAMP_MASK) ==
|
||||
V4L2_BUF_FLAG_TIMESTAMP_COPY;
|
||||
int ret, index;
|
||||
|
||||
dprintk(3, "mode %s, offset %ld, count %zd, %sblocking\n",
|
||||
|
@ -2901,6 +2910,8 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_
|
|||
fileio->b.memory = q->memory;
|
||||
fileio->b.index = index;
|
||||
fileio->b.bytesused = buf->pos;
|
||||
if (set_timestamp)
|
||||
v4l2_get_timestamp(&fileio->b.timestamp);
|
||||
ret = vb2_internal_qbuf(q, &fileio->b);
|
||||
dprintk(5, "vb2_dbuf result: %d\n", ret);
|
||||
if (ret)
|
||||
|
|
Загрузка…
Ссылка в новой задаче