Поддержка аппаратных блоков в GStreamer
GStreamer поддерживает следующие аппаратные блоки MCom-03:
VPU Mali-V61 (Video Processing Unit, видеопроцессор);
ISP Felix v2505 (Image Signal Processor, процессор обработки изображений);
GPU PowerVR Graphics Series8XE (Graphics Processing Unit, графический ускоритель).
Свойства элементов
Просмотреть все доступные свойства элементов 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>' ! ...
VPU Mali-V61
Обзор поддержки
Кодирование и декодирование видео и изображений с использованием VPU поддерживается плагином gst-omx для пакета GStreamer. Организация gst-omx такова, что через gst-inspect-1.0 могут быть выведены свойства, которые не поддерживаются реализацией OpenMAX на базе VPU в MCom-03. Перечень поддерживаемых элементов плагина и их свойств приведён в данном разделе.
Элемент |
Назначение |
---|---|
omxh264dec |
Декодирование видео, сжатого кодеком H.264 |
omxh264enc |
Кодирование видео с использованием кодека H.264 |
omxh265dec |
Декодирование видео, сжатого кодеком H.265 (HEVC) |
omxh265enc |
Кодирование видео с использованием кодека H.265 (HEVC) |
omxmjpegdec |
Декодирование видео в формате MJPEG и изображений в формате JPEG |
omxmjpegenc |
Кодирование видео в формате MJPEG и изображений в формате JPEG |
Общие свойства кодирующих элементов
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
- Дополнительно:
Значение в градусах.
Свойства элементов omxh264enc и omxh265enc
b-frames
— количество B-кадров перед каждым P-кадром
- Тип:
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} \right \rangle \right \rangle\]Размер GOP вычисляется по формуле:
\[k \times (i + 1) + 1\]Обозначения: \(I\) — IDR, \(B_{1}, ..., B_{i}\) — B-кадры, \(i\) — значение свойства
b-frames
, \(P_{1}, ..., P_{k}\) — 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
— количество P-кадров между двумя последовательными 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. Значение в бит/с.
max-qp
— максимальное значение QP для режима постоянного битрейта (CBR)
- Тип:
guint
- Значение по умолчанию:
255
- Возможные значения:
0 - 255
- Дополнительно:
Позволяет установить минимально допустимое качество.
min-qp
— минимальное значение QP для режима постоянного битрейта (CBR)
- Тип:
guint
- Значение по умолчанию:
0
- Возможные значения:
0 - 255
- Дополнительно:
Позволяет установить максимально допустимое качество.
Свойства элемента omxh264enc
sps-id
— идентификатор SPS блока
- Тип:
guint
- Значение по умолчанию:
1
- Возможные значения:
0 - 31
- Дополнительно:
Переопределяются идентификаторы SPS блоков и ссылки из PPS блоков. Установка идентификатора может потребоваться для соответствия ограничениям при трансляции видеопотока по сети.
Свойства элемента omxmjpegenc
qfactor
— качество сжатия кадров
- Тип:
guint
- Значение по умолчанию:
0
- Возможные значения:
0 - 100
- Дополнительно:
1 - низкое качество, маленький размер; 100 - высокое качество, большой размер. Для MCom-03 значение компонента по умолчанию (0) эквивалентно 75.
DMA-буферы
Для ускорения обработки видео в конвейерах GStreamer могут быть использованы DMA-буферы
(экспортируются модулем dmabuf_exporter
).
DMA-буферы поддерживают следующие элементы gst-omx:
omxh264enc;
omxh265enc;
omxmjpegenc.
Для этого вышестоящий (upstream) элемент конвейера должен отправить запрос типа
GST_QUERY_CUSTOM
, содержащий структуру dmabuf_query
. Содержимое структуры описано в таблице.
Имя поля |
Тип поля |
Описание |
---|---|---|
fd_list |
|
Массив |
buffer_size |
|
Размер одного DMA-буфера в байтах |
При получении и успешной обработке запроса элементом gst-omx будут импортированы DMA-буферы и
функция gst_pad_peer_query()
вернёт TRUE
. В противном случае функция вернёт FALSE
и
элемент gst-omx самостоятельно выделит буферы для копирования данных.
Альтернативный способ передачи DMA-буферов кодирующим элементам — использование свойств
dmabuf-fd-list
и dmabuf-size
.
Примеры запуска
Кодирование 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
Декодирование MJPEG:
gst-launch-1.0 filesrc location=/tmp/input.mjpeg ! jpegparse ! omxmjpegdec ! \
filesink location=/tmp/output.yuv
ISP Felix v2505
Обзор поддержки
Захват и обработка видео с сенсора изображения с использованием ISP поддерживается плагином gst-felix для пакета GStreamer. Перечень поддерживаемых элементов плагина приведён в таблице.
Элемент |
Назначение |
---|---|
felixsrc |
Захват видео с видеосенсора, один источник |
DMA-буферы
Элементы gst-felix используют DMA-буферы (выделяют с помощью модуля dmabuf_exporter
), если
задана опция -use_dmabuf
. Для поддержки элементов gst-omx, элементы gst-felix возвращают
информацию о DMA-буферах в структуре dmabuf_query
.
Свойства
Для вывода свойств элементов Таблица 3 использовать gst-inspect-1.0, например, для просмотра свойств felixsrc:
gst-inspect-1.0 felixsrc
Совместимые модули сенсоров
Список видеомодулей, поддерживаемых ISP Felix:
Raspberry Pi camera module V1 совместимые:
Примечание
Сравнение возможностей сенсоров и модулей камеры RPi перечислено на странице Raspberry Pi Camera: Comparison of High Quality Camera with Camera Module V2.
В зависимости от используемой платы-носителя максимальный видеорежим сенсоров может быть ограничен. Описание разъемов подключения сенсоров на поддерживаемых платах-носителях содержится в таблице Расположение разъемов подключения сенсоров на платах-носителях.
Модуль |
CSI0 |
CSI1 |
---|---|---|
ROCK Pi N10 |
CAM 15-pin 2 лейна |
— |
ELV-SMARC-CB r1.0 |
XS6 15-pin 2 лейна |
XS7 22-pin 4 лейна |
ELV-SMARC-CB r2.10.3, r3.2.1 |
XS12 22-pin 2 лейна |
XS13 22-pin 4 лейна |
Конфигурационные файлы поддержки модулей находятся в директории /etc/felix
на файловой системе
устройства.
Примеры запуска
Общий вид команды запуска захвата видео с выводом на дисплей:
gst-launch-1.0 felixsrc setup-file=<setup-file> sensor=<sensor> sensor-mode=<sensor-mode> \
exposure-auto=true awb-enable=true awb-algorithm=pid awb-mode=high-lum ! \
queue max-size-buffers=1 ! video/x-raw,format=BGRx ! kmssink driver-name=mali-dp
Общий вид команды запуска потоковой передачи видео по протоколу RTSP:
gst-rtsp-test-launch "felixsrc setup-file=<setup-file> sensor=<sensor> sensor-mode=<sensor-mode> \
alloc-buffers=10 buf-mode=query exposure-auto=true awb-enable=true awb-algorithm=pid \
awb-mode=high-lum ! queue max-size-buffers=1 ! video/x-raw,format=NV12 ! \
omxh264enc control-rate=constant target-bitrate=10000000 ! rtph264pay name=pay0 pt=96"
Примечание
Параметр sensor-mode
должен соответствовать разрешению устройства видеовывода. Для вывода
доступных режимов устройства видеовывода можно воспользоваться командой modetest -M mali-dp -c
.
Для принудительного масштабирования захватываемого видео под устройство видеовывода можно
задать разрешение видеопотока для вывода, например: video/x-raw,format=BGRx,width=1920,height=1080
.
Для вывода доступных модулей сенсоров и их режимов sensor-mode
можно воспользоваться утилитой
felix-sensor-test
.
Перечень возможных значений параметров setup-file
и sensor
в зависимости от используемого
сенсора приведён в таблице:
Сенсоры |
Параметр |
Параметр |
---|---|---|
RPi Camera (B) |
/etc/felix/ov5647/ov5647-arducam.cfg |
OV5647_0, OV5647_1 |
Arducam 5MP OV5647 Camera Module |
/etc/felix/ov5647/ov5647-arducam.cfg |
OV5647_0, OV5647_1 |
Raspberry Pi camera module V2 |
/etc/felix/imx219/imx219.cfg |
IMX219_0, IMX219_1 |
Arducam 12MP IMX477 UC-517 |
/etc/felix/imx477/imx477.cfg |
IMX477_0, IMX477_1 |
Vision Components VC MIPI IMX335 |
/etc/felix/imx335/imx335.cfg |
IMX335 |
Примечание
Если в параметре sensor
отсутствует номер интерфейса, то конфигурация применима только к
интерфейсу CSI0.
Примеры запуска для плат с модулем ELV-MC03-SMARC r1.1
Захват видео разрешением 1080p30 с видеомодуля Raspberry Pi camera module V2 на модуле ROCK Pi N10 с выводом на HDMI-дисплей:
gst-launch-1.0 felixsrc setup-file=/etc/felix/imx219/imx219.cfg sensor=IMX219_0 sensor-mode=2 \
exposure-auto=true awb-enable=true awb-algorithm=pid awb-mode=high-lum ! \
queue max-size-buffers=1 ! video/x-raw,format=BGRx ! kmssink driver-name=mali-dp
Потоковая передача видео по протоколу RTSP с Arducam 5MP OV5647 Camera Module на модуле ELV-SMARC-CB r2.10.3 с подключенным видеосенсором к разъему CSI1:
gst-rtsp-test-launch "felixsrc setup-file=/etc/felix/ov5647/ov5647-arducam.cfg sensor=OV5647_1 \
alloc-buffers=10 buf-mode=query exposure-auto=true awb-enable=true awb-algorithm=pid \
awb-mode=high-lum ! 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-адрес модуля):
ffplay rtsp://<camera-address>:8554/test
GPU PowerVR Graphics Series8XE
В дистрибутиве Buildroot GStreamer собирается с поддержкой плагинов OpenGL. Для запуска конвейеров с OpenGL-элементами требуется предварительный запуск Weston, подробнее см. Поддержка Wayland. Была проверена работа следующих стандартных элементов:
glcolorconvert
glcolorscale
glshader
gltransformation
glvideoflip
Пример конвейера для понижения разрешения видеопотока:
gst-launch-1.0 videotestsrc ! \
video/x-raw,width=1920,height=1080,format=RGBA ! \
glupload ! glcolorscale ! gldownload ! video/x-raw,width=640,height=360 ! \
fpsdisplaysink -v text-overlay=false sync=false video-sink=fakesink
Также возможна одновременная работа элементов с поддержкой GPU и других аппаратных блоков, например:
gst-launch-1.0 felixsrc setup-file=/etc/felix/ov5647/ov5647-arducam.cfg \
sensor=OV5647_0 context=0 ! video/x-raw,format=BGR ! glupload ! \
glcolorconvert ! gldownload ! video/x-raw,format=BGRA ! \
fpsdisplaysink -v text-overlay=false sync=false video-sink=fakesink
Примеры конвейеров с использованием других элементов плагина GstOpengl приведены в официальной документации GStreamer.