Re: [PATCH 2/9 v6] V4L: add two new ioctl()s for multi-size videobuffer management

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

 



On Thu, 1 Sep 2011, Sakari Ailus wrote:

> Guennadi Liakhovetski wrote:
> > On Thu, 1 Sep 2011, Sakari Ailus wrote:
> > 
> >> On Thu, Sep 01, 2011 at 09:03:52AM +0200, Guennadi Liakhovetski wrote:
> >>> Hi Sakari
> >>
> >> Hi Guennadi,
> >>
> >>> On Thu, 1 Sep 2011, Sakari Ailus wrote:
> >> [clip]
> >>>>> diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
> >>>>> index fca24cc..988e1be 100644
> >>>>> --- a/include/linux/videodev2.h
> >>>>> +++ b/include/linux/videodev2.h
> >>>>> @@ -653,6 +653,9 @@ struct v4l2_buffer {
> >>>>>  #define V4L2_BUF_FLAG_ERROR	0x0040
> >>>>>  #define V4L2_BUF_FLAG_TIMECODE	0x0100	/* timecode field is valid */
> >>>>>  #define V4L2_BUF_FLAG_INPUT     0x0200  /* input field is valid */
> >>>>> +/* Cache handling flags */
> >>>>> +#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x0400
> >>>>> +#define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x0800
> >>>>>  
> >>>>>  /*
> >>>>>   *	O V E R L A Y   P R E V I E W
> >>>>> @@ -2092,6 +2095,15 @@ struct v4l2_dbg_chip_ident {
> >>>>>  	__u32 revision;    /* chip revision, chip specific */
> >>>>>  } __attribute__ ((packed));
> >>>>>  
> >>>>> +/* VIDIOC_CREATE_BUFS */
> >>>>> +struct v4l2_create_buffers {
> >>>>> +	__u32			index;		/* output: buffers index...index + count - 1 have been created */
> >>>>> +	__u32			count;
> >>>>> +	enum v4l2_memory        memory;
> >>>>> +	struct v4l2_format	format;		/* "type" is used always, the rest if sizeimage == 0 */
> >>>>> +	__u32			reserved[8];
> >>>>> +};
> >>>>
> >>>> How about splitting the above comments? These lines are really long.
> >>>> Kerneldoc could also be used, I think.
> >>>
> >>> Sure, how about this incremental patch:
> >>>
> >>> From: Guennadi Liakhovetski <g.liakhovetski@xxxxxx>
> >>> Subject: V4L: improve struct v4l2_create_buffers documentation
> >>>
> >>> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@xxxxxx>
> >>> ---
> >>> diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
> >>> index 988e1be..64e0bf2 100644
> >>> --- a/include/linux/videodev2.h
> >>> +++ b/include/linux/videodev2.h
> >>> @@ -2095,12 +2095,20 @@ struct v4l2_dbg_chip_ident {
> >>>  	__u32 revision;    /* chip revision, chip specific */
> >>>  } __attribute__ ((packed));
> >>>  
> >>> -/* VIDIOC_CREATE_BUFS */
> >>> +/**
> >>> + * struct v4l2_create_buffers - VIDIOC_CREATE_BUFS argument
> >>> + * @index:	on return, index of the first created buffer
> >>> + * @count:	entry: number of requested buffers,
> >>> + *		return: number of created buffers
> >>> + * @memory:	buffer memory type
> >>> + * @format:	frame format, for which buffers are requested
> >>> + * @reserved:	future extensions
> >>> + */
> >>>  struct v4l2_create_buffers {
> >>> -	__u32			index;		/* output: buffers index...index + count - 1 have been created */
> >>> +	__u32			index;
> >>>  	__u32			count;
> >>>  	enum v4l2_memory        memory;
> >>> -	struct v4l2_format	format;		/* "type" is used always, the rest if sizeimage == 0 */
> >>> +	struct v4l2_format	format;
> >>>  	__u32			reserved[8];
> >>>  };
> >>
> >> Thanks! This looks good to me. Could you do a similar change to the
> >> compat-IOCTL version of this struct (v4l2_create_buffers32)?
> > 
> > Of course, I'll submit an incremental patch as soon as this is accepted 
> > for upstream, unless there are other important changes to this patch and a 
> > new revision is anyway unavoidable.
> 
> Ok. I'll send a small patch to the documentation as well then.

Good, thanks!

> >>>>> +
> >>>>>  /*
> >>>>>   *	I O C T L   C O D E S   F O R   V I D E O   D E V I C E S
> >>>>>   *
> >>>>> @@ -2182,6 +2194,9 @@ struct v4l2_dbg_chip_ident {
> >>>>>  #define	VIDIOC_SUBSCRIBE_EVENT	 _IOW('V', 90, struct v4l2_event_subscription)
> >>>>>  #define	VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
> >>>>>  
> >>>>> +#define VIDIOC_CREATE_BUFS	_IOWR('V', 92, struct v4l2_create_buffers)
> >>>>> +#define VIDIOC_PREPARE_BUF	 _IOW('V', 93, struct v4l2_buffer)
> >>>>
> >>>> Does prepare_buf ever do anything that would need to return anything to the
> >>>> user? I guess the answer is "no"?
> >>>
> >>> Exactly, that's why it's an "_IOW" ioctl(), not an "_IOWR", or have I 
> >>> misunderstood you?
> >>
> >> I was thinking if this will be the case now and in the foreseeable future as
> >> this can't be changed after once defined. I just wanted to bring this up
> >> even though I don't see myself that any of the fields would need to be
> >> returned to the user. But there are reserved fields...
> >>
> >> So unless someone comes up with something quick, I think this should stay
> >> as-is.
> > 
> > Agree. I understand, it is important to try to design the user-space API 
> > as clever as possible, so, I'm relying on our combined wisdom for it. But 
> > even that is probably limited, so, mistakes are still possible. Therefore, 
> > unless someone comes up with a realistic reason, why this has to be _IOWR, 
> > we shall keep it _IOW and be prepared to delight our user-space colleagues 
> > with more shiny new ioctl()s in the somewhat near future;-)
> 
> What we could also do is to mark the new IOCTLs experimental, and remove
> the note after one or two more kernel releases. This would allow
> postponing the decision.

Is there a standard way to do this, or is it just a free-form note in the 
documentation / in the header?

> We also don't have anyone using these ioctls from user space as far as I
> understand, so we might get important input later on as well.

Does either of these allow us to actually _change_ ioctl()s after their 
appearance in the mainline?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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