Re: [RFC PATCHv2 1/5] videodev2.h: add tag support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, 2018-11-12 at 09:33 +0100, Hans Verkuil wrote:
> From: Hans Verkuil <hans.verkuil@xxxxxxxxx>
> 
> Add support for 'tags' to struct v4l2_buffer. These can be used
> by m2m devices so userspace can set a tag for an output buffer and
> this value will then be copied to the capture buffer(s).
> 
> This tag can be used to refer to capture buffers, something that
> is needed by stateless HW codecs.

I am getting the following warning when building with this patch:

videodev2.h:1044:9: warning: cast to pointer from integer of different
size [-Wint-to-pointer-cast]
  return (void *)v4l2_buffer_get_tag(buf);

That is because we are on a 32-bit architecture here, so pointers are
not 64-bit long, thus we can't have an equivalency between tag and
pointer.

It looks like this isn't used in the following patches, so perhaps it
should be dropped?

Cheers,

Paul

> Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx>
> ---
>  include/uapi/linux/videodev2.h | 37 +++++++++++++++++++++++++++++++++-
>  1 file changed, 36 insertions(+), 1 deletion(-)
> 
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index c8e8ff810190..a6f81f368e01 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -912,6 +912,11 @@ struct v4l2_plane {
>  	__u32			reserved[11];
>  };
>  
> +struct v4l2_buffer_tag {
> +	__u32 low;
> +	__u32 high;
> +};
> +
>  /**
>   * struct v4l2_buffer - video buffer info
>   * @index:	id number of the buffer
> @@ -950,7 +955,10 @@ struct v4l2_buffer {
>  	__u32			flags;
>  	__u32			field;
>  	struct timeval		timestamp;
> -	struct v4l2_timecode	timecode;
> +	union {
> +		struct v4l2_timecode	timecode;
> +		struct v4l2_buffer_tag	tag;
> +	};
>  	__u32			sequence;
>  
>  	/* memory location */
> @@ -988,6 +996,8 @@ struct v4l2_buffer {
>  #define V4L2_BUF_FLAG_IN_REQUEST		0x00000080
>  /* timecode field is valid */
>  #define V4L2_BUF_FLAG_TIMECODE			0x00000100
> +/* tag field is valid */
> +#define V4L2_BUF_FLAG_TAG			0x00000200
>  /* Buffer is prepared for queuing */
>  #define V4L2_BUF_FLAG_PREPARED			0x00000400
>  /* Cache handling flags */
> @@ -1007,6 +1017,31 @@ struct v4l2_buffer {
>  /* request_fd is valid */
>  #define V4L2_BUF_FLAG_REQUEST_FD		0x00800000
>  
> +static inline void v4l2_buffer_set_tag(struct v4l2_buffer *buf, __u64 tag)
> +{
> +	buf->tag.high = tag >> 32;
> +	buf->tag.low = tag & 0xffffffffULL;
> +	buf->flags |= V4L2_BUF_FLAG_TAG;
> +}
> +
> +static inline void v4l2_buffer_set_tag_ptr(struct v4l2_buffer *buf,
> +					   const void *tag)
> +{
> +	v4l2_buffer_set_tag(buf, (__u64)tag);
> +}
> +
> +static inline __u64 v4l2_buffer_get_tag(const struct v4l2_buffer *buf)
> +{
> +	if (!(buf->flags & V4L2_BUF_FLAG_TAG))
> +		return 0;
> +	return (((__u64)buf->tag.high) << 32) | (__u64)buf->tag.low;
> +}
> +
> +static inline void *v4l2_buffer_get_tag_ptr(const struct v4l2_buffer *buf)
> +{
> +	return (void *)v4l2_buffer_get_tag(buf);
> +}
> +
>  /**
>   * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor
>   *
-- 
Paul Kocialkowski, Bootlin (formerly Free Electrons)
Embedded Linux and kernel engineering
https://bootlin.com

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux