1059b1c5bSMauro Carvalho Chehab.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 2407e84cdSMauro Carvalho Chehab.. c:namespace:: V4L 354f38fcaSMauro Carvalho Chehab 454f38fcaSMauro Carvalho Chehab.. _VIDIOC_G_EXT_CTRLS: 554f38fcaSMauro Carvalho Chehab 654f38fcaSMauro Carvalho Chehab****************************************************************** 754f38fcaSMauro Carvalho Chehabioctl VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, VIDIOC_TRY_EXT_CTRLS 854f38fcaSMauro Carvalho Chehab****************************************************************** 954f38fcaSMauro Carvalho Chehab 1054f38fcaSMauro Carvalho ChehabName 1154f38fcaSMauro Carvalho Chehab==== 1254f38fcaSMauro Carvalho Chehab 1354f38fcaSMauro Carvalho ChehabVIDIOC_G_EXT_CTRLS - VIDIOC_S_EXT_CTRLS - VIDIOC_TRY_EXT_CTRLS - Get or set the value of several controls, try control values 1454f38fcaSMauro Carvalho Chehab 1554f38fcaSMauro Carvalho ChehabSynopsis 1654f38fcaSMauro Carvalho Chehab======== 1754f38fcaSMauro Carvalho Chehab 18407e84cdSMauro Carvalho Chehab.. c:macro:: VIDIOC_G_EXT_CTRLS 1954f38fcaSMauro Carvalho Chehab 20407e84cdSMauro Carvalho Chehab``int ioctl(int fd, VIDIOC_G_EXT_CTRLS, struct v4l2_ext_controls *argp)`` 2154f38fcaSMauro Carvalho Chehab 22407e84cdSMauro Carvalho Chehab.. c:macro:: VIDIOC_S_EXT_CTRLS 2354f38fcaSMauro Carvalho Chehab 24407e84cdSMauro Carvalho Chehab``int ioctl(int fd, VIDIOC_S_EXT_CTRLS, struct v4l2_ext_controls *argp)`` 2554f38fcaSMauro Carvalho Chehab 26407e84cdSMauro Carvalho Chehab.. c:macro:: VIDIOC_TRY_EXT_CTRLS 2754f38fcaSMauro Carvalho Chehab 28407e84cdSMauro Carvalho Chehab``int ioctl(int fd, VIDIOC_TRY_EXT_CTRLS, struct v4l2_ext_controls *argp)`` 2954f38fcaSMauro Carvalho Chehab 3054f38fcaSMauro Carvalho ChehabArguments 3154f38fcaSMauro Carvalho Chehab========= 3254f38fcaSMauro Carvalho Chehab 3354f38fcaSMauro Carvalho Chehab``fd`` 34407e84cdSMauro Carvalho Chehab File descriptor returned by :c:func:`open()`. 3554f38fcaSMauro Carvalho Chehab 3654f38fcaSMauro Carvalho Chehab``argp`` 3754f38fcaSMauro Carvalho Chehab Pointer to struct :c:type:`v4l2_ext_controls`. 3854f38fcaSMauro Carvalho Chehab 3954f38fcaSMauro Carvalho ChehabDescription 4054f38fcaSMauro Carvalho Chehab=========== 4154f38fcaSMauro Carvalho Chehab 4254f38fcaSMauro Carvalho ChehabThese ioctls allow the caller to get or set multiple controls 4354f38fcaSMauro Carvalho Chehabatomically. Control IDs are grouped into control classes (see 4454f38fcaSMauro Carvalho Chehab:ref:`ctrl-class`) and all controls in the control array must belong 4554f38fcaSMauro Carvalho Chehabto the same control class. 4654f38fcaSMauro Carvalho Chehab 4754f38fcaSMauro Carvalho ChehabApplications must always fill in the ``count``, ``which``, ``controls`` 4854f38fcaSMauro Carvalho Chehaband ``reserved`` fields of struct 4954f38fcaSMauro Carvalho Chehab:c:type:`v4l2_ext_controls`, and initialize the 5054f38fcaSMauro Carvalho Chehabstruct :c:type:`v4l2_ext_control` array pointed to 5154f38fcaSMauro Carvalho Chehabby the ``controls`` fields. 5254f38fcaSMauro Carvalho Chehab 5354f38fcaSMauro Carvalho ChehabTo get the current value of a set of controls applications initialize 5454f38fcaSMauro Carvalho Chehabthe ``id``, ``size`` and ``reserved2`` fields of each struct 5554f38fcaSMauro Carvalho Chehab:c:type:`v4l2_ext_control` and call the 56c5c91a1dSRandy Dunlap:ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` ioctl. String controls must also set the 5754f38fcaSMauro Carvalho Chehab``string`` field. Controls of compound types 5854f38fcaSMauro Carvalho Chehab(``V4L2_CTRL_FLAG_HAS_PAYLOAD`` is set) must set the ``ptr`` field. 5954f38fcaSMauro Carvalho Chehab 6054f38fcaSMauro Carvalho ChehabIf the ``size`` is too small to receive the control result (only 6154f38fcaSMauro Carvalho Chehabrelevant for pointer-type controls like strings), then the driver will 6254f38fcaSMauro Carvalho Chehabset ``size`` to a valid value and return an ``ENOSPC`` error code. You 6354f38fcaSMauro Carvalho Chehabshould re-allocate the memory to this new size and try again. For the 6454f38fcaSMauro Carvalho Chehabstring type it is possible that the same issue occurs again if the 6554f38fcaSMauro Carvalho Chehabstring has grown in the meantime. It is recommended to call 6654f38fcaSMauro Carvalho Chehab:ref:`VIDIOC_QUERYCTRL` first and use 6754f38fcaSMauro Carvalho Chehab``maximum``\ +1 as the new ``size`` value. It is guaranteed that that is 6854f38fcaSMauro Carvalho Chehabsufficient memory. 6954f38fcaSMauro Carvalho Chehab 7054f38fcaSMauro Carvalho ChehabN-dimensional arrays are set and retrieved row-by-row. You cannot set a 7154f38fcaSMauro Carvalho Chehabpartial array, all elements have to be set or retrieved. The total size 7254f38fcaSMauro Carvalho Chehabis calculated as ``elems`` * ``elem_size``. These values can be obtained 7354f38fcaSMauro Carvalho Chehabby calling :ref:`VIDIOC_QUERY_EXT_CTRL <VIDIOC_QUERYCTRL>`. 7454f38fcaSMauro Carvalho Chehab 7554f38fcaSMauro Carvalho ChehabTo change the value of a set of controls applications initialize the 7654f38fcaSMauro Carvalho Chehab``id``, ``size``, ``reserved2`` and ``value/value64/string/ptr`` fields 7754f38fcaSMauro Carvalho Chehabof each struct :c:type:`v4l2_ext_control` and call 7854f38fcaSMauro Carvalho Chehabthe :ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` ioctl. The controls will only be set if *all* 7954f38fcaSMauro Carvalho Chehabcontrol values are valid. 8054f38fcaSMauro Carvalho Chehab 8154f38fcaSMauro Carvalho ChehabTo check if a set of controls have correct values applications 8254f38fcaSMauro Carvalho Chehabinitialize the ``id``, ``size``, ``reserved2`` and 8354f38fcaSMauro Carvalho Chehab``value/value64/string/ptr`` fields of each struct 8454f38fcaSMauro Carvalho Chehab:c:type:`v4l2_ext_control` and call the 8554f38fcaSMauro Carvalho Chehab:ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` ioctl. It is up to the driver whether wrong 8654f38fcaSMauro Carvalho Chehabvalues are automatically adjusted to a valid value or if an error is 8754f38fcaSMauro Carvalho Chehabreturned. 8854f38fcaSMauro Carvalho Chehab 8954f38fcaSMauro Carvalho ChehabWhen the ``id`` or ``which`` is invalid drivers return an ``EINVAL`` error 9054f38fcaSMauro Carvalho Chehabcode. When the value is out of bounds drivers can choose to take the 9154f38fcaSMauro Carvalho Chehabclosest valid value or return an ``ERANGE`` error code, whatever seems more 9254f38fcaSMauro Carvalho Chehabappropriate. In the first case the new value is set in struct 9354f38fcaSMauro Carvalho Chehab:c:type:`v4l2_ext_control`. If the new control value 9454f38fcaSMauro Carvalho Chehabis inappropriate (e.g. the given menu index is not supported by the menu 9554f38fcaSMauro Carvalho Chehabcontrol), then this will also result in an ``EINVAL`` error code error. 9654f38fcaSMauro Carvalho Chehab 9754f38fcaSMauro Carvalho ChehabIf ``request_fd`` is set to a not-yet-queued :ref:`request <media-request-api>` 9854f38fcaSMauro Carvalho Chehabfile descriptor and ``which`` is set to ``V4L2_CTRL_WHICH_REQUEST_VAL``, 9954f38fcaSMauro Carvalho Chehabthen the controls are not applied immediately when calling 10054f38fcaSMauro Carvalho Chehab:ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`, but instead are applied by 10154f38fcaSMauro Carvalho Chehabthe driver for the buffer associated with the same request. 10254f38fcaSMauro Carvalho ChehabIf the device does not support requests, then ``EACCES`` will be returned. 10354f38fcaSMauro Carvalho ChehabIf requests are supported but an invalid request file descriptor is given, 10454f38fcaSMauro Carvalho Chehabthen ``EINVAL`` will be returned. 10554f38fcaSMauro Carvalho Chehab 10654f38fcaSMauro Carvalho ChehabAn attempt to call :ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` for a 10754f38fcaSMauro Carvalho Chehabrequest that has already been queued will result in an ``EBUSY`` error. 10854f38fcaSMauro Carvalho Chehab 10954f38fcaSMauro Carvalho ChehabIf ``request_fd`` is specified and ``which`` is set to 11054f38fcaSMauro Carvalho Chehab``V4L2_CTRL_WHICH_REQUEST_VAL`` during a call to 11154f38fcaSMauro Carvalho Chehab:ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`, then it will return the 11254f38fcaSMauro Carvalho Chehabvalues of the controls at the time of request completion. 11354f38fcaSMauro Carvalho ChehabIf the request is not yet completed, then this will result in an 11454f38fcaSMauro Carvalho Chehab``EACCES`` error. 11554f38fcaSMauro Carvalho Chehab 11654f38fcaSMauro Carvalho ChehabThe driver will only set/get these controls if all control values are 11754f38fcaSMauro Carvalho Chehabcorrect. This prevents the situation where only some of the controls 11854f38fcaSMauro Carvalho Chehabwere set/get. Only low-level errors (e. g. a failed i2c command) can 11954f38fcaSMauro Carvalho Chehabstill cause this situation. 12054f38fcaSMauro Carvalho Chehab 12154f38fcaSMauro Carvalho Chehab.. tabularcolumns:: |p{1.2cm}|p{3.0cm}|p{1.5cm}|p{11.8cm}| 12254f38fcaSMauro Carvalho Chehab 12354f38fcaSMauro Carvalho Chehab.. c:type:: v4l2_ext_control 12454f38fcaSMauro Carvalho Chehab 12554f38fcaSMauro Carvalho Chehab.. cssclass: longtable 12654f38fcaSMauro Carvalho Chehab 12754f38fcaSMauro Carvalho Chehab.. flat-table:: struct v4l2_ext_control 12854f38fcaSMauro Carvalho Chehab :header-rows: 0 12954f38fcaSMauro Carvalho Chehab :stub-columns: 0 13054f38fcaSMauro Carvalho Chehab :widths: 1 1 2 13154f38fcaSMauro Carvalho Chehab 13254f38fcaSMauro Carvalho Chehab * - __u32 13354f38fcaSMauro Carvalho Chehab - ``id`` 13454f38fcaSMauro Carvalho Chehab - Identifies the control, set by the application. 13554f38fcaSMauro Carvalho Chehab * - __u32 13654f38fcaSMauro Carvalho Chehab - ``size`` 13754f38fcaSMauro Carvalho Chehab - The total size in bytes of the payload of this control. This is 13854f38fcaSMauro Carvalho Chehab normally 0, but for pointer controls this should be set to the 13954f38fcaSMauro Carvalho Chehab size of the memory containing the payload, or that will receive 14054f38fcaSMauro Carvalho Chehab the payload. If :ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` finds that this value is 14154f38fcaSMauro Carvalho Chehab less than is required to store the payload result, then it is set 14254f38fcaSMauro Carvalho Chehab to a value large enough to store the payload result and ``ENOSPC`` is 14354f38fcaSMauro Carvalho Chehab returned. 14454f38fcaSMauro Carvalho Chehab 14554f38fcaSMauro Carvalho Chehab .. note:: 14654f38fcaSMauro Carvalho Chehab 14754f38fcaSMauro Carvalho Chehab For string controls, this ``size`` field should 14854f38fcaSMauro Carvalho Chehab not be confused with the length of the string. This field refers 14954f38fcaSMauro Carvalho Chehab to the size of the memory that contains the string. The actual 15054f38fcaSMauro Carvalho Chehab *length* of the string may well be much smaller. 15154f38fcaSMauro Carvalho Chehab * - __u32 15254f38fcaSMauro Carvalho Chehab - ``reserved2``\ [1] 15354f38fcaSMauro Carvalho Chehab - Reserved for future extensions. Drivers and applications must set 15454f38fcaSMauro Carvalho Chehab the array to zero. 15554f38fcaSMauro Carvalho Chehab * - union { 15654f38fcaSMauro Carvalho Chehab - (anonymous) 15754f38fcaSMauro Carvalho Chehab * - __s32 15854f38fcaSMauro Carvalho Chehab - ``value`` 15954f38fcaSMauro Carvalho Chehab - New value or current value. Valid if this control is not of type 16054f38fcaSMauro Carvalho Chehab ``V4L2_CTRL_TYPE_INTEGER64`` and ``V4L2_CTRL_FLAG_HAS_PAYLOAD`` is 16154f38fcaSMauro Carvalho Chehab not set. 16254f38fcaSMauro Carvalho Chehab * - __s64 16354f38fcaSMauro Carvalho Chehab - ``value64`` 16454f38fcaSMauro Carvalho Chehab - New value or current value. Valid if this control is of type 16554f38fcaSMauro Carvalho Chehab ``V4L2_CTRL_TYPE_INTEGER64`` and ``V4L2_CTRL_FLAG_HAS_PAYLOAD`` is 16654f38fcaSMauro Carvalho Chehab not set. 16754f38fcaSMauro Carvalho Chehab * - char * 16854f38fcaSMauro Carvalho Chehab - ``string`` 16954f38fcaSMauro Carvalho Chehab - A pointer to a string. Valid if this control is of type 17054f38fcaSMauro Carvalho Chehab ``V4L2_CTRL_TYPE_STRING``. 17154f38fcaSMauro Carvalho Chehab * - __u8 * 17254f38fcaSMauro Carvalho Chehab - ``p_u8`` 17354f38fcaSMauro Carvalho Chehab - A pointer to a matrix control of unsigned 8-bit values. Valid if 17454f38fcaSMauro Carvalho Chehab this control is of type ``V4L2_CTRL_TYPE_U8``. 17554f38fcaSMauro Carvalho Chehab * - __u16 * 17654f38fcaSMauro Carvalho Chehab - ``p_u16`` 17754f38fcaSMauro Carvalho Chehab - A pointer to a matrix control of unsigned 16-bit values. Valid if 17854f38fcaSMauro Carvalho Chehab this control is of type ``V4L2_CTRL_TYPE_U16``. 17954f38fcaSMauro Carvalho Chehab * - __u32 * 18054f38fcaSMauro Carvalho Chehab - ``p_u32`` 18154f38fcaSMauro Carvalho Chehab - A pointer to a matrix control of unsigned 32-bit values. Valid if 18254f38fcaSMauro Carvalho Chehab this control is of type ``V4L2_CTRL_TYPE_U32``. 18363e799b9SHans Verkuil * - struct :c:type:`v4l2_area` * 18454f38fcaSMauro Carvalho Chehab - ``p_area`` 18554f38fcaSMauro Carvalho Chehab - A pointer to a struct :c:type:`v4l2_area`. Valid if this control is 18654f38fcaSMauro Carvalho Chehab of type ``V4L2_CTRL_TYPE_AREA``. 18763e799b9SHans Verkuil * - struct :c:type:`v4l2_ctrl_h264_sps` * 18881c6892dSEzequiel Garcia - ``p_h264_sps`` 18981c6892dSEzequiel Garcia - A pointer to a struct :c:type:`v4l2_ctrl_h264_sps`. Valid if this control is 19081c6892dSEzequiel Garcia of type ``V4L2_CTRL_TYPE_H264_SPS``. 19163e799b9SHans Verkuil * - struct :c:type:`v4l2_ctrl_h264_pps` * 19281c6892dSEzequiel Garcia - ``p_h264_pps`` 19381c6892dSEzequiel Garcia - A pointer to a struct :c:type:`v4l2_ctrl_h264_pps`. Valid if this control is 19481c6892dSEzequiel Garcia of type ``V4L2_CTRL_TYPE_H264_PPS``. 19563e799b9SHans Verkuil * - struct :c:type:`v4l2_ctrl_h264_scaling_matrix` * 19681c6892dSEzequiel Garcia - ``p_h264_scaling_matrix`` 19781c6892dSEzequiel Garcia - A pointer to a struct :c:type:`v4l2_ctrl_h264_scaling_matrix`. Valid if this control is 19881c6892dSEzequiel Garcia of type ``V4L2_CTRL_TYPE_H264_SCALING_MATRIX``. 19963e799b9SHans Verkuil * - struct :c:type:`v4l2_ctrl_h264_pred_weights` * 20081c6892dSEzequiel Garcia - ``p_h264_pred_weights`` 20181c6892dSEzequiel Garcia - A pointer to a struct :c:type:`v4l2_ctrl_h264_pred_weights`. Valid if this control is 20281c6892dSEzequiel Garcia of type ``V4L2_CTRL_TYPE_H264_PRED_WEIGHTS``. 20363e799b9SHans Verkuil * - struct :c:type:`v4l2_ctrl_h264_slice_params` * 20481c6892dSEzequiel Garcia - ``p_h264_slice_params`` 20581c6892dSEzequiel Garcia - A pointer to a struct :c:type:`v4l2_ctrl_h264_slice_params`. Valid if this control is 20681c6892dSEzequiel Garcia of type ``V4L2_CTRL_TYPE_H264_SLICE_PARAMS``. 20763e799b9SHans Verkuil * - struct :c:type:`v4l2_ctrl_h264_decode_params` * 20881c6892dSEzequiel Garcia - ``p_h264_decode_params`` 20981c6892dSEzequiel Garcia - A pointer to a struct :c:type:`v4l2_ctrl_h264_decode_params`. Valid if this control is 21081c6892dSEzequiel Garcia of type ``V4L2_CTRL_TYPE_H264_DECODE_PARAMS``. 211*4a85d1cbSHans Verkuil * - struct :c:type:`v4l2_ctrl_fwht_params` * 212*4a85d1cbSHans Verkuil - ``p_fwht_params`` 213*4a85d1cbSHans Verkuil - A pointer to a struct :c:type:`v4l2_ctrl_fwht_params`. Valid if this control is 214*4a85d1cbSHans Verkuil of type ``V4L2_CTRL_TYPE_FWHT_PARAMS``. 21554f38fcaSMauro Carvalho Chehab * - void * 21654f38fcaSMauro Carvalho Chehab - ``ptr`` 21754f38fcaSMauro Carvalho Chehab - A pointer to a compound type which can be an N-dimensional array 21854f38fcaSMauro Carvalho Chehab and/or a compound type (the control's type is >= 21954f38fcaSMauro Carvalho Chehab ``V4L2_CTRL_COMPOUND_TYPES``). Valid if 22054f38fcaSMauro Carvalho Chehab ``V4L2_CTRL_FLAG_HAS_PAYLOAD`` is set for this control. 22154f38fcaSMauro Carvalho Chehab * - } 22254f38fcaSMauro Carvalho Chehab - 22354f38fcaSMauro Carvalho Chehab 22454f38fcaSMauro Carvalho Chehab.. tabularcolumns:: |p{4.0cm}|p{2.2cm}|p{2.1cm}|p{8.2cm}| 22554f38fcaSMauro Carvalho Chehab 22654f38fcaSMauro Carvalho Chehab.. c:type:: v4l2_ext_controls 22754f38fcaSMauro Carvalho Chehab 22854f38fcaSMauro Carvalho Chehab.. cssclass:: longtable 22954f38fcaSMauro Carvalho Chehab 23054f38fcaSMauro Carvalho Chehab.. flat-table:: struct v4l2_ext_controls 23154f38fcaSMauro Carvalho Chehab :header-rows: 0 23254f38fcaSMauro Carvalho Chehab :stub-columns: 0 23354f38fcaSMauro Carvalho Chehab :widths: 1 1 2 23454f38fcaSMauro Carvalho Chehab 23554f38fcaSMauro Carvalho Chehab * - union { 23654f38fcaSMauro Carvalho Chehab - (anonymous) 23754f38fcaSMauro Carvalho Chehab * - __u32 23854f38fcaSMauro Carvalho Chehab - ``ctrl_class`` 23954f38fcaSMauro Carvalho Chehab - The control class to which all controls belong, see 24054f38fcaSMauro Carvalho Chehab :ref:`ctrl-class`. Drivers that use a kernel framework for 24154f38fcaSMauro Carvalho Chehab handling controls will also accept a value of 0 here, meaning that 24254f38fcaSMauro Carvalho Chehab the controls can belong to any control class. Whether drivers 24354f38fcaSMauro Carvalho Chehab support this can be tested by setting ``ctrl_class`` to 0 and 24454f38fcaSMauro Carvalho Chehab calling :ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` with a ``count`` of 0. If that 24554f38fcaSMauro Carvalho Chehab succeeds, then the driver supports this feature. 24654f38fcaSMauro Carvalho Chehab * - __u32 24754f38fcaSMauro Carvalho Chehab - ``which`` 24854f38fcaSMauro Carvalho Chehab - Which value of the control to get/set/try. 24954f38fcaSMauro Carvalho Chehab ``V4L2_CTRL_WHICH_CUR_VAL`` will return the current value of the 25054f38fcaSMauro Carvalho Chehab control, ``V4L2_CTRL_WHICH_DEF_VAL`` will return the default 25154f38fcaSMauro Carvalho Chehab value of the control and ``V4L2_CTRL_WHICH_REQUEST_VAL`` indicates that 25254f38fcaSMauro Carvalho Chehab these controls have to be retrieved from a request or tried/set for 25354f38fcaSMauro Carvalho Chehab a request. In the latter case the ``request_fd`` field contains the 25454f38fcaSMauro Carvalho Chehab file descriptor of the request that should be used. If the device 25554f38fcaSMauro Carvalho Chehab does not support requests, then ``EACCES`` will be returned. 25654f38fcaSMauro Carvalho Chehab 25754f38fcaSMauro Carvalho Chehab .. note:: 25854f38fcaSMauro Carvalho Chehab 25954f38fcaSMauro Carvalho Chehab When using ``V4L2_CTRL_WHICH_DEF_VAL`` be aware that you can only 26054f38fcaSMauro Carvalho Chehab get the default value of the control, you cannot set or try it. 26154f38fcaSMauro Carvalho Chehab 26254f38fcaSMauro Carvalho Chehab For backwards compatibility you can also use a control class here 26354f38fcaSMauro Carvalho Chehab (see :ref:`ctrl-class`). In that case all controls have to 26454f38fcaSMauro Carvalho Chehab belong to that control class. This usage is deprecated, instead 26554f38fcaSMauro Carvalho Chehab just use ``V4L2_CTRL_WHICH_CUR_VAL``. There are some very old 26654f38fcaSMauro Carvalho Chehab drivers that do not yet support ``V4L2_CTRL_WHICH_CUR_VAL`` and 26754f38fcaSMauro Carvalho Chehab that require a control class here. You can test for such drivers 26854f38fcaSMauro Carvalho Chehab by setting ctrl_class to ``V4L2_CTRL_WHICH_CUR_VAL`` and calling 26954f38fcaSMauro Carvalho Chehab VIDIOC_TRY_EXT_CTRLS with a count of 0. If that fails, then the 27054f38fcaSMauro Carvalho Chehab driver does not support ``V4L2_CTRL_WHICH_CUR_VAL``. 27154f38fcaSMauro Carvalho Chehab * - } 27254f38fcaSMauro Carvalho Chehab - 27354f38fcaSMauro Carvalho Chehab * - __u32 27454f38fcaSMauro Carvalho Chehab - ``count`` 27554f38fcaSMauro Carvalho Chehab - The number of controls in the controls array. May also be zero. 27654f38fcaSMauro Carvalho Chehab * - __u32 27754f38fcaSMauro Carvalho Chehab - ``error_idx`` 27854f38fcaSMauro Carvalho Chehab - Set by the driver in case of an error. If the error is associated 27954f38fcaSMauro Carvalho Chehab with a particular control, then ``error_idx`` is set to the index 28054f38fcaSMauro Carvalho Chehab of that control. If the error is not related to a specific 28154f38fcaSMauro Carvalho Chehab control, or the validation step failed (see below), then 28254f38fcaSMauro Carvalho Chehab ``error_idx`` is set to ``count``. The value is undefined if the 28354f38fcaSMauro Carvalho Chehab ioctl returned 0 (success). 28454f38fcaSMauro Carvalho Chehab 28554f38fcaSMauro Carvalho Chehab Before controls are read from/written to hardware a validation 28654f38fcaSMauro Carvalho Chehab step takes place: this checks if all controls in the list are 28754f38fcaSMauro Carvalho Chehab valid controls, if no attempt is made to write to a read-only 28854f38fcaSMauro Carvalho Chehab control or read from a write-only control, and any other up-front 28954f38fcaSMauro Carvalho Chehab checks that can be done without accessing the hardware. The exact 29054f38fcaSMauro Carvalho Chehab validations done during this step are driver dependent since some 29154f38fcaSMauro Carvalho Chehab checks might require hardware access for some devices, thus making 29254f38fcaSMauro Carvalho Chehab it impossible to do those checks up-front. However, drivers should 29354f38fcaSMauro Carvalho Chehab make a best-effort to do as many up-front checks as possible. 29454f38fcaSMauro Carvalho Chehab 29554f38fcaSMauro Carvalho Chehab This check is done to avoid leaving the hardware in an 29654f38fcaSMauro Carvalho Chehab inconsistent state due to easy-to-avoid problems. But it leads to 29754f38fcaSMauro Carvalho Chehab another problem: the application needs to know whether an error 29854f38fcaSMauro Carvalho Chehab came from the validation step (meaning that the hardware was not 29954f38fcaSMauro Carvalho Chehab touched) or from an error during the actual reading from/writing 30054f38fcaSMauro Carvalho Chehab to hardware. 30154f38fcaSMauro Carvalho Chehab 30254f38fcaSMauro Carvalho Chehab The, in hindsight quite poor, solution for that is to set 30354f38fcaSMauro Carvalho Chehab ``error_idx`` to ``count`` if the validation failed. This has the 30454f38fcaSMauro Carvalho Chehab unfortunate side-effect that it is not possible to see which 30554f38fcaSMauro Carvalho Chehab control failed the validation. If the validation was successful 30654f38fcaSMauro Carvalho Chehab and the error happened while accessing the hardware, then 30754f38fcaSMauro Carvalho Chehab ``error_idx`` is less than ``count`` and only the controls up to 30854f38fcaSMauro Carvalho Chehab ``error_idx-1`` were read or written correctly, and the state of 30954f38fcaSMauro Carvalho Chehab the remaining controls is undefined. 31054f38fcaSMauro Carvalho Chehab 31154f38fcaSMauro Carvalho Chehab Since :ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` does not access hardware there is 31254f38fcaSMauro Carvalho Chehab also no need to handle the validation step in this special way, so 31354f38fcaSMauro Carvalho Chehab ``error_idx`` will just be set to the control that failed the 31454f38fcaSMauro Carvalho Chehab validation step instead of to ``count``. This means that if 31554f38fcaSMauro Carvalho Chehab :ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` fails with ``error_idx`` set to ``count``, 31654f38fcaSMauro Carvalho Chehab then you can call :ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` to try to discover the 31754f38fcaSMauro Carvalho Chehab actual control that failed the validation step. Unfortunately, 31854f38fcaSMauro Carvalho Chehab there is no ``TRY`` equivalent for :ref:`VIDIOC_G_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>`. 31954f38fcaSMauro Carvalho Chehab * - __s32 32054f38fcaSMauro Carvalho Chehab - ``request_fd`` 32154f38fcaSMauro Carvalho Chehab - File descriptor of the request to be used by this operation. Only 32254f38fcaSMauro Carvalho Chehab valid if ``which`` is set to ``V4L2_CTRL_WHICH_REQUEST_VAL``. 32354f38fcaSMauro Carvalho Chehab If the device does not support requests, then ``EACCES`` will be returned. 32454f38fcaSMauro Carvalho Chehab If requests are supported but an invalid request file descriptor is 32554f38fcaSMauro Carvalho Chehab given, then ``EINVAL`` will be returned. 32654f38fcaSMauro Carvalho Chehab * - __u32 32754f38fcaSMauro Carvalho Chehab - ``reserved``\ [1] 32854f38fcaSMauro Carvalho Chehab - Reserved for future extensions. 32954f38fcaSMauro Carvalho Chehab 33054f38fcaSMauro Carvalho Chehab Drivers and applications must set the array to zero. 33154f38fcaSMauro Carvalho Chehab * - struct :c:type:`v4l2_ext_control` * 33254f38fcaSMauro Carvalho Chehab - ``controls`` 33354f38fcaSMauro Carvalho Chehab - Pointer to an array of ``count`` v4l2_ext_control structures. 33454f38fcaSMauro Carvalho Chehab 33554f38fcaSMauro Carvalho Chehab Ignored if ``count`` equals zero. 33654f38fcaSMauro Carvalho Chehab 33754f38fcaSMauro Carvalho Chehab.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| 33854f38fcaSMauro Carvalho Chehab 33954f38fcaSMauro Carvalho Chehab.. _ctrl-class: 34054f38fcaSMauro Carvalho Chehab 34154f38fcaSMauro Carvalho Chehab.. flat-table:: Control classes 34254f38fcaSMauro Carvalho Chehab :header-rows: 0 34354f38fcaSMauro Carvalho Chehab :stub-columns: 0 34454f38fcaSMauro Carvalho Chehab :widths: 3 1 4 34554f38fcaSMauro Carvalho Chehab 34654f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_USER`` 34754f38fcaSMauro Carvalho Chehab - 0x980000 34854f38fcaSMauro Carvalho Chehab - The class containing user controls. These controls are described 34954f38fcaSMauro Carvalho Chehab in :ref:`control`. All controls that can be set using the 35054f38fcaSMauro Carvalho Chehab :ref:`VIDIOC_S_CTRL <VIDIOC_G_CTRL>` and 35154f38fcaSMauro Carvalho Chehab :ref:`VIDIOC_G_CTRL <VIDIOC_G_CTRL>` ioctl belong to this 35254f38fcaSMauro Carvalho Chehab class. 35335aaa6e6SEzequiel Garcia * - ``V4L2_CTRL_CLASS_CODEC`` 35454f38fcaSMauro Carvalho Chehab - 0x990000 35535aaa6e6SEzequiel Garcia - The class containing stateful codec controls. These controls are 35635aaa6e6SEzequiel Garcia described in :ref:`codec-controls`. 35754f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_CAMERA`` 35854f38fcaSMauro Carvalho Chehab - 0x9a0000 35954f38fcaSMauro Carvalho Chehab - The class containing camera controls. These controls are described 36054f38fcaSMauro Carvalho Chehab in :ref:`camera-controls`. 36154f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_FM_TX`` 36254f38fcaSMauro Carvalho Chehab - 0x9b0000 36354f38fcaSMauro Carvalho Chehab - The class containing FM Transmitter (FM TX) controls. These 36454f38fcaSMauro Carvalho Chehab controls are described in :ref:`fm-tx-controls`. 36554f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_FLASH`` 36654f38fcaSMauro Carvalho Chehab - 0x9c0000 36754f38fcaSMauro Carvalho Chehab - The class containing flash device controls. These controls are 36854f38fcaSMauro Carvalho Chehab described in :ref:`flash-controls`. 36954f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_JPEG`` 37054f38fcaSMauro Carvalho Chehab - 0x9d0000 37154f38fcaSMauro Carvalho Chehab - The class containing JPEG compression controls. These controls are 37254f38fcaSMauro Carvalho Chehab described in :ref:`jpeg-controls`. 37354f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_IMAGE_SOURCE`` 37454f38fcaSMauro Carvalho Chehab - 0x9e0000 37554f38fcaSMauro Carvalho Chehab - The class containing image source controls. These controls are 37654f38fcaSMauro Carvalho Chehab described in :ref:`image-source-controls`. 37754f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_IMAGE_PROC`` 37854f38fcaSMauro Carvalho Chehab - 0x9f0000 37954f38fcaSMauro Carvalho Chehab - The class containing image processing controls. These controls are 38054f38fcaSMauro Carvalho Chehab described in :ref:`image-process-controls`. 38154f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_FM_RX`` 38254f38fcaSMauro Carvalho Chehab - 0xa10000 38354f38fcaSMauro Carvalho Chehab - The class containing FM Receiver (FM RX) controls. These controls 38454f38fcaSMauro Carvalho Chehab are described in :ref:`fm-rx-controls`. 38554f38fcaSMauro Carvalho Chehab * - ``V4L2_CTRL_CLASS_RF_TUNER`` 38654f38fcaSMauro Carvalho Chehab - 0xa20000 38754f38fcaSMauro Carvalho Chehab - The class containing RF tuner controls. These controls are 38854f38fcaSMauro Carvalho Chehab described in :ref:`rf-tuner-controls`. 389df23e0c1SHans Verkuil * - ``V4L2_CTRL_CLASS_DETECT`` 390df23e0c1SHans Verkuil - 0xa30000 391df23e0c1SHans Verkuil - The class containing motion or object detection controls. These controls 392df23e0c1SHans Verkuil are described in :ref:`detect-controls`. 393008d2bd6SEzequiel Garcia * - ``V4L2_CTRL_CLASS_CODEC_STATELESS`` 394008d2bd6SEzequiel Garcia - 0xa40000 395008d2bd6SEzequiel Garcia - The class containing stateless codec controls. These controls are 396008d2bd6SEzequiel Garcia described in :ref:`codec-stateless-controls`. 39754f38fcaSMauro Carvalho Chehab 39854f38fcaSMauro Carvalho ChehabReturn Value 39954f38fcaSMauro Carvalho Chehab============ 40054f38fcaSMauro Carvalho Chehab 40154f38fcaSMauro Carvalho ChehabOn success 0 is returned, on error -1 and the ``errno`` variable is set 40254f38fcaSMauro Carvalho Chehabappropriately. The generic error codes are described at the 40354f38fcaSMauro Carvalho Chehab:ref:`Generic Error Codes <gen-errors>` chapter. 40454f38fcaSMauro Carvalho Chehab 40554f38fcaSMauro Carvalho ChehabEINVAL 40654f38fcaSMauro Carvalho Chehab The struct :c:type:`v4l2_ext_control` ``id`` is 40754f38fcaSMauro Carvalho Chehab invalid, or the struct :c:type:`v4l2_ext_controls` 40854f38fcaSMauro Carvalho Chehab ``which`` is invalid, or the struct 40954f38fcaSMauro Carvalho Chehab :c:type:`v4l2_ext_control` ``value`` was 41054f38fcaSMauro Carvalho Chehab inappropriate (e.g. the given menu index is not supported by the 41154f38fcaSMauro Carvalho Chehab driver), or the ``which`` field was set to ``V4L2_CTRL_WHICH_REQUEST_VAL`` 41254f38fcaSMauro Carvalho Chehab but the given ``request_fd`` was invalid or ``V4L2_CTRL_WHICH_REQUEST_VAL`` 41354f38fcaSMauro Carvalho Chehab is not supported by the kernel. 41454f38fcaSMauro Carvalho Chehab This error code is also returned by the 41554f38fcaSMauro Carvalho Chehab :ref:`VIDIOC_S_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` and :ref:`VIDIOC_TRY_EXT_CTRLS <VIDIOC_G_EXT_CTRLS>` ioctls if two or 41654f38fcaSMauro Carvalho Chehab more control values are in conflict. 41754f38fcaSMauro Carvalho Chehab 41854f38fcaSMauro Carvalho ChehabERANGE 41954f38fcaSMauro Carvalho Chehab The struct :c:type:`v4l2_ext_control` ``value`` 42054f38fcaSMauro Carvalho Chehab is out of bounds. 42154f38fcaSMauro Carvalho Chehab 42254f38fcaSMauro Carvalho ChehabEBUSY 42354f38fcaSMauro Carvalho Chehab The control is temporarily not changeable, possibly because another 42454f38fcaSMauro Carvalho Chehab applications took over control of the device function this control 42554f38fcaSMauro Carvalho Chehab belongs to, or (if the ``which`` field was set to 42654f38fcaSMauro Carvalho Chehab ``V4L2_CTRL_WHICH_REQUEST_VAL``) the request was queued but not yet 42754f38fcaSMauro Carvalho Chehab completed. 42854f38fcaSMauro Carvalho Chehab 42954f38fcaSMauro Carvalho ChehabENOSPC 43054f38fcaSMauro Carvalho Chehab The space reserved for the control's payload is insufficient. The 43154f38fcaSMauro Carvalho Chehab field ``size`` is set to a value that is enough to store the payload 43254f38fcaSMauro Carvalho Chehab and this error code is returned. 43354f38fcaSMauro Carvalho Chehab 43454f38fcaSMauro Carvalho ChehabEACCES 43554f38fcaSMauro Carvalho Chehab Attempt to try or set a read-only control, or to get a write-only 43654f38fcaSMauro Carvalho Chehab control, or to get a control from a request that has not yet been 43754f38fcaSMauro Carvalho Chehab completed. 43854f38fcaSMauro Carvalho Chehab 43954f38fcaSMauro Carvalho Chehab Or the ``which`` field was set to ``V4L2_CTRL_WHICH_REQUEST_VAL`` but the 44054f38fcaSMauro Carvalho Chehab device does not support requests. 441