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. 描述¶
要获取控件的当前值,应用程序需要初始化结构体 v4l2_control
的 id
字段,并使用指向此结构的指针调用 VIDIOC_G_CTRL ioctl。要更改控件的值,应用程序需要初始化结构体 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。
-
类型 v4l2_control¶
__u32 |
|
标识控件,由应用程序设置。 |
__s32 |
|
新值或当前值。 |
7.25.5. 返回值¶
成功时返回 0,错误时返回 -1,并适当设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
- EINVAL
结构体
v4l2_control
的id
无效,或者value
不适合给定的控件(即,如果选择了驱动程序根据 VIDIOC_QUERYMENU 不支持的菜单项)。- ERANGE
结构体
v4l2_control
的value
超出范围。- EBUSY
控件暂时无法更改,可能是因为另一个应用程序接管了此控件所属的设备功能。
- EACCES
尝试设置只读控件或获取只写控件。
或者如果尝试设置一个非活动控件,并且驱动程序无法缓存新值直到控件再次激活。