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

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

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

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

4.1. VPU ARM Mali-V61

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

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

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

Элемент

Назначение

omxh264dec

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

omxh264enc

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

omxh265dec

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

omxh265enc

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

omxmjpegenc

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

4.1.2. DMA-буферы

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

  • omxh264enc;

  • omxh265enc;

  • omxmjpegenc.

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

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

Имя поля

Тип поля

Описание

fd_list

GValue

Список GValue, каждый из которых содержит int с дескриптором буфера

buffer_size

guint

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

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

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

Кодирование 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 ! 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.2. ISP Felix v2505

TBD