I receive QVideoFrames from webcam, and they contain image data in YUV format (QVideoFrame::Format_YUV420P). How can I convert one
I found a solution that is built into Qt5, but UNSUPPORTED BY Qt.
Here is how to go about:
QT += multimedia-private into your qmake .pro file#include "private/qvideoframe_p.h" into your code to make the function available.QImage qt_imageFromVideoFrame(const QVideoFrame &frame);QVideoFrame to a temporay QImage and then create the output QVideoFrame from that image.Here is my example usage:
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;
}
Again, the warning copied from the header reads as follows:
// // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. //
This does not matter in my project since it is a personal toy product. If it ever gets serious I will just track down the implementation of that function and copy it into my project or something.