4. Поддержка аппаратных блоков в GStreamer

GStreamer поддерживает следующие аппаратные блоки MCom-03:

  • VPU ARM Mali-V61 (Video Processing Unit, видеопроцессор);

  • ISP Felix v2505 (Image Signal Processor, процессор обработки изображений).

4.1. Свойства элементов

Просмотреть все доступные свойства элементов GStreamer можно командой:

gst-inspect-1.0 <element>

Например:

gst-inspect-1.0 omxh264enc

Установка свойства для элемента при использовании gst-launch-1.0 осуществляется различными способами в зависимости от типа свойства.

Для типов gint, guint и Enum:

... ! omxh264enc property=1 ! ...

Для целочисленных массивов (массивы GstValueArray типов gint и guint):

... ! omxh264enc property='<1,2,3>' ! ...

4.2. VPU ARM Mali-V61

4.2.1. Обзор поддержки

Кодирование и декодирование видео и изображений с использованием VPU поддерживается плагином gst-omx для пакета GStreamer. Организация gst-omx такова, что через gst-inspect-1.0 могут быть выведены свойства, которые не поддерживаются реализацией OpenMAX на базе VPU в MCom-03. Перечень поддерживаемых элементов плагина и их свойств приведён в данном разделе.

Таблица 4.1 Элементы GStreamer, поддерживаемые плагином gst-omx

Элемент

Назначение

omxh264dec

Декодирование видео, сжатого кодеком H.264

omxh264enc

Кодирование видео с использованием кодека H.264

omxh265dec

Декодирование видео, сжатого кодеком H.265 (HEVC)

omxh265enc

Кодирование видео с использованием кодека H.265 (HEVC)

omxmjpegenc

Кодирование видео в формате MJPEG и изображений в формате JPEG

4.2.2. Общие свойства кодирующих элементов

dmabuf-fd-list — список файловых дескрипторов DMA-буферов

Тип

GstValueArray of GValues of type "gint"

Дополнительно

При передаче DMA-буферов через свойства элемента обязательна одновременная установка свойств dmabuf-fd-list и dmabuf-size.


dmabuf-size — размер DMA-буферов

Тип

guint

Значение по умолчанию

0

Возможные значения

0 - 4294967295

Дополнительно

При передаче DMA-буферов через свойства элемента обязательна одновременная установка свойств dmabuf-fd-list и dmabuf-size.


mirroring — отражение входных кадров

Тип

Enum GstOMXVideoEncMirroring

Значение по умолчанию

0

Возможные значения
  • (0): none — выключить

  • (1): vertical — вертикальное отражение

  • (2): horizontal — горизонтальное отражение

  • (3): both — вертикальное и горизонтальное отражение


rotation — поворот входных кадров

Тип

guint

Значение по умолчанию

0

Возможные значения

0, 90, 180, 270

Дополнительно

Значение в градусах.

4.2.3. Свойства элементов omxh264enc и omxh265enc

b-frames — количество B-кадров

Тип

guint

Значение по умолчанию

4294967295

Возможные значения

0 - 4294967295

Дополнительно

Для MCom-03 допустимые значения 0-4 и 4294967295 (эквивалентно 0). Установка других значений приводит к зависанию конвейера. При использовании свойства GOP принимает следующий вид:

\[\left \langle I, \left \langle B_{1}, ...,B_{i}, P_{1} \right \rangle , ..., \left \langle B_{1}, ...,B_{i}, P_{k-i} \right \rangle \right \rangle\]

Размер GOP вычисляется по формуле:

\[(k - i) \times (i + 1) + 1\]

Обозначения: \(I\) — IDR, \(B_{1}, ..., B_{i}\) — B-кадры, \(i\) — значение свойства b-frames, \(P_{1}, ..., P_{k-i}\) — P-кадры, \(k\) — значение свойства interval-intraframes.


contol-rate — метод контроля битрейта

Тип

Enum GstOMXVideoEncControlRate

Значение по умолчанию

-1

Возможные значения
  • (0): disable — выключить, QP константен и устанавливается вручную

  • (2): constant — постоянный битрейт (CBR), QP изменяется автоматически, размер сжатых кадров константен

  • (-1): default — значение по умолчанию для компонента

Дополнительно

Для MCom-03 при установке значения по умолчанию control-rate=-1 контроль битрейта отключается (аналогично control-rate=0).


interval-intraframes — количество кадров между двумя последовательными I-кадрами

Тип

guint

Значение по умолчанию

4294967295

Возможные значения

0 - 4294967295

Дополнительно

Для MCom-03 значение компонента по умолчанию (4294967295) эквивалентно 29. При использовании B-кадров GOP рассчитывается по специальной формуле (см. описание свойства b-frames).


quant-b-frames — QP для B-кадров

Тип

guint

Значение по умолчанию

4294967295

Возможные значения

0 - 4294967295

Дополнительно

Для MCom-03 значение компонента по умолчанию (4294967295) эквивалентно 27.


quant-i-frames — QP для I-кадров

Тип

guint

Значение по умолчанию

4294967295

Возможные значения

0 - 4294967295

Дополнительно

Для MCom-03 значение компонента по умолчанию (4294967295) эквивалентно 27.


quant-p-frames — QP для P-кадров

Тип

guint

Значение по умолчанию

4294967295

Возможные значения

0 - 4294967295

Дополнительно

Для MCom-03 значение компонента по умолчанию (4294967295) эквивалентно 27.


target-bitrate — целевой битрейт

Тип

guint

Значение по умолчанию

4294967295

Возможные значения

0 - 4294967295

Дополнительно

Для MCom-03 значение компонента по умолчанию (4294967295) эквивалентно 64000. Значение в бит/с.

4.2.4. Свойства элемента omxmjpegenc

qfactor — качество сжатия кадров

Тип

guint

Значение по умолчанию

0

Возможные значения

0 - 100

Дополнительно

1 - низкое качество, маленький размер; 100 - высокое качество, большой размер. Для MCom-03 значение компонента по умолчанию (0) эквивалентно 75.

4.2.5. DMA-буферы

Для ускорения обработки видео в конвейерах GStreamer могут быть использованы DMA-буферы (экспортируются модулем dmabuf_exporter). DMA-буферы поддерживают следующие элементы gst-omx:

  • omxh264enc;

  • omxh265enc;

  • omxmjpegenc.

Для этого вышестоящий (upstream) элемент конвейера должен отправить запрос типа GST_QUERY_CUSTOM, содержащий структуру dmabuf_query. Содержимое структуры описано в таблице.

Таблица 4.2 Содержимое структуры dmabuf_query

Имя поля

Тип поля

Описание

fd_list

GValue

Массив GstValueArray значений GValue, каждый из которых содержит gint с дескриптором DMA-буфера

buffer_size

guint

Размер одного DMA-буфера в байтах

При получении и успешной обработке запроса элементом gst-omx будут импортированы DMA-буферы и функция gst_pad_peer_query() вернёт TRUE. В противном случае функция вернёт FALSE и элемент gst-omx самостоятельно выделит буферы для копирования данных.

Альтернативный способ передачи DMA-буферов кодирующим элементам — использование свойств dmabuf-fd-list и dmabuf-size.

4.2.6. Примеры запуска

Кодирование H.264 видео:

gst-launch-1.0 filesrc location=/tmp/input.yuv blocksize=3110400 ! \
  video/x-raw,format=I420,width=1920,height=1080,framerate=25/1 ! queue ! omxh264enc ! \
  filesink location=/tmp/output.h264

Декодирование H.264 видео:

gst-launch-1.0 filesrc location=/tmp/input.h264 ! h264parse ! omxh264dec ! \
  filesink location=/tmp/output.yuv

Транскодирование из H.264 в MJPEG:

gst-launch-1.0 filesrc location=/tmp/input.h264 ! h264parse ! omxh264dec ! omxmjpegenc ! \
  filesink location=/tmp/output.mjpeg

Транскодирование видео H.265 (HEVC):

gst-launch-1.0 filesrc location=/tmp/input.h265 ! h265parse ! omxh265dec ! omxh265enc ! \
  filesink location=/tmp/output.h265

4.3. ISP Felix v2505

4.3.1. Обзор поддержки

Захват и обработка видео с сенсора изображения с использованием ISP поддерживается плагином gst-felix для пакета GStreamer. Перечень поддерживаемых элементов плагина приведён в таблице.

Таблица 4.3 Элементы GStreamer, поддерживаемые плагином gst-felix

Элемент

Назначение

felixsrc

Захват видео с видеосенсора, один источник

4.3.2. DMA-буферы

Элементы gst-felix используют DMA-буферы (выделяют с помощью модуля dmabuf_exporter), если задана опция -use_dmabuf. Для поддержки элементов gst-omx, элементы gst-felix возвращают информацию о DMA-буферах в структуре dmabuf_query.

4.3.3. Свойства

Для вывода свойств элементов Таблица 4.3 использовать gst-inspect-1.0, например, для просмотра свойств felixsrc:

gst-inspect-1.0 felixsrc

4.3.4. Примеры запуска

Захват видео с видеомодуля Arducam OV5647 camera board на модуле ROCK Pi N10 с установленным модулем ELV-MC03-SMARC r1.1 с выводом на HDMI-дисплей:

gst-launch-1.0 felixsrc config-file=args-ov5647.txt context=0 awb-enable=1 ! \
  video/x-raw,format=BGRx ! kmssink driver-name=mali-dp

Конфигурационный файл args-ov5647.txt требуется предварительно создать и заполнить содержанием:

-sensorNumber 1
-use_dmabuf

-CT0_nFrames 30
-CT0_nBuffers 20
-CT0_nPreenqBuffers 1
-CT0_setupFile /etc/felix/ov5647/ov5647-arducam.cfg
-CT0_FPS 30
-CT0_sensor OV5647_0
-CT0_sensorMode 0
-CT0_AE 1
-CT0_WBC 2
-CT0_WBCCT 3

RTSP-стриминг видео с Arducam OV5647 на модуле ROCK Pi N10:

gst-rtsp-test-launch "felixsrc config-file=args-ov5647.txt context=0 awb-enable=1 ! \
  queue max-size-buffers=1 ! video/x-raw,format=NV12 ! \
  omxh264enc control-rate=constant target-bitrate=10000000 ! rtph264pay name=pay0 pt=96"

При вызове команды gst-rtsp-test-launch в консоль модуля будет выведено сообщение:

stream ready at rtsp://127.0.0.1:8554/test

Для приёма и вывода видео на ПК запустить ffplay (camera-address — IP-адрес модуля ROCK Pi N10):

ffplay rtsp://<camera-address>:8554/test