我将使用VIDIOC_DQBUF从V4L2驱动程序中获取原始视频数据,我想使用QVideoFrame(用于构造视频帧)和QLabel / QPaint(用于渲染视频帧)在qt中渲染此帧。
QVideoFrame :: QVideoFrame(QAbstractVideoBuffer * buffer,const QSize&size,QVideoFrame :: PixelFormat格式) 从缓冲区构造视频帧,并具有给定的像素格式和大小(以像素为单位)。 Qvideoframe from Qt
到目前为止,我正在使用QImage渲染RGB24,并且QImage支持唯一的RGB格式。但是,从VIDIOC_DQBUF接收的原始视频帧具有不同的颜色格式,而QVideoFrame支持其中的大多数。
查询:
如何对v4l2缓冲区使用QVideoFrame :: QVideoFrame(QAbstractVideoBuffer * buffer,const QSize&size,QVideoFrame :: PixelFormat格式)?
我如何使用map(),bits()和maptedBytes()函数,以便可以为给定的原始视频数据构造QVideoFrame?
如何使用QPaint / QLabel渲染QVideoFrame?
关于, 库拉克尼
答案 0 :(得分:0)
让顺序相反。
如何使用QPaint / QLabel渲染QVideoFrame?
您不能。您需要使用QAbstractVideoSurface()
派生类。在QML中,这是VideoOutput
。如果只需要一张图像,那么QVideoFrame
不是用于QPaint / QLabel的正确类。
我如何使用map(),bits()和MaptedBytes()函数,以便可以为给定的原始视频数据构造QVideoFrame?
这些功能是您与QAbstractVideoSurface
的接口。这取决于您要如何存储VL4缓冲区。您要复制/翻译它还是直接映射它?那么该API会尝试解决所有权问题。
如何对v4l2缓冲区使用QVideoFrame :: QVideoFrame(QAbstractVideoBuffer * buffer,const QSize&size,QVideoFrame :: PixelFormat格式)
您需要通过复制/转换数据并将其保留在类中来对QAbstractVideoBuffer
进行子类化;如果您使用某种零拷贝,则需要提供引用。
默认情况下,QML Camera
和QCamera
将通过GStreamer查找并使用{v1l} v4l设备。此类应该已经做正确的事情以提供/dev/videoX
小部件。