Полное английское название V4L2 — Video for Linux2, который представляет собой драйвер ядра, специально разработанный для видеоустройств. При разработке видео мы обычно можем напрямую управлять камерой, управляя узлом устройства V4L2. Обычно узлом устройства V4L2 в Linux является **/dev/video0**. Будь то камера MIPI или камера UVC, их базовыми операциями по умолчанию являются узлы /dev/video0.
Как видно из этого изображения, при использовании V4L2 для управления камерой вам необходим доступ к драйверу ядра. Весь драйвер устройства работает на Linux. Device File Система управления, Linux File Systemпод управлениемV4L2COREфункция。иV4L2_COREОн содержитV4L2_DEV、V4L2_SUB_DEV、V4L2_DEVICE、VIDEOBUF2_CORE。в,V4L2_DEIVCEВ основном управляет драйверами видеоустройств.、VIDEOBUF2_COREВ основном управляет данными в очереди буфера、V4L2_SUB_DEVВ основном подсистема управления видеооборудованием。Если прикладной уровень хочет контролировать всюV4L2Если уровень драйвера контролирует,Вам нужно только выполнять операции fops (управление формой файла) на v4l2_dev.,Потому что v4l2_dev — это интерфейс, предоставляемый уровнем драйвера пользовательскому уровню.
3.1. Откройте узел устройства:
Откройте узел видеоустройства /dev/video0.
3.2. Запрос возможностей устройства.
Использование функции ioctl для доступа к базовой команде VIDIOC_QUERYCAP V4L2 предназначено главным образом для запроса характеристик производительности камеры.
3.3. Получите формат, поддерживаемый камерой, и установите формат пикселей.
через ioctl VIDEOIOC_ENUM_FMT для получения соответствующего поддерживаемого формата,И установите камеру на соответствующий формат. В том числе: ширина, высота, формат пикселей и т. д. После завершения настройки,Затем используйте команду ioctl, чтобы включить операцию,Включите соответствующее ключевое слово:VIDIOC_S_FMT。
3.4. Сопоставление памяти с пользовательским пространством и операциями очереди.
Используйте ioctl для управления VIDIOC_REQBUFS,Применить видеобуфер. После завершения подачи заявки,Сопоставить буферы драйвера с пользовательским пространством,API сопоставления использует mmap. Если сопоставление пользовательского пространства прошло успешно,Затем поместите видеоданные в очередь буфера.,Соответствует присоединению к командеioctlКомандаVIDIOC_QBUF。
3.5. Включите камеру для получения видеопотока.
Используйте командуstream_on, чтобы включить камеру v4l2, чтобы она могла нормально запустить процесс сбора.
3.6. Вынуть видеоданные из буфера.
Используйте ioctl для извлечения видеоданных из буфера,它对应的КомандаVIDIOC_DQBUF。использовалVIDIOC_DQBUFпосле,Структура v4l2_buffer содержит соответствующие видеоданные. И запишите соответствующие данные в изображение mjpg. После выполнения всех вышеперечисленных операций,Затем поместите данные камеры в очередь операции VIDIOC_QBUF.
3.7. Выключите камеру для получения потока.
через команду управления ioctl VIDIOC_STREAMOFF закройте работу по сбору камер.
3.8.Несопоставленный буфер
Используйте munmap api для решения операции сопоставления буфера ядра с пользовательским буфером.
3.9. Освободите все ресурсы.