Подробное V4L2

Видео для Linux два (Video4Linux2) называет v4l2, V4L2 является операционной системой Linux для получения изображений, интерфейс API для видео и аудио данных, с соответствующими устройствами захвата видео и соответствующими драйверами может реализовать изображения, видео, аудио и т.д. коллекция. В удаленных конференций, видеотелефония, системы видеонаблюдения и встроенного мультимедийного терминала имеет широкий спектр применения.

一, Видео для Linux два

  В Linux все периферийные устройства рассматриваются как особый вид файла, «файл устройство», вы можете получить доступ как обычный файл для чтения и записи. В общем, с помощью устройства V4L2 файла вождения камеры / DEV / v4l / video0. Для GM, вы можете создать ссылку на / разработчик / video0 из. V4L2 поддерживает два способ захвата изображений: режим памяти отображения (ТСМ) и прямой доступ (чтение). V4L2 определяет ряд важных структур данных включает в себя / Linux / videodev.h документ, во время сбора изображений, то есть, чтобы получить данные окончательного изображения с помощью операции этих данных. Системы Linux могут быть настроены возможностями v4l2 на этапе компиляции ядра Linux, по умолчанию имеет этот интерфейс развития. V4L2 начала выходить из версий 2.5.x ядра Linux.

  Спецификация V4L2 только определяет общие элементы API (API общих элементов), формат изображения (форматы изображений), метод ввода / вывода (вход / выход), драйвер ядра Linux также определяет последовательность обработки видеоинформации интерфейса (интерфейсы), эти интерфейсы:

  Video Capture Interface --Video Capture Interface;

  Выход видео интерфейс - Выходной видеосигнал Интерфейс;

  Video Overlay / Preview интерфейсы --Video Overlay Interface;

  Видеовыход интерфейсы охватывают --Video Output Overlay интерфейс;

  Кодек Интерфейс --Codec интерфейс.

Во-вторых, применение принципа захвата видео по V4L2

  V4L2 поддержка память отображается режим (ММАП) и режим прямого чтения (чтение) для сбора данных, бывшие генеральный для непрерывного захвата видеоданных, которые часто используются для сбора данных о неподвижных изображениях, видео захвата статьи фокусируются на режиме отображаемой памяти.

  С помощью данных интерфейсов приложений V4L2 захвата видео пятиступенчатой:

  Во-первых, открыть видеофайл устройство выполняет захват видео инициализации параметров, окно захвата видео предоставленный интерфейс V4L2 собранных точек размера и формата;

  Затем примените ряд буфера видео захвата кадра и отображение буфера кадров из пространства ядра в пространство пользователя, чтобы облегчить / обработанные данные видео приложения для чтения;

  В-третьих, применение к входным видеосигналом захвата кадра буфера очереди, и захвата видео запуска;

  В-четвертых, привод начать сбор, применение видеоданных, принятых из очереди выходного буфера кадра видео захвата, после обработки, видео захвата кадров буфера обратно в очередь ввода, цикла, используемого для захвата видеоданных;

  В-пятых, остановить захват видео.

 1. Захват видео Initialize

  В Linux камера сопоставлен файл устройства аппаратного «/ Dev / video0», откройте файл открыт функцию устройства, в котором дескриптор файла получается fd_v4l2, то этот параметр файла инициализации дескриптора.

  Окно параметров приобретения (1) предоставляется видео

  Окно Acquisition предусмотрено установить область захвата видео в тире устройства камеры. Основная структура v4l2_crop назначения, v4l2_crop v4l2_buffer_type образована типа перечисленного типа и типа структуры v4l2_rect с, чтобы описать тип и размер окна захвата видео. тип установлен как тип захвата видео V4L2_BUF_TYPE_VIDEO_CAPTURE. с представляет собой структуру, размер окна сбора, и ее члены в левом верхнем углу, соответственно по оси абсцисс и ординат представляет видео область захвата старт, ширина и высота представляют собой ширину и высоту захвата изображения. После выполнения задания, установите fd_v4l2 функции IOCTL с помощью этой структуры.

  v4l2_crop структура {перечисление типа v4l2_buf_type;

  v4l2_rect структура с;

  };

  (2) Установите видео формат и размер точечной точки

  Основная структура v4l2_format назначения, и который состоит из FMT консорциума типа, для описания текущего формата поведения видео и данных оборудования.

  Назначена типа типа V4L2_BUF_TYPE_VIDEO_CAPTURE захвата видео, означает, что определение типа потока буфера захвата видео. В FMT, структура пикс типа v4l2_pix_format является графическим форматом. Пикс должен быть установлен в нескольких переменных, PixelFormat представляет собой формат захвата, к V4L2_PIX_FMT_YUV420, ширина, высота представление ширины изображения, высоту, байты, пространство для хранения sizeimage занимают изображения, показывающая размер в байтах ; BytesPerLine количество байтов в строке. После выполнения задания, с помощью функции IOCTL установить fd_ v4l2 этой структурой.

  структура v4l2_format

  {Перечисление типа v4l2_buf_type;

  союз

  {Структура v4l2_pix_format пикс; // V4L2_BUF_TYPE_VIDEO_CAPTURE

  структура v4l2_window выиграть; // V4L2_BUF_TYPE_VIDEO_OVERLAY

  __u8 raw_data [200]; // определяемые пользователем

  } FMT;

  };

  (3) установка частоты кадров видео захвата

  Структура V4l2_streamparm атрибутов видеопотока будет описано, который состоит из типа и Парма Содружества. типа выше, поскольку выборы V4L2_BUF_TYPE_VIDEO_CAPTURE, поэтому только установить тип структуры v412_capture может захватить PARM. Отличающееся тем, что v4l2_fract структура типа timeperframe представлен средний процент каждого временного кадра, числитель и знаменатель на элементы вместе определяют продолжительность числитель / знаменатель; capturemode и указанный режим регистрации, приобретение высококачественных изображений равна 1, общее Он устанавливается в 0. После выполнения задания, с помощью функции IOCTL установить fd_ v4l2 этой структурой.

  структура v4l2_streamparm

  {Перечисление типа v4l2_buf_type;

  союз

  {Структура захвата v4l2_captureparm;

  структура выходного v4l2_outputparm;

  __u8 raw_data [200]; /* определяемые пользователем */

  } PARM;

  };

  2. Применение и видеокадры захвата буфер при условии

  После завершения инициализации рано, только чтобы решить проблему размера и формат видеоданных, и сбор данных видеокадра требует непрерывного способа решить очередь буфера кадров, то есть драйвер, чтобы применить несколько буферов кадров в памяти для хранения видеоданных.

  Применение по интерфейсу метод (VIDIOC_REQBUFS) API обеспечивает множество видеоданных буфера кадра приложений, буфер кадра, как правило, количество приложений не менее трех, каждый из которых хранит буфер данных видеокадров, буфер кадра в ядре пространство.

  Приложение запрашивает длину на адрес буфера кадра и смещение в пространстве ядра метода запроса интерфейсы (VIDIOC_QUERYBUF) API при условии.

  Приложения с помощью метода отображения памяти (ТСМ), будут применяться к пространству ядра буфера кадра в адресном пространство пользователя отображаются адрес, так что он может обрабатывать данные непосредственно в буфер кадра.

  (1) в буфере кадра входного видеосигнала очереди, и запуск захвата видео

  Во время обработки видео драйвера, определяет две очереди: видео входной очередь захвата (входящие очереди) видео захват и вывод очередь (исходящие очереди), бывший приводятся для хранения видеоданного ожидания очереди, которая водитель поставила видеоданные в очереди. Как показано на фиг.

  Применение требует буфера кадров для ввода массового обслуживания (VIDIOC_QBUF) захвата видео и видео захвата может быть запущена.

  (2) циклические, непрерывные данные видео собраны

  После запуска драйвера захвата видео, чтобы начать сбор данных, собранные данные со входом захвата видео в очередь первого буфера кадра, система сбор данных завершен, т.е. первого буфер кадра становится полными данными кадра после того, как водитель перемещает очередь вывода буфера кадров видео захвата, ждет приложения удаляются из очереди вывода. Затем водитель следующего кадр сбора данных, второй в буфер кадра, тот же кадр после следующего буфера кадра переполняется данные, он помещается в видеозахвате выходной очереди.

  Применение удаляется из выходного буфера кадра очереди захвата видео, содержащей видеоданные, обработки видеоданных в буфере кадра, такие как память или сжатая.

  Наконец, приложение будет обрабатывать полный захват видеоданных буфера кадра обратно в очередь ввода, так что цикл может быть получен, как показано на фиг.

На фигуре 1 вход видео захвата и вывода массового обслуживания

(3) наконец, остановить приобретение, освободить буфер кадра памяти

  3. Программа захвата видео потока и связанные с API V4L2

  V4L2 устройство захвата видео работает, по существу, в соответствии с открытым видео, видео формат предусмотрен, запустить процесс, петля данных видео захвата видео, остановить захват видео, видео техника близко, IOCTL конкретной операции достигается за счет других функций. Общая процедура выглядит следующим образом:

  (1) Открыть V оборудование. INT FD = открыт ( "/ DEV / video0", O_RDWR);

  (2) возможность запрашивать видеооборудование, например, является ли входной видео или аудио входа и выхода. IOCTL (fd_v4l, VIDIOC_QUERYCAP, и крышка)

  (3) настройка параметров захвата видео

  Установка формата видеосигнала, в том числе стандартные PAL / NTSC, используя IOCTL (fd_v4l, VIDIOC_S_STD, & std_id)

  Окно захвата Sized видеоизображения с помощью IOCTL (fd_v4l, VIDIOC_S_CROP, и урожай)

  При условии, видео формат кадра, формат кадра, включая точки, ширину и высоту, используя IOCTL (fd_v4l, VIDIOC_S_FMT, & FMT)

  Установка частоты кадров видео, используя IOCTL (fd_v4l, VIDIOC_S_PARM, & PARM)

  Видео с возможностью вращения с помощью IOCTL (fd_v4l, VIDIOC_S_CTRL, и Ctrl)

  (4) применяются к буферу потока видеоданного привода кадра

  Запрос / применение нескольких буферов кадров, как правило, меньше, чем 3, с использованием IOCTL (fd_v4l, VIDIOC_REQBUFS, и REQ)

  Запрос буфер кадра в длине пространства ядра и смещения IOCTL (fd_v4l, VIDIOC_QUERYBUF, & ЬиЙ)

  (5) путем применения отображения памяти, отображение буфера кадра адресного пространства для пользователя, так что операция может быть собрана непосредственно к раме, без необходимости копировать.

  буферы [I] .start = MMAP (NULL, буферы [I] .length, PROT_READ | PROT_WRITE, MAP_SHARED, fd_v4l, буферы [I] .offset);

  (6) Применение в буфер кадра захвата видео во все выходные очереди для хранения сбора данных. IOCTL (fd_v4l, VIDIOC_QBUF, & ЬиЕ)

  (7) начинает видео сбора данных потока. IOCTL (fd_v4l, VIDIOC_STREAMON, и тип)

  (8) вождения собранных данных в видеокадра буфер входной очереди, каркасные буфера в память после вывода видео захвата очереди.

  (9) удалить буфер кадра приложения уже содержит данные, собранные из очереди вывода видео захвата. IOCTL (fd_v4l, VIDIOC_DQBUF, & ЬиЙ), приложение обрабатывает данные буфера кадра сырого видео.

  (10) После обработки буфера кадров в очереди ввода приложения снова, так что они могут быть переработаны для сбора данных. IOCTL (fd_v4l, VIDIOC_QBUF, & ЬиЕ)

  Повторяя вышеописанные шаги 8-10, пока она не прекратит сбор данных.

  (11) Остановка видео коллекции. IOCTL (fd_v4l, VIDIOC_STREAMOFF, и тип)

  (12) применения освободить видеокадр буфер Unmap, недалеко V Оборудование близкого (fd_v4l).

  Выше поток программы, причем устройство содержит логику захвата видео последовательных данные видео. На практике они часто вынуждены работать, чтобы присоединиться к обработке видеоданных (например, кодирование сжатия), в противном случае, объем данных видеопоток достаточно велика, она требует много места для хранения и пропускной способности передачи.

  Процесс, описанный выше, каждый кадр имеет соответствующий переменный флаг состояния буфера, в котором каждый бит представляет состояние

  V4L2_BUF_FLAG_UNMAPPED 0b0000

  V4L2_BUF_FLAG_MAPPED 0b0001

  V4L2_BUF_FLAG_ENQUEUED 0b0010

  V4L2_BUF_FLAG_DONE 0b0100

  Преобразование буфера, как показано на фиг.

флаг состояния буфера преобразования фиг.2 фиг

рекомендация

отwww.cnblogs.com/yangjiquan/p/11369170.html
рекомендация