我正在学习v4l2 API,以便通过v4l2-ctl配置视频设备。很久以前的代码示例已经过时了,有些定义不再适用。有一种新方法可以从kerhel请求API的所有内容,如v4l2-utils所示。我试图将v4l2-utils中的一些代码合并到我的代码中。但是,我从编译器收到错误:
camera.hpp:1038:8: error: 'struct v4l2_ext_controls' has no member named 'which'
ctrls.which = V4L2_CTRL_ID2WHICH(qctrl.id);
并且:
camera.hpp:1038:43: error: 'V4L2_CTRL_ID2WHICH' was not declared in this scope
ctrls.which = V4L2_CTRL_ID2WHICH(qctrl.id);
字段和define位于linux源代码树中的文件中:/usr/src/linux-4.6.3-gentoo/include/uapi/linux/videodev2.h,但指定时不包含该文件:
#include <linux/videodev2.h>
让编译器包含正确文件的伏都教是什么?
我一直在研究v4l2-utils源,但无法弄清楚。
非常感谢。
答案 0 :(得分:1)
位于/ usr / include中的文件已过期。我为内核4.3安装了标头,需要更高版本的标头。我的gentoo安装的解决方案是为sys-kernel / linux-headers添加一个关键字并安装最新的头文件(4.7)。
事实证明,当安装到/ usr / include时,UAPI文件成为标头。我可能已经在我的/ usr / src / linux目录中使用make headers_install完成了这个,但我不确定这是否更多&#34;正确&#34;而不是安装linux-headers ebuild。我担心冲突。
希望这有助于其他人...