On 2/11/19 11:13 AM, Hans Verkuil wrote: > Indicate if a control can only be set through a request, as opposed > to being set directly. This is necessary for stateless codecs where > it makes no sense to set the state controls directly. Kwiboo on irc pointed out that this clashes with this line the in Initialization section of the stateless decoder API: "Call VIDIOC_S_EXT_CTRLS() to set all the controls (parsed headers, etc.) required by the OUTPUT format to enumerate the CAPTURE formats." So for now ignore patches 4-6: I need to think about this some more. My worry here is what happens when userspace is adding these controls to a request and at the same time sets them directly. That may cause weird side-effects. Regards, Hans > > Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> > --- > .../media/uapi/v4l/vidioc-queryctrl.rst | 4 ++++ > .../media/videodev2.h.rst.exceptions | 1 + > include/uapi/linux/videodev2.h | 23 ++++++++++--------- > 3 files changed, 17 insertions(+), 11 deletions(-) > > diff --git a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst > index f824162d0ea9..b08c69cedb92 100644 > --- a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst > +++ b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst > @@ -539,6 +539,10 @@ See also the examples in :ref:`control`. > ``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or > streaming is in progress since most drivers do not support changing > the format in that case. > + * - ``V4L2_CTRL_FLAG_REQUIRES_REQUESTS`` > + - 0x0800 > + - This control cannot be set directly, but only through a request > + (i.e. by setting ``which`` to ``V4L2_CTRL_WHICH_REQUEST_VAL``). > > > Return Value > diff --git a/Documentation/media/videodev2.h.rst.exceptions b/Documentation/media/videodev2.h.rst.exceptions > index 64d348e67df9..0caa72014dba 100644 > --- a/Documentation/media/videodev2.h.rst.exceptions > +++ b/Documentation/media/videodev2.h.rst.exceptions > @@ -351,6 +351,7 @@ replace define V4L2_CTRL_FLAG_VOLATILE control-flags > replace define V4L2_CTRL_FLAG_HAS_PAYLOAD control-flags > replace define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE control-flags > replace define V4L2_CTRL_FLAG_MODIFY_LAYOUT control-flags > +replace define V4L2_CTRL_FLAG_REQUIRES_REQUESTS control-flags > > replace define V4L2_CTRL_FLAG_NEXT_CTRL control > replace define V4L2_CTRL_FLAG_NEXT_COMPOUND control > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h > index 7f035d44666e..a78bfdc1df97 100644 > --- a/include/uapi/linux/videodev2.h > +++ b/include/uapi/linux/videodev2.h > @@ -1736,17 +1736,18 @@ struct v4l2_querymenu { > } __attribute__ ((packed)); > > /* Control flags */ > -#define V4L2_CTRL_FLAG_DISABLED 0x0001 > -#define V4L2_CTRL_FLAG_GRABBED 0x0002 > -#define V4L2_CTRL_FLAG_READ_ONLY 0x0004 > -#define V4L2_CTRL_FLAG_UPDATE 0x0008 > -#define V4L2_CTRL_FLAG_INACTIVE 0x0010 > -#define V4L2_CTRL_FLAG_SLIDER 0x0020 > -#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 > -#define V4L2_CTRL_FLAG_VOLATILE 0x0080 > -#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100 > -#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200 > -#define V4L2_CTRL_FLAG_MODIFY_LAYOUT 0x0400 > +#define V4L2_CTRL_FLAG_DISABLED 0x0001 > +#define V4L2_CTRL_FLAG_GRABBED 0x0002 > +#define V4L2_CTRL_FLAG_READ_ONLY 0x0004 > +#define V4L2_CTRL_FLAG_UPDATE 0x0008 > +#define V4L2_CTRL_FLAG_INACTIVE 0x0010 > +#define V4L2_CTRL_FLAG_SLIDER 0x0020 > +#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 > +#define V4L2_CTRL_FLAG_VOLATILE 0x0080 > +#define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100 > +#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200 > +#define V4L2_CTRL_FLAG_MODIFY_LAYOUT 0x0400 > +#define V4L2_CTRL_FLAG_REQUIRES_REQUESTS 0x0800 > > /* Query flags, to be ORed with the control ID */ > #define V4L2_CTRL_FLAG_NEXT_CTRL 0x80000000 >