summaryrefslogtreecommitdiff
path: root/yavta.c
diff options
context:
space:
mode:
authorSakari Ailus <sakari.ailus@iki.fi>2014-04-12 16:24:03 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2014-04-16 20:19:46 +0200
commitcacd2cc6ba66d72086c15146104538e02bc64cc0 (patch)
tree018bf279d95478014651afb6bb5861a717d69dd3 /yavta.c
parent7b76ba36f2a5e82d2a4b7c9ea4f92290f3e432ba (diff)
Set timestamp for output buffers if the timestamp type is copy
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.ailus@iki.fi>
Diffstat (limited to 'yavta.c')
-rw-r--r--yavta.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/yavta.c b/yavta.c
index 87e2f31..795fa5b 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];
@@ -814,6 +815,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;
@@ -876,8 +878,16 @@ static int video_queue_buffer(struct device *dev, int index, enum buffer_fill_mo
buf.type = dev->type;
buf.memory = dev->memtype;
- if (video_is_output(dev))
+ if (video_is_output(dev)) {
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;