On 2018-12-12 13:38, hverkuil-cisco@xxxxxxxxx wrote: > From: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> > > We want to be able to uniquely identify buffers for stateless > codecs. The internal timestamp (a u64) as stored internally in the > kernel is a suitable candidate for that, but in struct v4l2_buffer > it is represented as a struct timeval. > > Add a v4l2_timeval_to_ns() function that converts the struct timeval > into a u64 in the same way that the kernel does. This makes it possible > to use this u64 elsewhere as a unique identifier of the buffer. > > Since timestamps are also copied from the output buffer to the > corresponding capture buffer(s) by M2M devices, the u64 can be > used to refer to both output and capture buffers. > > The plan is that in the future we redesign struct v4l2_buffer and use > u64 for the timestamp instead of a struct timeval (which has lots of > problems with 32 vs 64 bit and y2038 layout changes), and then there > is no more need to use this function. > > Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> > --- > include/uapi/linux/videodev2.h | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index 2db1635de956..3580c1ea4fba 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -971,6 +971,18 @@ struct v4l2_buffer { > }; > }; > > +/** > + * v4l2_timeval_to_ns - Convert timeval to nanoseconds > + * @ts: pointer to the timeval variable to be converted > + * > + * Returns the scalar nanosecond representation of the timeval > + * parameter. > + */ > +static inline u64 v4l2_timeval_to_ns(const struct timeval *tv) > +{ > + return (__u64)tv->tv_sec * 1000000000ULL + tv->tv_usec * 1000; > +} This is causing a compile issue in userspace application, replacing u64 with __u64 solves the compile issue below. In file included from libavcodec/v4l2_request.h:22, from libavcodec/v4l2_request.c:28: /home/docker/LibreELEC/build.LibreELEC-H3.arm-9.0-devel/toolchain/armv7ve-libreelec-linux-gnueabi/sysroot/usr/include/linux/videodev2.h:975:19: error: unknown type name 'u64' static __inline__ u64 v4l2_timeval_to_ns(const struct timeval *tv) ^~~ Regards, Jonas > + > /* Flags for 'flags' field */ > /* Buffer is mapped (flag) */ > #define V4L2_BUF_FLAG_MAPPED 0x00000001