Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
|
The QVideoFrame class represents a frame of video data. More...
#include <qvideoframe.h>
Classes | |
struct | PaintOptions |
Public Types | |
enum | HandleType { NoHandle , RhiTextureHandle } |
Identifies the type of a video buffers handle. More... | |
enum | MapMode { NotMapped = 0x00 , ReadOnly = 0x01 , WriteOnly = 0x02 , ReadWrite = ReadOnly | WriteOnly } |
Enumerates how a video buffer's data is mapped to system memory. More... | |
Public Member Functions | |
QVideoFrame () | |
Constructs a null video frame. | |
QVideoFrame (const QVideoFrameFormat &format) | |
Constructs a video frame of the given pixel format. | |
QVideoFrame (const QImage &image) | |
Constructs a QVideoFrame from a QImage. | |
QVideoFrame (const QVideoFrame &other) | |
Constructs a shallow copy of other. | |
~QVideoFrame () | |
Destroys a video frame. | |
QVideoFrame (QVideoFrame &&other) noexcept=default | |
Constructs a QVideoFrame by moving from other. | |
void | swap (QVideoFrame &other) noexcept |
Swaps the current video frame with other. | |
QVideoFrame & | operator= (const QVideoFrame &other) |
Moves other into this QVideoFrame. | |
bool | operator== (const QVideoFrame &other) const |
bool | operator!= (const QVideoFrame &other) const |
bool | isValid () const |
Identifies whether a video frame is valid. | |
QVideoFrameFormat::PixelFormat | pixelFormat () const |
Returns the pixel format of this video frame. | |
QVideoFrameFormat | surfaceFormat () const |
Returns the surface format of this video frame. | |
QVideoFrame::HandleType | handleType () const |
Returns the type of a video frame's handle. | |
QSize | size () const |
Returns the dimensions of a video frame. | |
int | width () const |
Returns the width of a video frame. | |
int | height () const |
Returns the height of a video frame. | |
bool | isMapped () const |
Identifies if a video frame's contents are currently mapped to system memory. | |
bool | isReadable () const |
Identifies if the mapped contents of a video frame were read from the frame when it was mapped. | |
bool | isWritable () const |
Identifies if the mapped contents of a video frame will be persisted when the frame is unmapped. | |
QVideoFrame::MapMode | mapMode () const |
Returns the mode a video frame was mapped to system memory in. | |
bool | map (QVideoFrame::MapMode mode) |
Maps the contents of a video frame to system (CPU addressable) memory. | |
void | unmap () |
Releases the memory mapped by the map() function. | |
int | bytesPerLine (int plane) const |
Returns the number of bytes in a scan line of a plane. | |
uchar * | bits (int plane) |
Returns a pointer to the start of the frame data buffer for a plane. | |
const uchar * | bits (int plane) const |
Returns a pointer to the start of the frame data buffer for a plane. | |
int | mappedBytes (int plane) const |
Returns the number of bytes occupied by plane plane of the mapped frame data. | |
int | planeCount () const |
Returns the number of planes in the video frame. | |
qint64 | startTime () const |
Returns the presentation time (in microseconds) when the frame should be displayed. | |
void | setStartTime (qint64 time) |
Sets the presentation time (in microseconds) when the frame should initially be displayed. | |
qint64 | endTime () const |
Returns the presentation time (in microseconds) when a frame should stop being displayed. | |
void | setEndTime (qint64 time) |
Sets the presentation time (in microseconds) when a frame should stop being displayed. | |
void | setRotation (QtVideo::Rotation angle) |
Sets the angle the frame should be rotated clockwise before displaying. | |
QtVideo::Rotation | rotation () const |
Returns the angle the frame should be rotated clockwise before displaying. | |
void | setMirrored (bool) |
Sets the mirrored flag for the frame. | |
bool | mirrored () const |
Returns whether the frame should be mirrored before displaying. | |
QImage | toImage () const |
Based on the pixel format converts current video frame to image. | |
QString | subtitleText () const |
Returns the subtitle text that should be rendered together with this video frame. | |
void | setSubtitleText (const QString &text) |
Sets the subtitle text that should be rendered together with this video frame to text. | |
void | paint (QPainter *painter, const QRectF &rect, const PaintOptions &options) |
Uses a QPainter, {painter}, to render this QVideoFrame to rect. | |
QVideoFrame (QAbstractVideoBuffer *buffer, const QVideoFrameFormat &format) | |
QAbstractVideoBuffer * | videoBuffer () const |
Friends | |
class | QVideoFramePrivate |
The QVideoFrame class represents a frame of video data.
\inmodule QtMultimedia
A QVideoFrame encapsulates the pixel data of a video frame, and information about the frame.
Video frames can come from several places - decoded \l {QMediaPlayer}{media}, a \l {QCamera}{camera}, or generated programmatically. The way pixels are described in these frames can vary greatly, and some pixel formats offer greater compression opportunities at the expense of ease of use.
The pixel contents of a video frame can be mapped to memory using the map() function. After a successful call to map(), the video data can be accessed through various functions. Some of the YUV pixel formats provide the data in several planes. The planeCount() method will return the amount of planes that being used.
While mapped, the video data of each plane can accessed using the bits() function, which returns a pointer to a buffer. The size of this buffer is given by the mappedBytes() function, and the size of each line is given by bytesPerLine(). The return value of the handle() function may also be used to access frame data using the internal buffer's native APIs (for example - an OpenGL texture handle).
A video frame can also have timestamp information associated with it. These timestamps can be used to determine when to start and stop displaying the frame.
QVideoFrame objects can consume a significant amount of memory or system resources and should not be held for longer than required by the application.
Definition at line 26 of file qvideoframe.h.
Identifies the type of a video buffers handle.
\value NoHandle The buffer has no handle, its data can only be accessed by mapping the buffer. \value RhiTextureHandle The handle of the buffer is defined by The Qt Rendering Hardware Interface (RHI). RHI is Qt's internal graphics abstraction for 3D APIs, such as OpenGL, Vulkan, Metal, and Direct 3D.
Enumerator | |
---|---|
NoHandle | |
RhiTextureHandle |
Definition at line 30 of file qvideoframe.h.
enum QVideoFrame::MapMode |
Enumerates how a video buffer's data is mapped to system memory.
\value NotMapped The video buffer is not mapped to memory. \value ReadOnly The mapped memory is populated with data from the video buffer when mapped, but the content of the mapped memory may be discarded when unmapped. \value WriteOnly The mapped memory is uninitialized when mapped, but the possibly modified content will be used to populate the video buffer when unmapped. \value ReadWrite The mapped memory is populated with data from the video buffer, and the video buffer is repopulated with the content of the mapped memory when it is unmapped.
Enumerator | |
---|---|
NotMapped | |
ReadOnly | |
WriteOnly | |
ReadWrite |
Definition at line 36 of file qvideoframe.h.
QVideoFrame::QVideoFrame | ( | ) |
Constructs a null video frame.
Definition at line 67 of file qvideoframe.cpp.
QVideoFrame::QVideoFrame | ( | const QVideoFrameFormat & | format | ) |
Constructs a video frame of the given pixel format.
Definition at line 95 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, QVideoTextureHelper::TextureDescription::bytesForSize(), QByteArray::resize(), QVideoTextureHelper::TextureDescription::strideForWidth(), and QVideoTextureHelper::textureDescription().
|
explicit |
Constructs a QVideoFrame from a QImage.
The QImage pixels are copied into the QVideoFrame's memory buffer. The resulting frame has the same size as the QImage, but the number of bytes per line may differ.
If the QImage::Format matches one of the formats in QVideoFrameFormat::PixelFormat, the QVideoFrame will use that format without any pixel format conversion. Otherwise, the image is first converted to a supported (A)RGB format using QImage::convertedTo() with the Qt::AutoColor flag. This may incur a performance penalty.
If QImage::isNull() evaluates to true for the input QImage, the QVideoFrame will be invalid and QVideoFrameFormat::isValid() will return false.
Definition at line 131 of file qvideoframe.cpp.
References QVideoFrameFormat::pixelFormatFromImageFormat(), and Q_ASSERT.
|
default |
Constructs a shallow copy of other.
Since QVideoFrame is explicitly shared, these two instances will reflect the same frame.
|
default |
Destroys a video frame.
|
defaultnoexcept |
Constructs a QVideoFrame by moving from other.
QVideoFrame::QVideoFrame | ( | QAbstractVideoBuffer * | buffer, |
const QVideoFrameFormat & | format ) |
Constructs a video frame from a buffer with the given pixel format and size in pixels.
Definition at line 77 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer.
uchar * QVideoFrame::bits | ( | int | plane | ) |
Returns a pointer to the start of the frame data buffer for a plane.
This value is only valid while the frame data is \l {map()}{mapped}.
Changes made to data accessed via this pointer (when mapped with write access) are only guaranteed to have been persisted when unmap() is called and when the buffer has been mapped for writing.
Definition at line 544 of file qvideoframe.cpp.
References QAbstractVideoBuffer::MapData::data, QVideoFramePrivate::mapData, and QAbstractVideoBuffer::MapData::nPlanes.
Referenced by QSGVivanteVideoMaterial::vivanteMapping().
const uchar * QVideoFrame::bits | ( | int | plane | ) | const |
Returns a pointer to the start of the frame data buffer for a plane.
This value is only valid while the frame data is \l {map()}{mapped}.
If the buffer was not mapped with read access, the contents of this buffer will initially be uninitialized.
Definition at line 562 of file qvideoframe.cpp.
References QAbstractVideoBuffer::MapData::data, QVideoFramePrivate::mapData, and QAbstractVideoBuffer::MapData::nPlanes.
int QVideoFrame::bytesPerLine | ( | int | plane | ) | const |
Returns the number of bytes in a scan line of a plane.
This value is only valid while the frame data is \l {map()}{mapped}.
Definition at line 525 of file qvideoframe.cpp.
References QAbstractVideoBuffer::MapData::bytesPerLine, QVideoFramePrivate::mapData, and QAbstractVideoBuffer::MapData::nPlanes.
Referenced by QSGVivanteVideoMaterial::vivanteMapping().
qint64 QVideoFrame::endTime | ( | ) | const |
Returns the presentation time (in microseconds) when a frame should stop being displayed.
An invalid time is represented as -1.
Definition at line 629 of file qvideoframe.cpp.
References QVideoFramePrivate::endTime.
QVideoFrame::HandleType QVideoFrame::handleType | ( | ) | const |
Returns the type of a video frame's handle.
The handle type could either be NoHandle, meaning that the frame is memory based, or a RHI texture.
Definition at line 241 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, and NoHandle.
Referenced by QQuickVideoOutput::updatePaintNode().
int QVideoFrame::height | ( | ) | const |
Returns the height of a video frame.
Definition at line 265 of file qvideoframe.cpp.
References QSize::height(), and size().
Referenced by map(), and QSGVivanteVideoMaterial::vivanteMapping().
bool QVideoFrame::isMapped | ( | ) | const |
Identifies if a video frame's contents are currently mapped to system memory.
This is a convenience function which checks that the \l {QVideoFrame::MapMode}{MapMode} of the frame is not equal to QVideoFrame::NotMapped.
Returns true if the contents of the video frame are mapped to system memory, and false otherwise.
Definition at line 282 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, and NotMapped.
bool QVideoFrame::isReadable | ( | ) | const |
Identifies if the mapped contents of a video frame were read from the frame when it was mapped.
This is a convenience function which checks if the \l {QVideoFrame::MapMode}{MapMode} contains the QVideoFrame::WriteOnly flag.
Returns true if the contents of the mapped memory were read from the video frame, and false otherwise.
Definition at line 317 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, and ReadOnly.
bool QVideoFrame::isValid | ( | ) | const |
Identifies whether a video frame is valid.
An invalid frame has no video buffer associated with it.
Returns true if the frame is valid, and false if it is not.
Definition at line 214 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, QVideoFramePrivate::format, QVideoFrameFormat::Format_Invalid, and QVideoFrameFormat::pixelFormat().
Referenced by QSGVivanteVideoMaterial::bind(), paint(), AVFCameraRenderer::syncHandleViewfinderFrame(), toImage(), QQuickVideoOutput::updatePaintNode(), and QVideoWindowPrivate::updateTextures().
bool QVideoFrame::isWritable | ( | ) | const |
Identifies if the mapped contents of a video frame will be persisted when the frame is unmapped.
This is a convenience function which checks if the \l {QVideoFrame::MapMode}{MapMode} contains the QVideoFrame::WriteOnly flag.
Returns true if the video frame will be updated when unmapped, and false otherwise.
Definition at line 301 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, and WriteOnly.
bool QVideoFrame::map | ( | QVideoFrame::MapMode | mode | ) |
Maps the contents of a video frame to system (CPU addressable) memory.
In some cases the video frame data might be stored in video memory or otherwise inaccessible memory, so it is necessary to map a frame before accessing the pixel data. This may involve copying the contents around, so avoid mapping and unmapping unless required.
The map mode indicates whether the contents of the mapped memory should be read from and/or written to the frame. If the map mode includes the QVideoFrame::ReadOnly
flag the mapped memory will be populated with the content of the video frame when initially mapped. If the map mode includes the QVideoFrame::WriteOnly
flag the content of the possibly modified mapped memory will be written back to the frame when unmapped.
While mapped the contents of a video frame can be accessed directly through the pointer returned by the bits() function.
When access to the data is no longer needed, be sure to call the unmap() function to release the mapped memory and possibly update the video frame contents.
If the video frame has been mapped in read only mode, it is permissible to map it multiple times in read only mode (and unmap it a corresponding number of times). In all other cases it is necessary to unmap the frame first before mapping a second time.
Returns true if the frame was mapped to memory in the given mode and false otherwise.
Definition at line 362 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, QAbstractVideoBuffer::MapData::bytesPerLine, QAbstractVideoBuffer::MapData::data, QVideoFramePrivate::format, QVideoFrameFormat::Format_ABGR8888, QVideoFrameFormat::Format_ARGB8888, QVideoFrameFormat::Format_ARGB8888_Premultiplied, QVideoFrameFormat::Format_AYUV, QVideoFrameFormat::Format_AYUV_Premultiplied, QVideoFrameFormat::Format_BGRA8888, QVideoFrameFormat::Format_BGRA8888_Premultiplied, QVideoFrameFormat::Format_BGRX8888, QVideoFrameFormat::Format_IMC1, QVideoFrameFormat::Format_IMC2, QVideoFrameFormat::Format_IMC3, QVideoFrameFormat::Format_IMC4, QVideoFrameFormat::Format_Invalid, QVideoFrameFormat::Format_Jpeg, QVideoFrameFormat::Format_NV12, QVideoFrameFormat::Format_NV21, QVideoFrameFormat::Format_P010, QVideoFrameFormat::Format_P016, QVideoFrameFormat::Format_RGBA8888, QVideoFrameFormat::Format_RGBX8888, QVideoFrameFormat::Format_SamplerExternalOES, QVideoFrameFormat::Format_SamplerRect, QVideoFrameFormat::Format_UYVY, QVideoFrameFormat::Format_XBGR8888, QVideoFrameFormat::Format_XRGB8888, QVideoFrameFormat::Format_Y16, QVideoFrameFormat::Format_Y8, QVideoFrameFormat::Format_YUV420P, QVideoFrameFormat::Format_YUV420P10, QVideoFrameFormat::Format_YUV422P, QVideoFrameFormat::Format_YUYV, QVideoFrameFormat::Format_YV12, height(), QVideoFramePrivate::image, QVideoFramePrivate::imageMutex, lock, QVideoFramePrivate::mapData, QVideoFramePrivate::mapMutex, QVideoFramePrivate::mappedCount, NotMapped, QAbstractVideoBuffer::MapData::nPlanes, QVideoFrameFormat::pixelFormat(), Q_ASSERT, ReadOnly, QAbstractVideoBuffer::MapData::size, and WriteOnly.
QVideoFrame::MapMode QVideoFrame::mapMode | ( | ) | const |
Returns the mode a video frame was mapped to system memory in.
Definition at line 327 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, and NotMapped.
int QVideoFrame::mappedBytes | ( | int | plane | ) | const |
Returns the number of bytes occupied by plane plane of the mapped frame data.
This value is only valid while the frame data is \l {map()}{mapped}.
Definition at line 576 of file qvideoframe.cpp.
References QVideoFramePrivate::mapData, QAbstractVideoBuffer::MapData::nPlanes, and QAbstractVideoBuffer::MapData::size.
bool QVideoFrame::mirrored | ( | ) | const |
Returns whether the frame should be mirrored before displaying.
Definition at line 709 of file qvideoframe.cpp.
References QVideoFramePrivate::mirrored.
Referenced by QVideoWindowPrivate::render(), setMirrored(), QSGVideoNode::setTexturedRectGeometry(), and toImage().
bool QVideoFrame::operator!= | ( | const QVideoFrame & | other | ) | const |
true
if this QVideoFrame and other do not reflect the same frame. Definition at line 197 of file qvideoframe.cpp.
References other().
|
default |
Moves other into this QVideoFrame.
Assigns the contents of other to this video frame.
Since QVideoFrame is explicitly shared, these two instances will reflect the same frame.
bool QVideoFrame::operator== | ( | const QVideoFrame & | other | ) | const |
true
if this QVideoFrame and other reflect the same frame. Definition at line 188 of file qvideoframe.cpp.
References other().
void QVideoFrame::paint | ( | QPainter * | painter, |
const QRectF & | rect, | ||
const PaintOptions & | options ) |
Uses a QPainter, {painter}, to render this QVideoFrame to rect.
The PaintOptions options can be used to specify a background color and how rect should be filled with the video.
Definition at line 759 of file qvideoframe.cpp.
References QVideoFrame::PaintOptions::aspectRatioMode, QVideoFrame::PaintOptions::backgroundColor, Qt::black, QVideoFrame::PaintOptions::DontDrawSubtitles, QPainter::drawImage(), QPainter::fillRect(), QString::isEmpty(), isValid(), Qt::KeepAspectRatio, layout, map, painter, QVideoFrame::PaintOptions::paintFlags, qRotatedFrameSize(), ReadOnly, rect, QString::replace(), QPainter::setTransform(), QVideoFramePrivate::subtitleText, text, this, toImage(), QPainter::transform(), QTransform::translate(), Qt::transparent, unmap(), and QLayout::update().
Referenced by QVideoWindowPrivate::render().
QVideoFrameFormat::PixelFormat QVideoFrame::pixelFormat | ( | ) | const |
Returns the pixel format of this video frame.
Definition at line 222 of file qvideoframe.cpp.
References QVideoFramePrivate::format, QVideoFrameFormat::Format_Invalid, and QVideoFrameFormat::pixelFormat().
Referenced by QQuickVideoOutput::updatePaintNode(), and QSGVivanteVideoMaterial::vivanteMapping().
int QVideoFrame::planeCount | ( | ) | const |
Returns the number of planes in the video frame.
Definition at line 590 of file qvideoframe.cpp.
References QVideoFramePrivate::format, and QVideoFrameFormat::planeCount().
QtVideo::Rotation QVideoFrame::rotation | ( | ) | const |
Returns the angle the frame should be rotated clockwise before displaying.
Definition at line 692 of file qvideoframe.cpp.
References QtVideo::None, and QVideoFramePrivate::rotation.
Referenced by QVideoWindowPrivate::render(), QSGVideoNode::setTexturedRectGeometry(), and toImage().
Sets the presentation time (in microseconds) when a frame should stop being displayed.
An invalid time is represented as -1.
Definition at line 642 of file qvideoframe.cpp.
References QVideoFramePrivate::endTime, and time.
Referenced by QAndroidCamera::frameAvailable(), and QFFmpeg::VideoRenderer::renderInternal().
void QVideoFrame::setMirrored | ( | bool | mirrored | ) |
Sets the mirrored flag for the frame.
Definition at line 700 of file qvideoframe.cpp.
References mirrored(), and QVideoFramePrivate::mirrored.
Referenced by QAndroidCamera::frameAvailable().
void QVideoFrame::setRotation | ( | QtVideo::Rotation | angle | ) |
Sets the angle the frame should be rotated clockwise before displaying.
Definition at line 683 of file qvideoframe.cpp.
References QVideoFramePrivate::rotation.
Referenced by QAndroidCamera::frameAvailable(), and QFFmpeg::VideoRenderer::renderInternal().
Sets the presentation time (in microseconds) when the frame should initially be displayed.
An invalid time is represented as -1.
Definition at line 616 of file qvideoframe.cpp.
References QVideoFramePrivate::startTime, and time.
Referenced by QAndroidCamera::frameAvailable(), and QFFmpeg::VideoRenderer::renderInternal().
Sets the subtitle text that should be rendered together with this video frame to text.
Definition at line 744 of file qvideoframe.cpp.
References QVideoFramePrivate::subtitleText, and text.
Referenced by QPlatformVideoSink::setVideoFrame().
QSize QVideoFrame::size | ( | ) | const |
Returns the dimensions of a video frame.
Definition at line 249 of file qvideoframe.cpp.
References QVideoFramePrivate::format, and QVideoFrameFormat::frameSize().
Referenced by height(), QVideoWindowPrivate::render(), and width().
qint64 QVideoFrame::startTime | ( | ) | const |
Returns the presentation time (in microseconds) when the frame should be displayed.
An invalid time is represented as -1.
Definition at line 603 of file qvideoframe.cpp.
References QVideoFramePrivate::startTime.
QString QVideoFrame::subtitleText | ( | ) | const |
Returns the subtitle text that should be rendered together with this video frame.
Definition at line 736 of file qvideoframe.cpp.
References QVideoFramePrivate::subtitleText.
Referenced by QVideoWindowPrivate::updateSubtitle().
QVideoFrameFormat QVideoFrame::surfaceFormat | ( | ) | const |
Returns the surface format of this video frame.
Definition at line 230 of file qvideoframe.cpp.
References QVideoFramePrivate::format.
Referenced by QVideoWindowPrivate::render(), toImage(), and QVideoWindowPrivate::updateTextures().
|
inlinenoexcept |
Swaps the current video frame with other.
Definition at line 62 of file qvideoframe.h.
QImage QVideoFrame::toImage | ( | ) | const |
Based on the pixel format converts current video frame to image.
Definition at line 718 of file qvideoframe.cpp.
References QVideoFramePrivate::image, QVideoFramePrivate::imageMutex, QImage::isNull(), isValid(), lock, mirrored(), qImageFromVideoFrame(), rotation(), QVideoFrameFormat::scanLineDirection(), surfaceFormat(), and QVideoFrameFormat::TopToBottom.
Referenced by paint().
void QVideoFrame::unmap | ( | ) |
Releases the memory mapped by the map() function.
If the \l {QVideoFrame::MapMode}{MapMode} included the QVideoFrame::WriteOnly flag this will persist the current content of the mapped memory to the video frame.
unmap() should not be called if map() function failed.
Definition at line 496 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer, lock, QVideoFramePrivate::mapData, QVideoFramePrivate::mapMutex, QVideoFramePrivate::mappedCount, and qWarning.
Referenced by QVideoTextureHelper::QVideoFrameTexturesArray::~QVideoFrameTexturesArray(), and paint().
QAbstractVideoBuffer * QVideoFrame::videoBuffer | ( | ) | const |
Definition at line 86 of file qvideoframe.cpp.
References QVideoFramePrivate::buffer.
int QVideoFrame::width | ( | ) | const |
Returns the width of a video frame.
Definition at line 257 of file qvideoframe.cpp.
References size(), and QSize::width().
Referenced by QSGVivanteVideoMaterial::vivanteMapping().
|
friend |
Definition at line 138 of file qvideoframe.h.