我从网络摄像头接收QVideoFrames,它们包含YUV格式的图像数据(QVideoFrame :: Format_YUV420P).如何使用QVideoFrame :: Format_ARGB32或QVideoFrame :: Format_RGBA32将一个这样的帧转换为一个?
只使用Qt5中的现有功能,我可以在不降低水平的情况下实现吗?
例:
QVideoFrame convertFormat(const QVideoFrame &inputframe, QVideoFrame::PixelFormat outputFormat)
{
// What comes here?
}
//Usage
QVideoFrame converted = convertFormat(mySourceFrame, QVideoFrame::Format_RGB32);
解决方法:
我找到了一个内置于Qt5的解决方案,但是不受Qt的支持.
以下是如何进行的:
>将QT = multimedia-private放入qmake .pro文件中
>将#include“private / qvideoframe_p.h”放入代码中以使该功能可用.
>您现在可以访问具有以下签名的函数:QImage qt_imageFromVideoFrame(const QVideoFrame& frame);
>使用该函数将QVideoFrame转换为临时QImage,然后从该图像创建输出QVideoFrame.
这是我的示例用法:
QVideoFrame convertFormat(const QVideoFrame &inputframe, QVideoFrame::PixelFormat outputFormat)
{
inputframe->map(QAbstractVideoBuffer::ReadOnly);
QImage tempImage=qt_imageFromVideoFrame(inputframe);
inputframe->unmap();
QVideoFrame outputFrame=QVideoFrame(tempImage);
return outputFrame;
}
同样,从标头复制的警告内容如下:
06001
这在我的项目中无关紧要,因为它是个人玩具产品.如果它变得严重我将只追踪该功能的实现并将其复制到我的项目或其他东西.