1.应用如何知道设备支持那些特性的控制?一种典型的做法,V4L2 API提供了一种机制可以让应用能枚举可用的控制操作。
为此,他们要发出最终由驱动videoc_queryctrl()方法实现的ioctl(VIDIOC_QUERYCTRL)调用。
int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc);
驱动通常会用所关心的控制信息来填充qc结构体,或当控制操作不支持时返回-EINVAL,这个结构体如下:
2.对于菜单类型:
int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm);
3.一旦应用知道了可用的控制操作,它就开始查询并改变其值。要查询某一给定控制操作ioctl(VIDIOC_G_CTRL),
应用应将id字段设为对应的控制的ID,并发出一个调用,这个调用最终实现为:
int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl);
4.一个试图改变控制操作的请求实现为ioctl():
int v4l2_s_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl);
驱动应验证id,保证其值在允许的区间。如果一切都没有问题的话,就将新值写入硬件。
参考:
http://blog.csdn.net/crazyman2010/article/details/9250821
https://www.cnblogs.com/ronnydm/p/5787182.html