7.25. ioctl VIDIOC_G_CTRL, VIDIOC_S_CTRL¶
7.25.1. 名称¶
VIDIOC_G_CTRL - VIDIOC_S_CTRL - 获取或设置控件的值
7.25.2. 概要¶
-
VIDIOC_G_CTRL¶
int ioctl(int fd, VIDIOC_G_CTRL, struct v4l2_control *argp)
-
VIDIOC_S_CTRL¶
int ioctl(int fd, VIDIOC_S_CTRL, struct v4l2_control *argp)
7.25.3. 参数¶
fd
open()
返回的文件描述符。argp
指向
v4l2_control
结构的指针。
7.25.4. 描述¶
要获取控件的当前值,应用程序需要初始化 struct v4l2_control
的 id
字段,并使用指向此结构的指针调用 VIDIOC_G_CTRL ioctl。要更改控件的值,应用程序需要初始化 struct v4l2_control
的 id
和 value
字段,并调用 VIDIOC_S_CTRL ioctl。
当 id
无效时,驱动程序会返回 EINVAL
错误代码。当 value
超出范围时,驱动程序可以选择采用最接近的有效值或返回 ERANGE
错误代码,无论哪个看起来更合适。但是,VIDIOC_S_CTRL 是一个只写 ioctl,它不会返回实际的新值。如果 value
对于控件不合适(例如,如果它引用了菜单控件中不支持的菜单索引),则也会返回 EINVAL 错误代码。
这些 ioctl 仅适用于用户控件。对于其他控件类,必须使用 VIDIOC_G_EXT_CTRLS、VIDIOC_S_EXT_CTRLS 或 VIDIOC_TRY_EXT_CTRLS。
-
type v4l2_control¶
__u32 |
|
标识控件,由应用程序设置。 |
__s32 |
|
新值或当前值。 |
7.25.5. 返回值¶
成功时返回 0,出错时返回 -1 并适当设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EINVAL
struct
v4l2_control
id
无效或value
对于给定的控件不合适(即,如果根据 VIDIOC_QUERYMENU 选择的菜单项驱动程序不支持)。- ERANGE
struct
v4l2_control
value
超出范围。- EBUSY
该控件暂时不可更改,可能是因为另一个应用程序接管了此控件所属的设备功能的控制权。
- EACCES
尝试设置只读控件或获取只写控件。
或者,如果尝试设置一个非活动控件,并且驱动程序无法缓存新值,直到控件再次激活。