Video for Linux Two API Specification: Revision 0.24
Prev |  | Next

# ioctl VIDIOC_G_CTRL, VIDIOC_S_CTRL

## Name

VIDIOC_G_CTRL, VIDIOC_S_CTRL -- Get or set the value of a control

## Synopsis

``int ioctl`(int fd, int request, struct v4l2_control *argp);`

## Arguments

`fd`

  File descriptor returned by `open()`.

`request`

  VIDIOC_G_CTRL, VIDIOC_S_CTRL

`argp`

## Description

To get the current value of a control applications initialize the `id` field of a struct `v4l2_control` and call the `VIDIOC_G_CTRL` ioctl with a pointer to this structure. To change the value of a control applications initialize the `id` and `value` fields of a struct `v4l2_control` and call the `VIDIOC_S_CTRL` ioctl.

When the `id` is invalid drivers return an EINVAL error code. When the `value` is out of bounds drivers can choose to take the closest valid value or return an ERANGE error code, whatever seems more appropriate. However, `VIDIOC_S_CTRL` is a write-only ioctl, it does not return the actual new value.

These ioctls work only with user controls. For other control classes the `VIDIOC_G_EXT_CTRLS`, `VIDIOC_S_EXT_CTRLS` or `VIDIOC_TRY_EXT_CTRLS` must be used.

Table 1. struct `v4l2_control`

__u32 | `id` | Identifies the control, set by the application.
__s32 | `value` | New value or current value.

## Return Value

On success 0 is returned, on error -1 and the `errno` variable is set appropriately:

EINVAL

  The struct v4l2_control `id` is invalid.

ERANGE

  The struct v4l2_control `value` is out of bounds.

EBUSY

  The control is temporarily not changeable, possibly because another applications took over control of the device function this control belongs to.

Prev | Home | Next
ioctl VIDIOC_G_CROP, VIDIOC_S_CROP | Up | ioctl VIDIOC_G_ENC_INDEX