On 2018-12-12 13:38, hverkuil-ci...@xs4all.nl wrote:
> From: Hans Verkuil <hverkuil-ci...@xs4all.nl>
>
> 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-ci...@xs4all.nl>
> ---
>  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

Reply via email to