Конфигурация устройства v4l2loopback Маркер конца кадра

Моя установка заключается в том, что я записываю поток изображений с камеры, используя специальный драйвер (C++), который устанавливает устройство v4l2loopback и записывает в него необработанные данные изображения BGRA. Я установил устройство v4l2loopback с

struct v4l2_format v;
v.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
ioctl(m_v4l2_device.fd, VIDIOC_G_FMT, &v);
v.fmt.pix.width = resolution[0];
v.fmt.pix.height = resolution[1];
v.fmt.pix.pixelformat = V4L2_PIX_FMT_ABGR32;
v.fmt.pix.sizeimage = v.fmt.pix.width * v.fmt.pix.height * 4;
ioctl(m_v4l2_device.fd, VIDIOC_S_FMT, &v);

(Я упустил проверку ошибок для краткости) и установите частоту кадров, написав /sys/devices/virtual/video4linux/video22/format (советы по установке этого значения в структуре v4l2_format приветствуются).

Затем я записываю данные изображения на устройство v4l2loopback с

write(m_v4l2_device.fd, frame.data.data(), frame.data.size())

где m_v4l2_device.fd является файловым дескриптором устройства, а frame.data является std::vector<unsigned char> содержащий изображение.

Свойства устройства v4l2loopback, о которых сообщает v4l2-ctl:

> v4l2-ctl -d /dev/video_QX --all 
Driver Info (not using libv4l2):
  Driver name   : v4l2 loopback
  Card type     : Dummy video device (0x0001)
  Bus info      : platform:v4l2loopback-001
  Driver version: 4.9.59
  Capabilities  : 0x85208003
    Video Capture
    Video Output
    Video Memory-to-Memory
    Read/Write
    Streaming
    Extended Pix Format
    Device Capabilities
  Device Caps   : 0x85208003
    Video Capture
    Video Output
    Video Memory-to-Memory
    Read/Write
    Streaming
    Extended Pix Format
    Device Capabilities
Priority: 0
Video input : 0 (loopback: ok)
Video output: 0 (loopback in)
Format Video Capture:
  Width/Height      : 1024/768
  Pixel Format      : 'BGR4'
  Field             : None
  Bytes per Line    : 4096
  Size Image        : 3145728
  Colorspace        : sRGB
  Transfer Function : Default
  YCbCr/HSV Encoding: Default
  Quantization      : Default
  Flags             : 
Format Video Output:
  Width/Height      : 1024/768
  Pixel Format      : 'BGR4'
  Field             : None
  Bytes per Line    : 4096
  Size Image        : 3145728
  Colorspace        : sRGB
  Transfer Function : Default
  YCbCr/HSV Encoding: Default
  Quantization      : Default
  Flags             : 
Streaming Parameters Video Capture:
  Frames per second: 25.000 (25/1)
  Read buffers     : 8
Streaming Parameters Video Output:
  Frames per second: 25.000 (25/1)
  Write buffers    : 8

User Controls

                keep_format (bool)   : default=0 value=0
          sustain_framerate (bool)   : default=0 value=0
                    timeout (int)    : min=0 max=100000 step=1 default=0 value=0
           timeout_image_io (bool)   : default=0 value=0

Используя gstreamer с v4l2src, я могу транслировать видео с устройства в кадровый буфер, однако gstreamer настаивает на том, что исходный формат - BGRx, а не BGRA (оба, похоже, соответствуют пиксельному формату BGR4 в v4l2-ctl) и тратит время на его "преобразование". Поэтому вместо этого я хочу использовать v4l2-ctl для потоковой передачи данных непосредственно между устройством v4l2loopback и кадровым буфером. Тем не менее, когда я пытаюсь, первый кадр выглядит нормально, но потом я получаю много строк

<4096 != 3145728

Тестирование с записью одного кадра в файл дает

> v4l2-ctl -d /dev/video_QX --stream-mmap=3 --stream-count=1 --stream-to=/tmp/delme
<<<<<<<<<<<<<<<<<<<<<<<<<< 24.50 fps
<<<<<<<<<<<<<<<<<<<<<<<< 24.37 fps
<<<^C
> ls -lh /tmp/delme 
-rw-r--r-- 1 pi pi 177M des.  22 12:05 /tmp/delme

так что мне кажется, что причина моей проблемы в том, что --stream-count=1 Параметр, похоже, не оказывает влияния. Поскольку этот параметр работает для других устройств v4l2 (без обратной связи), я предполагаю, что мне не удалось установить какой-либо параметр где-либо при настройке устройства v4l2loopback. Может кто-нибудь сказать мне, какой параметр это может быть и как его установить? Спасибо!

0 ответов

Другие вопросы по тегам