7.49. ioctls VIDIOC_QUERYCTRL, VIDIOC_QUERY_EXT_CTRL and VIDIOC_QUERYMENU¶
7.49.1. Name¶
VIDIOC_QUERYCTRL - VIDIOC_QUERY_EXT_CTRL - VIDIOC_QUERYMENU - Enumerate controls and menu control items
7.49.2. Synopsis¶
int ioctl(int fd, int VIDIOC_QUERYCTRL, struct v4l2_queryctrl *argp)
-
VIDIOC_QUERY_EXT_CTRL¶
int ioctl(int fd, VIDIOC_QUERY_EXT_CTRL, struct v4l2_query_ext_ctrl *argp)
-
VIDIOC_QUERYMENU¶
int ioctl(int fd, VIDIOC_QUERYMENU, struct v4l2_querymenu *argp)
7.49.3. Arguments¶
fd
File descriptor returned by
open()
.argp
Pointer to struct
v4l2_queryctrl
,v4l2_query_ext_ctrl
orv4l2_querymenu
(depending on the ioctl).
7.49.4. Description¶
To query the attributes of a control applications set the id
field
of a struct v4l2_queryctrl and call the
VIDIOC_QUERYCTRL
ioctl with a pointer to this structure. The driver
fills the rest of the structure or returns an EINVAL
error code when the
id
is invalid.
It is possible to enumerate controls by calling VIDIOC_QUERYCTRL
with successive id
values starting from V4L2_CID_BASE
up to and
exclusive V4L2_CID_LASTP1
. Drivers may return EINVAL
if a control in
this range is not supported. Further applications can enumerate private
controls, which are not defined in this specification, by starting at
V4L2_CID_PRIVATE_BASE
and incrementing id
until the driver
returns EINVAL
.
In both cases, when the driver sets the V4L2_CTRL_FLAG_DISABLED
flag
in the flags
field this control is permanently disabled and should
be ignored by the application. 1
When the application ORs id
with V4L2_CTRL_FLAG_NEXT_CTRL
the
driver returns the next supported non-compound control, or EINVAL
if
there is none. In addition, the V4L2_CTRL_FLAG_NEXT_COMPOUND
flag
can be specified to enumerate all compound controls (i.e. controls with
type ≥ V4L2_CTRL_COMPOUND_TYPES
and/or array control, in other words
controls that contain more than one value). Specify both
V4L2_CTRL_FLAG_NEXT_CTRL
and V4L2_CTRL_FLAG_NEXT_COMPOUND
in
order to enumerate all controls, compound or not. Drivers which do not
support these flags yet always return EINVAL
.
The VIDIOC_QUERY_EXT_CTRL
ioctl was introduced in order to better
support controls that can use compound types, and to expose additional
control information that cannot be returned in struct
v4l2_queryctrl since that structure is full.
VIDIOC_QUERY_EXT_CTRL
is used in the same way as
VIDIOC_QUERYCTRL
, except that the reserved
array must be zeroed
as well.
Additional information is required for menu controls: the names of the
menu items. To query them applications set the id
and index
fields of struct v4l2_querymenu and call the
VIDIOC_QUERYMENU
ioctl with a pointer to this structure. The driver
fills the rest of the structure or returns an EINVAL
error code when the
id
or index
is invalid. Menu items are enumerated by calling
VIDIOC_QUERYMENU
with successive index
values from struct
v4l2_queryctrl minimum
to maximum
,
inclusive.
Note
It is possible for VIDIOC_QUERYMENU
to return
an EINVAL
error code for some indices between minimum
and
maximum
. In that case that particular menu item is not supported by
this driver. Also note that the minimum
value is not necessarily 0.
See also the examples in User Controls.
__u32 |
|
Identifies the control, set by the application. See
Control IDs for predefined IDs. When the ID is ORed with
V4L2_CTRL_FLAG_NEXT_CTRL the driver clears the flag and
returns the first control with a higher ID. Drivers which do not
support this flag yet always return an |
__u32 |
|
Type of control, see |
__u8 |
|
Name of the control, a NUL-terminated ASCII string. This information is intended for the user. |
__s32 |
|
Minimum value, inclusive. This field gives a lower bound for the
control. See enum |
__s32 |
|
Maximum value, inclusive. This field gives an upper bound for the
control. See enum |
__s32 |
|
This field gives a step size for the control. See enum
Generally drivers should not scale hardware control values. It may
be necessary for example when the This field gives the smallest change of an integer control actually affecting hardware. Often the information is needed when the user can change controls by keyboard or GUI buttons, rather than a slider. When for example a hardware register accepts values 0-511 and the driver reports 0-65535, step should be 128. Note that although signed, the step value is supposed to be always positive. |
__s32 |
|
The default value of a Note Drivers reset controls to their default value only when the driver is first loaded, never afterwards. |
__u32 |
|
Control flags, see Control Flags. |
__u32 |
|
Reserved for future extensions. Drivers must set the array to zero. |
__u32 |
|
Identifies the control, set by the application. See
Control IDs for predefined IDs. When the ID is ORed with
|
__u32 |
|
Type of control, see |
char |
|
Name of the control, a NUL-terminated ASCII string. This information is intended for the user. |
__s64 |
|
Minimum value, inclusive. This field gives a lower bound for the
control. See enum |
__s64 |
|
Maximum value, inclusive. This field gives an upper bound for the
control. See enum |
__u64 |
|
This field gives a step size for the control. See enum
Generally drivers should not scale hardware control values. It may
be necessary for example when the This field gives the smallest change of an integer control actually affecting hardware. Often the information is needed when the user can change controls by keyboard or GUI buttons, rather than a slider. When for example a hardware register accepts values 0-511 and the driver reports 0-65535, step should be 128. |
__s64 |
|
The default value of a Note Drivers reset controls to their default value only when the driver is first loaded, never afterwards. |
__u32 |
|
Control flags, see Control Flags. |
__u32 |
|
The size in bytes of a single element of the array. Given a char
pointer |
__u32 |
|
The number of elements in the N-dimensional array. If this control
is not an array, then |
__u32 |
|
The number of dimension in the N-dimensional array. If this control is not an array, then this field is 0. |
__u32 |
|
The size of each dimension. The first |
__u32 |
|
Reserved for future extensions. Applications and drivers must set the array to zero. |
__u32 |
|
Identifies the control, set by the application from the respective
struct v4l2_queryctrl |
__u32 |
|
Index of the menu item, starting at zero, set by the application. |
union { |
(anonymous) |
|
__u8 |
|
Name of the menu item, a NUL-terminated ASCII string. This
information is intended for the user. This field is valid for
|
__s64 |
|
Value of the integer menu item. This field is valid for
|
} |
||
__u32 |
|
Reserved for future extensions. Drivers must set the array to zero. |
-
type v4l2_ctrl_type¶
Type |
|
|
|
Description |
---|---|---|---|---|
|
any |
any |
any |
An integer-valued control ranging from minimum to maximum inclusive. The step value indicates the increment between values. |
|
0 |
1 |
1 |
A boolean-valued control. Zero corresponds to “disabled”, and one means “enabled”. |
|
≥ 0 |
1 |
N-1 |
The control has a menu of N choices. The names of the menu items
can be enumerated with the |
|
≥ 0 |
1 |
N-1 |
The control has a menu of N choices. The values of the menu items
can be enumerated with the |
|
0 |
n/a |
any |
A bitmask field. The maximum value is the set of bits that can be used, all other bits are to be 0. The maximum value is interpreted as a __u32, allowing the use of bit 31 in the bitmask. |
|
0 |
0 |
0 |
A control which performs an action when set. Drivers must ignore
the value passed with |
|
any |
any |
any |
A 64-bit integer valued control. Minimum, maximum and step size
cannot be queried using |
|
≥ 0 |
≥ 1 |
≥ 0 |
The minimum and maximum string lengths. The step size means that
the string must be (minimum + N * step) characters long for N ≥ 0.
These lengths do not include the terminating zero, so in order to
pass a string of length 8 to
VIDIOC_S_EXT_CTRLS you need to
set the |
|
n/a |
n/a |
n/a |
This is not a control. When |
|
any |
any |
any |
An unsigned 8-bit valued control ranging from minimum to maximum inclusive. The step value indicates the increment between values. |
|
any |
any |
any |
An unsigned 16-bit valued control ranging from minimum to maximum inclusive. The step value indicates the increment between values. |
|
any |
any |
any |
An unsigned 32-bit valued control ranging from minimum to maximum inclusive. The step value indicates the increment between values. |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
n/a |
n/a |
n/a |
A struct |
|
0x0001 |
This control is permanently disabled and should be ignored by the
application. Any attempt to change the control will result in an
|
|
0x0002 |
This control is temporarily unchangeable, for example because
another application took over control of the respective resource.
Such controls may be displayed specially in a user interface.
Attempts to change the control may result in an |
|
0x0004 |
This control is permanently readable only. Any attempt to change
the control will result in an |
|
0x0008 |
A hint that changing this control may affect the value of other controls within the same control class. Applications should update their user interface accordingly. |
|
0x0010 |
This control is not applicable to the current configuration and should be displayed accordingly in a user interface. For example the flag may be set on a MPEG audio level 2 bitrate control when MPEG audio encoding level 1 was selected with another control. |
|
0x0020 |
A hint that this control is best represented as a slider-like element in a user interface. |
|
0x0040 |
This control is permanently writable only. Any attempt to read the
control will result in an |
|
0x0080 |
This control is volatile, which means that the value of the control changes continuously. A typical example would be the current gain value if the device is in auto-gain mode. In such a case the hardware calculates the gain value based on the lighting conditions which can change over time. Note Setting a new value for a volatile control will be ignored unless V4L2_CTRL_FLAG_EXECUTE_ON_WRITE is also set. Setting a new value for a volatile control will never trigger a V4L2_EVENT_CTRL_CH_VALUE event. |
|
0x0100 |
This control has a pointer type, so its value has to be accessed
using one of the pointer fields of struct
|
|
0x0200 |
The value provided to the control will be propagated to the driver
even if it remains constant. This is required when the control
represents an action on the hardware. For example: clearing an
error flag or triggering the flash. All the controls of the type
|
|
0x0400 |
Changing this control value may modify the layout of the buffer (for video devices) or the media bus format (for sub-devices). A typical example would be the Note that typically controls with this flag will also set the
|
|
0x0800 |
This control is a dynamically sized 1-dimensional array. It
behaves the same as a regular array, except that the number
of elements as reported by the |
7.49.5. Return Value¶
On success 0 is returned, on error -1 and the errno
variable is set
appropriately. The generic error codes are described at the
Generic Error Codes chapter.
- EINVAL
The struct v4l2_queryctrl
id
is invalid. The struct v4l2_querymenuid
is invalid orindex
is out of range (less thanminimum
or greater thanmaximum
) or this particular menu item is not supported by the driver.- EACCES
An attempt was made to read a write-only control.
- 1
V4L2_CTRL_FLAG_DISABLED
was intended for two purposes: Drivers can skip predefined controls not supported by the hardware (although returningEINVAL
would do as well), or disable predefined and private controls after hardware detection without the trouble of reordering control arrays and indices (EINVAL
cannot be used to skip private controls because it would prematurely end the enumeration).