Re: [PATCH] v4l: use struct v4l2_buffer explicitly instead of void *

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

 



Hi Mauro,

On Sun, 27 Aug 2017, Mauro Carvalho Chehab wrote:

> Em Fri, 28 Jul 2017 14:45:37 +0200 (CEST)
> Guennadi Liakhovetski <g.liakhovetski@xxxxxx> escreveu:
> 
> > A number of functions use void * for a struct v4l2_buffer parameter.
> > Avoid that to improve compile-time checking.
> 
> Nack.
> 
> The videbuf2-core should be be independent of videobuf2-v4l2. The
> plan is to use it for DVB too. There's a patch floating around,
> lacking people to take a look.
> 
> I intend to review and merge it when I have some time along
> the year.

Ok, I thought there would be a reason similar to this, thanks for 
explaining.

Regards
Guennadi

> > Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@xxxxxxxxx>
> > ---
> > 
> > This probably was done on purpose, maybe to reuse the video buffers by 
> > other than V4L2 users, but I haven't found any, and the code doesn't seem 
> > very new...
> > 
> >  drivers/media/v4l2-core/videobuf2-core.c | 17 +++++++++--------
> >  drivers/media/v4l2-core/videobuf2-v4l2.c | 15 +++++++--------
> >  include/media/videobuf2-core.h           | 19 ++++++++++++-------
> >  3 files changed, 28 insertions(+), 23 deletions(-)
> > 
> > diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
> > index 14f83cec..170a416 100644
> > --- a/drivers/media/v4l2-core/videobuf2-core.c
> > +++ b/drivers/media/v4l2-core/videobuf2-core.c
> > @@ -958,7 +958,7 @@ void vb2_discard_done(struct vb2_queue *q)
> >  /**
> >   * __prepare_mmap() - prepare an MMAP buffer
> >   */
> > -static int __prepare_mmap(struct vb2_buffer *vb, const void *pb)
> > +static int __prepare_mmap(struct vb2_buffer *vb, const struct v4l2_buffer *pb)
> >  {
> >  	int ret = 0;
> >  
> > @@ -971,7 +971,7 @@ static int __prepare_mmap(struct vb2_buffer *vb, const void *pb)
> >  /**
> >   * __prepare_userptr() - prepare a USERPTR buffer
> >   */
> > -static int __prepare_userptr(struct vb2_buffer *vb, const void *pb)
> > +static int __prepare_userptr(struct vb2_buffer *vb, const struct v4l2_buffer *pb)
> >  {
> >  	struct vb2_plane planes[VB2_MAX_PLANES];
> >  	struct vb2_queue *q = vb->vb2_queue;
> > @@ -1089,7 +1089,7 @@ static int __prepare_userptr(struct vb2_buffer *vb, const void *pb)
> >  /**
> >   * __prepare_dmabuf() - prepare a DMABUF buffer
> >   */
> > -static int __prepare_dmabuf(struct vb2_buffer *vb, const void *pb)
> > +static int __prepare_dmabuf(struct vb2_buffer *vb, const struct v4l2_buffer *pb)
> >  {
> >  	struct vb2_plane planes[VB2_MAX_PLANES];
> >  	struct vb2_queue *q = vb->vb2_queue;
> > @@ -1236,7 +1236,7 @@ static void __enqueue_in_driver(struct vb2_buffer *vb)
> >  	call_void_vb_qop(vb, buf_queue, vb);
> >  }
> >  
> > -static int __buf_prepare(struct vb2_buffer *vb, const void *pb)
> > +static int __buf_prepare(struct vb2_buffer *vb, const struct v4l2_buffer *pb)
> >  {
> >  	struct vb2_queue *q = vb->vb2_queue;
> >  	unsigned int plane;
> > @@ -1279,7 +1279,8 @@ static int __buf_prepare(struct vb2_buffer *vb, const void *pb)
> >  	return 0;
> >  }
> >  
> > -int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb)
> > +int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index,
> > +			 struct v4l2_buffer *pb)
> >  {
> >  	struct vb2_buffer *vb;
> >  	int ret;
> > @@ -1514,7 +1515,7 @@ static int __vb2_wait_for_done_vb(struct vb2_queue *q, int nonblocking)
> >   * Will sleep if required for nonblocking == false.
> >   */
> >  static int __vb2_get_done_vb(struct vb2_queue *q, struct vb2_buffer **vb,
> > -			     void *pb, int nonblocking)
> > +			     struct v4l2_buffer *pb, int nonblocking)
> >  {
> >  	unsigned long flags;
> >  	int ret = 0;
> > @@ -1583,8 +1584,8 @@ static void __vb2_dqbuf(struct vb2_buffer *vb)
> >  		}
> >  }
> >  
> > -int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb,
> > -		   bool nonblocking)
> > +int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex,
> > +		   struct v4l2_buffer *pb, bool nonblocking)
> >  {
> >  	struct vb2_buffer *vb = NULL;
> >  	int ret;
> > diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c b/drivers/media/v4l2-core/videobuf2-v4l2.c
> > index 0c06699..3c425ea 100644
> > --- a/drivers/media/v4l2-core/videobuf2-v4l2.c
> > +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
> > @@ -53,7 +53,8 @@
> >   * __verify_planes_array() - verify that the planes array passed in struct
> >   * v4l2_buffer from userspace can be safely used
> >   */
> > -static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer *b)
> > +static int __verify_planes_array(struct vb2_buffer *vb,
> > +				 const struct v4l2_buffer *b)
> >  {
> >  	if (!V4L2_TYPE_IS_MULTIPLANAR(b->type))
> >  		return 0;
> > @@ -73,7 +74,8 @@ static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer
> >  	return 0;
> >  }
> >  
> > -static int __verify_planes_array_core(struct vb2_buffer *vb, const void *pb)
> > +static int __verify_planes_array_core(struct vb2_buffer *vb,
> > +				      const struct v4l2_buffer *pb)
> >  {
> >  	return __verify_planes_array(vb, pb);
> >  }
> > @@ -118,9 +120,8 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b)
> >  	return 0;
> >  }
> >  
> > -static void __copy_timestamp(struct vb2_buffer *vb, const void *pb)
> > +static void __copy_timestamp(struct vb2_buffer *vb, const struct v4l2_buffer *b)
> >  {
> > -	const struct v4l2_buffer *b = pb;
> >  	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
> >  	struct vb2_queue *q = vb->vb2_queue;
> >  
> > @@ -185,9 +186,8 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b,
> >   * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be
> >   * returned to userspace
> >   */
> > -static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
> > +static void __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b)
> >  {
> > -	struct v4l2_buffer *b = pb;
> >  	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
> >  	struct vb2_queue *q = vb->vb2_queue;
> >  	unsigned int plane;
> > @@ -292,10 +292,9 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb)
> >   * v4l2_buffer has a valid number of planes.
> >   */
> >  static int __fill_vb2_buffer(struct vb2_buffer *vb,
> > -		const void *pb, struct vb2_plane *planes)
> > +		const struct v4l2_buffer *b, struct vb2_plane *planes)
> >  {
> >  	struct vb2_queue *q = vb->vb2_queue;
> > -	const struct v4l2_buffer *b = pb;
> >  	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
> >  	unsigned int plane;
> >  	int ret;
> > diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
> > index cb97c22..86e9605 100644
> > --- a/include/media/videobuf2-core.h
> > +++ b/include/media/videobuf2-core.h
> > @@ -395,6 +395,8 @@ struct vb2_ops {
> >  	void (*buf_queue)(struct vb2_buffer *vb);
> >  };
> >  
> > +struct v4l2_buffer;
> > +
> >  /**
> >   * struct vb2_buf_ops - driver-specific callbacks
> >   *
> > @@ -410,11 +412,13 @@ struct vb2_ops {
> >   *			the vb2_buffer struct.
> >   */
> >  struct vb2_buf_ops {
> > -	int (*verify_planes_array)(struct vb2_buffer *vb, const void *pb);
> > -	void (*fill_user_buffer)(struct vb2_buffer *vb, void *pb);
> > -	int (*fill_vb2_buffer)(struct vb2_buffer *vb, const void *pb,
> > +	int (*verify_planes_array)(struct vb2_buffer *vb,
> > +				const struct v4l2_buffer *pb);
> > +	void (*fill_user_buffer)(struct vb2_buffer *vb, struct v4l2_buffer *b);
> > +	int (*fill_vb2_buffer)(struct vb2_buffer *vb, const struct v4l2_buffer *pb,
> >  				struct vb2_plane *planes);
> > -	void (*copy_timestamp)(struct vb2_buffer *vb, const void *pb);
> > +	void (*copy_timestamp)(struct vb2_buffer *vb,
> > +				const struct v4l2_buffer *b);
> >  };
> >  
> >  /**
> > @@ -704,7 +708,8 @@ int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
> >   * The return values from this function are intended to be directly returned
> >   * from vidioc_prepare_buf handler in driver.
> >   */
> > -int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb);
> > +int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index,
> > +			 struct v4l2_buffer *pb);
> >  
> >  /**
> >   * vb2_core_qbuf() - Queue a buffer from userspace
> > @@ -753,8 +758,8 @@ int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
> >   * The return values from this function are intended to be directly returned
> >   * from vidioc_dqbuf handler in driver.
> >   */
> > -int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex, void *pb,
> > -		   bool nonblocking);
> > +int vb2_core_dqbuf(struct vb2_queue *q, unsigned int *pindex,
> > +		   struct v4l2_buffer *pb, bool nonblocking);
> >  
> >  int vb2_core_streamon(struct vb2_queue *q, unsigned int type);
> >  int vb2_core_streamoff(struct vb2_queue *q, unsigned int type);
> 
> 
> 
> Thanks,
> Mauro
> 



[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