summaryrefslogtreecommitdiff
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
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>
-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;