Я изучаю API v4l2 для настройки видеоустройств через v4l2-ctl. Примеры кода давным-давно действительно устарели, и некоторые определения больше не работают. Существует новый метод запроса всего для API у Kerhel, который показан в 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);
Поле и определение находятся в файле, расположенном в исходном дереве linux: /usr/src/linux-4.6.3-gentoo/include/uapi/linux/videodev2.h, но этот файл не включается, когда я указываю:
#include <linux/videodev2.h>
Что такое вуду, чтобы компилятор включал правильный файл?
Я изучал источник v4l2-utils, но не могу понять это.
Большое спасибо.
Файл, расположенный в / usr / include, устарел. У меня были установлены заголовки для ядра 4.3, и мне понадобились заголовки из более поздней версии. Решением для моей установки gentoo было добавление ключевого слова для sys-kernel / linux-headers и установка последних заголовков (4.7).
Оказывается, файл UAPI становится заголовком при установке в / usr / include. Я мог бы, вероятно, сделать это с помощью make headers_install в моем каталоге / usr / src / linux, но я не уверен, что это более «правильно», чем установка ebuild linux-headers. Я беспокоюсь о конфликтах.
Надеюсь, это поможет кому-то еще …
Других решений пока нет …