Конвертировать необработанный буфер v4l2 в QVideoframe в qt

Я получу необработанные видеоданные из драйвера V4L2 с помощью VIDIOC_DQBUF, я хотел визуализировать этот кадр в qt, используя QVideoFrame(который создает видеокадр) и QLabel/QPaint(для рендеринга видеокадра).

QVideoFrame::QVideoFrame(QAbstractVideoBuffer * buffer, const QSize &size, формат QVideoFrame::PixelFormat) Создает видеокадр из буфера с заданным форматом пикселя и размером в пикселях. Qvideoframe от Qt

На данный момент я использую QImage для рендеринга RGB24, а QImage поддерживает единственный формат RGB. Однако необработанный видеокадр, полученный от VIDIOC_DQBUF, имеет разные цветовые форматы, и QVideoFrame поддерживает большинство из них.

Запросы:

  1. Как использовать QVideoFrame::QVideoFrame(буфер QAbstractVideoBuffer *, const QSize &size, формат QVideoFrame::PixelFormat) для буфера v4l2?

  2. Как я могу использовать функцию map(), bits() и mappedBytes(), чтобы я мог создать QVideoFrame для заданных необработанных видеоданных?

  3. Как я могу использовать QPaint/QLabel для рендеринга QVideoFrame?

С уважением, Кулакрни

0 ответов

Давайте обратим порядок.

Как я могу использовать QPaint/QLabel для рендеринга QVideoFrame?

Вы не можете. Вам нужно использоватьQAbstractVideoSurface()производный класс. В QML этоVideoOutput. Если вам нужно одно изображение, тогдаQVideoFrame не подходит для использования в QPaint/QLabel.

Как я могу использовать функции map(), bits() и mappedBytes(), чтобы получить QVideoFrame, созданный для заданных необработанных видеоданных?

Эти функции являются вашим интерфейсом к QAbstractVideoSurface. Это зависит от того, как вы хотите хранить буфер VL4. Вы его копируете / переводите или напрямую сопоставляете; то есть проблемы владения, которые пытается решить этот API.

Как использовать QVideoFrame::QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, QVideoFrame::PixelFormat format) для буфера v4l2

Вам нужно подкласса QAbstractVideoBuffer копируя / переводя данные и сохраняя их вместе с классом, или предоставляя ссылку, если вы используете какую-либо нулевую копию.


По умолчанию QML Camera а также QCamera найдет и использует /dev/videoXкоторый является устройством v4l, через GStreamer. Этот класс уже должен делать правильные вещи, предоставляяVideoOutput виджет.

См.: Обзор Qt Video

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