我将使用VIDIOC_DQBUF从V4L2驱动程序中获取原始视频数据,我想使用QVideoFrame(用于构建视频帧)和QLabel / QPaint(用于渲染视频帧)在qt中渲染此帧。
QVideoFrame :: QVideoFrame(QAbstractVideoBuffer * buffer,const QSize&size,QVideoFrame :: PixelFormat format)从缓冲区构造视频帧,并具有给定的像素格式和大小(以像素为单位)。Qvideoframe from Qt
截至目前,我正在使用QImage渲染RGB24,并且QImage支持唯一的RGB格式。但是,从VIDIOC_DQBUF接收的原始视频帧具有不同的颜色格式,并且QVideoFrame支持其中的大多数。
查询:
如何为v4l2缓冲区使用QVideoFrame :: QVideoFrame(QAbstractVideoBuffer * buffer,const QSize&size,QVideoFrame :: PixelFormat格式?
我如何使用map(),bits()和mappingBytes()函数,以便可以为给定的原始视频数据构造QVideoFrame?
我如何使用QPaint / QLabel渲染QVideoFrame?
关于,Kulakrni
让顺序颠倒。
如何使用QPaint / QLabel渲染QVideoFrame?
您不能。您需要使用QAbstractVideoSurface()
派生类。在QML中,这是VideoOutput
。如果只需要一张图像,则QVideoFrame
不是用于QPaint / QLabel的正确类。
我如何使用map(),bits()和mappingBytes()函数,以便可以为给定的原始视频数据构造QVideoFrame?
这些功能是您与QAbstractVideoSurface
的接口。这取决于您要如何存储VL4缓冲区。您要复制/翻译它还是直接将其映射?那么该API会尝试解决所有权问题。
如何为v4l2缓冲区使用QVideoFrame :: QVideoFrame(QAbstractVideoBuffer * buffer,const QSize&size,QVideoFrame :: PixelFormat格式
[您需要通过复制/翻译数据并将其保存在类中来为QAbstractVideoBuffer
子类化,或者如果您使用某种零拷贝,则提供引用。