diff options
Diffstat (limited to 'modules/v4l2/v4l2.c')
-rw-r--r-- | modules/v4l2/v4l2.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/modules/v4l2/v4l2.c b/modules/v4l2/v4l2.c index 20ad762..228ec10 100644 --- a/modules/v4l2/v4l2.c +++ b/modules/v4l2/v4l2.c @@ -353,19 +353,22 @@ static int start_capturing(struct vidsrc_st *st) } -static void call_frame_handler(struct vidsrc_st *st, uint8_t *buf) +static void call_frame_handler(struct vidsrc_st *st, uint8_t *buf, + uint64_t timestamp) { struct vidframe frame; vidframe_init_buf(&frame, match_fmt(st->pixfmt), &st->sz, buf); - st->frameh(&frame, st->arg); + st->frameh(&frame, timestamp, st->arg); } static int read_frame(struct vidsrc_st *st) { struct v4l2_buffer buf; + struct timeval ts; + uint64_t timestamp; memset(&buf, 0, sizeof(buf)); @@ -393,7 +396,11 @@ static int read_frame(struct vidsrc_st *st) warning("v4l2: index >= n_buffers\n"); } - call_frame_handler(st, st->buffers[buf.index].start); + ts = buf.timestamp; + timestamp = 1000000U * ts.tv_sec + ts.tv_usec; + timestamp = timestamp * VIDEO_TIMEBASE / 1000000U; + + call_frame_handler(st, st->buffers[buf.index].start, timestamp); if (-1 == xioctl (st->fd, VIDIOC_QBUF, &buf)) { warning("v4l2: VIDIOC_QBUF\n"); |