Почему конвейер gstreamer дает сбой при использовании формата v4l2src в качестве BGR и io-mode в качестве dmabuf? - PullRequest
0 голосов
/ 05 декабря 2018

Я использую gstreamer версии 1.8.3 по убунуту 16.04 LTS.Я пытаюсь запустить конвейер, используя gst-launch-1.0 со следующей командой на терминале (которая транслирует видео с веб-камеры на моем ноутбуке) Команда:

gst-launch-1.0 -v v4l2src io-mode=4 ! video/x-raw,format=BGR ! videoconvert ! autovideosink --gst-debug=2

И я получаю сообщения отладки

0: 00: 00.682056977 4806 0x1c624a0 ОШИБКА fdmemory gstfdmemory.c: 114: gst_fd_mem_map: 0x1c5d5f0: fd 20: mmap не удалось: недопустимый аргумент 0: 00: 00.682092724M0: 68MM: 068M0: 256: 0: 0 680: me.мем 0x1c5d5f0: подклассу карта не удалось 0: 00: +00,682124299 4806 0x1c624a0 ОШИБКА fdmemory gstfdmemory.c: 114: gst_fd_mem_map: 0x1c5d5f0: Fd 20: MMAP не удалось: недопустимый аргумент 0: 00: +00,682138286 4806 0x1c624a0 ОШИБКА GST_MEMORY gstmemory.c: 324: gst_memory_map:mem 0x1c5d5f0: карта подкласса завершилась неудачно 0: 00: 00.682152551 4806 0x1c624a0 ОШИБКА по умолчанию video-frame.c: 161: gst_video_frame_map_id: не удалось сопоставить плоскость видеокадра 0 0: 00.682171269 4806 0x1c624a0: файл_обозревателя: видеоизображение_объекта: видеофайл_объекта_объекта: видеофайл_объекта_объекта: получен неверный видеобуфер ПРЕДУПРЕЖДЕНИЕ: от элемента / GstPipeстрока: pipe0 / GstVideoConvert: videoconvert0: внутренняя ошибка GStreamer: код не реализован.Пожалуйста, отправьте сообщение об ошибке на http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer. Дополнительная информация отладки: gstvideofilter.c (292): gst_video_filter_transform (): / GstPipeline: pipeline0 / GstVideoConvert: videoconvert0: получен недопустимый буфер видео "

Нотот же конвейер работает, если я изменяю формат = YUY2. Рабочая команда:

gst-launch-1.0 -v v4l2src io-mode=4 ! video/x-raw,format=YUY2 ! videoconvert ! autovideosink --gst-debug=2

Из сообщений отладки я обнаружил, что mmap не работает при использовании формата BGR и dmabuf. * ​​1015 *

Я подозревал размерданных в mmap. В случае BGR это было 2,7 МБ в mmap, а в случае YUY2 это было 1,8 МБ для буфера одного кадра. Поэтому я жестко записал размер BGR в 1,8 МБ непосредственно перед выполнением mmap. Затем mmap не выдавал никаких ошибок.но очевидно, что конвейер прервался в какой-то другой точке, так как это сделает данные недействительными.

Может ли кто-нибудь помочь мне в этом вопросе? Я хочу построить конвейер с форматом BGR в качестве вывода из v4l2src, и он должен использовать dmabuf в качестве io-режим.

...