Copy timestamp type will mean the timestamp is be copied from the source to
the destination buffer on mem-to-mem devices.

Signed-off-by: Sakari Ailus <sakari.ai...@iki.fi>
---
 yavta.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/yavta.c b/yavta.c
index 124dd1d..251fe40 100644
--- a/yavta.c
+++ b/yavta.c
@@ -73,6 +73,7 @@ struct device
        unsigned int width;
        unsigned int height;
        uint32_t buffer_output_flags;
+       uint32_t timestamp_type;
 
        unsigned char num_planes;
        struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES];
@@ -756,6 +757,7 @@ static int video_alloc_buffers(struct device *dev, int 
nbufs,
                        return ret;
        }
 
+       dev->timestamp_type = buf.flags & V4L2_BUF_FLAG_TIMESTAMP_MASK;
        dev->buffers = buffers;
        dev->nbufs = rb.count;
        return 0;
@@ -818,8 +820,16 @@ static int video_queue_buffer(struct device *dev, int 
index, enum buffer_fill_mo
        buf.type = dev->type;
        buf.memory = dev->memtype;
 
-       if (dev->type == V4L2_BUF_TYPE_VIDEO_OUTPUT)
+       if (dev->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
                buf.flags = dev->buffer_output_flags;
+               if (dev->timestamp_type == V4L2_BUF_FLAG_TIMESTAMP_COPY) {
+                       struct timespec ts;
+                       
+                       clock_gettime(CLOCK_MONOTONIC, &ts);
+                       buf.timestamp.tv_sec = ts.tv_sec;
+                       buf.timestamp.tv_usec = ts.tv_nsec / 1000;
+               }
+       }
 
        if (video_is_mplane(dev)) {
                buf.m.planes = planes;
-- 
1.7.10.4

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

Reply via email to