v4l2 пример захвата видео - PullRequest
       33

v4l2 пример захвата видео

4 голосов
/ 26 февраля 2012

это мой первый пост здесь, и я надеюсь, что смогу найти некоторую помощь

Я работаю над встроенным linux на плате samsung ok6410 и камере ov9650 cmos

Мне нужно сделать видеозаписьи сохранить его на SD-карте

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

Есть флаг, который, когда поднят, захват продолжается в течение 10 секунд, затем останавливается.Видео сохраняется на SD-карте должно содержать 10 секунд до поднятия флага и 10 секунд после поднятия.

Я читал пример захвата на официальном сайте спецификаций API v4l2 здесь

http://free -electrons.com / kerneldoc / latest / video4linux / API.html

но есть некоторые моменты, которые я не могу понять или не знаю, правильно ли я понимаю

  1. В этом примере имеется 4 буфера кадров, каждый буфер может содержать один кадр.Это правильно?

  2. Существует переменная (frame_count), которая инициализирована на 70, означает ли это, что после завершения этой программы у меня будет видео, содержащее 70 кадров?

  3. Что делают fns (основной цикл) и (рамка чтения)?Я знаю, что они должны делать, но не могу понять написанный код, циклы ... и т.д.

  4. Как я могу настроить fps в этом коде?или я должен записать значение в регистры камеры?

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

  6. Можно ли записать эти необработанные данные из буфера в файл .yuv?Я нашел программное обеспечение, которое может воспроизводить видео этого формата.

  7. Можно ли использовать циклические буферы вместо линейных буферов для хранения захваченного видео?

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

заранее спасибо

1 Ответ

6 голосов
/ 07 марта 2012

Страница, на которую вы ссылаетесь, возвращает 404, но если вы ищете документацию, вы должны проверить это https://linuxtv.org/downloads/v4l-dvb-apis/, в частности, проверить пример , который является хорошим началом указать, что вы хотите.

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

  1. 4-кадровые буферы используются для двойной буферизации, то есть вы удаляете кадр из очереди и работаете с ним, а остальные заполняются видеовходом
  2. Если это так, как в примере, который я связал, нет, он просто захватывает 70 кадров с входа и затем выходит.
  3. read_frame удаляет кадр из буфера, чтобы вы могли работать с ним, и повторно добавляет его в очередь, когда закончите.
  4. чтобы настроить fps, вам нужно вывести драйверы из очереди и перезапустить кадры, ничего не делая. Изменение fps выполняется путем пропуска кадров.
  5. обычно говорят, это зависит от вашего драйвера и вашего кодировщика. Вам нужно найти видеоформат (например, V4L2_PIX_FMT_YUYV), который поддерживается как драйвером, так и кодером. Если он не существует, вам нужно написать собственную процедуру преобразования цветового пространства.
  6. Конечно! Я часто так делаю.
  7. Я не понимаю вопроса.
...