QVideoFrame 类

QVideoFrame 类表示视频数据帧。 更多...

头: #include <QVideoFrame>
qmake: QT += multimedia

公共类型

enum FieldType { ProgressiveFrame, TopField, BottomField, InterlacedFrame }
enum PixelFormat { Format_Invalid, Format_ARGB32, Format_ARGB32_Premultiplied, Format_RGB32, Format_RGB24, …, Format_User }

公共函数

QVideoFrame (const QVideoFrame & other )
QVideoFrame (const QImage & image )
QVideoFrame (int bytes , const QSize & size , int bytesPerLine , QVideoFrame::PixelFormat format )
QVideoFrame (QAbstractVideoBuffer * buffer , const QSize & size , QVideoFrame::PixelFormat format )
QVideoFrame ()
QVideoFrame & operator= (const QVideoFrame & other )
~QVideoFrame ()
QVariantMap availableMetaData () const
uchar * bits ()
uchar * bits (int plane )
const uchar * bits () const
const uchar * bits (int plane ) const
QAbstractVideoBuffer * buffer () const
int bytesPerLine () const
int bytesPerLine (int plane ) const
qint64 endTime () const
QVideoFrame::FieldType fieldType () const
QVariant handle () const
QAbstractVideoBuffer::HandleType handleType () const
int height () const
QImage image () const
bool isMapped () const
bool isReadable () const
bool isValid () const
bool isWritable () const
bool map (QAbstractVideoBuffer::MapMode mode )
QAbstractVideoBuffer::MapMode mapMode () const
int mappedBytes () const
QVariant metaData (const QString & key ) const
QVideoFrame::PixelFormat pixelFormat () const
int planeCount () const
void setEndTime (qint64 time )
void setFieldType (QVideoFrame::FieldType field )
void setMetaData (const QString & key , const QVariant & value )
void setStartTime (qint64 time )
QSize size () const
qint64 startTime () const
void unmap ()
int width () const
bool operator!= (const QVideoFrame & other ) const
bool operator== (const QVideoFrame & other ) const

静态公共成员

QImage::Format imageFormatFromPixelFormat (QVideoFrame::PixelFormat format )
QVideoFrame::PixelFormat pixelFormatFromImageFormat (QImage::Format format )

详细描述

QVideoFrame 封装视频帧的像素数据,及帧的有关信息。

视频帧可以来自几个地方 - 解码的 media camera ,或以编程方式生成。在这些帧中描述像素的方式可能有很大不同,且一些像素格式以易用性为代价提供更大压缩机会。

视频帧的像素内容映射到内存可以使用 map () 函数。当映射时,视频数据的访问可以使用 bits () 函数,返回缓冲指针。此缓冲总大小的给定是通过 mappedBytes () 函数,和每行大小的给定是通过 bytesPerLine ()。返回值对于 handle () 函数也可以使用内部缓冲的本地 API 来访问帧数据 (例如:OpenGL 纹理句柄)。

视频帧也可以拥有关联它的时间戳信息。这些时间戳可以用于实现的 QAbstractVideoSurface 以确定何时开始和停止显示帧,但并非所有表面都可能遵守此设置。

QVideoFrame 视频像素数据的封装是在 QAbstractVideoBuffer 。QVideoFrame 可以从任何缓冲类型构造,通过子类化 QAbstractVideoBuffer 类。

注意: 由于 QVideoFrame 是明确共享的,要拷贝的视频帧可能很昂贵,所以对视频帧所做的任何改变也将应用于任何副本。

成员类型文档编制

enum QVideoFrame:: FieldType

指定隔行扫描视频帧所属的字段。

常量 描述
QVideoFrame::ProgressiveFrame 0 帧非隔行扫描。
QVideoFrame::TopField 1 帧包含 top 字段。
QVideoFrame::BottomField 2 框架包含 bottom 字段。
QVideoFrame::InterlacedFrame 3 帧包含合并的 top 和 bottom 字段。

enum QVideoFrame:: PixelFormat

枚举视频数据类型。

常量 描述
QVideoFrame::Format_Invalid 0 帧无效。
QVideoFrame::Format_ARGB32 1 使用 32 位 ARGB 格式 (0xAARRGGBB) 存储帧。这相当于 QImage::Format_ARGB32 .
QVideoFrame::Format_ARGB32_Premultiplied 2 使用预乘 32 位 ARGB 格式 (0xAARRGGBB) 存储帧。这相当于 QImage::Format_ARGB32_Premultiplied .
QVideoFrame::Format_RGB32 3 使用 32 位 RGB 格式 (0xffRRGGBB) 存储帧。这相当于 QImage::Format_RGB32
QVideoFrame::Format_RGB24 4 The frame is stored using a 24-bit RGB format (8-8-8). This is equivalent to QImage::Format_RGB888
QVideoFrame::Format_RGB565 5 The frame is stored using a 16-bit RGB format (5-6-5). This is equivalent to QImage::Format_RGB16 .
QVideoFrame::Format_RGB555 6 The frame is stored using a 16-bit RGB format (5-5-5). This is equivalent to QImage::Format_RGB555 .
QVideoFrame::Format_ARGB8565_Premultiplied 7 The frame is stored using a 24-bit premultiplied ARGB format (8-5-6-5).
QVideoFrame::Format_BGRA32 8 The frame is stored using a 32-bit BGRA format (0xBBGGRRAA).
QVideoFrame::Format_BGRA32_Premultiplied 9 The frame is stored using a premultiplied 32bit BGRA format.
QVideoFrame::Format_ABGR32 33 The frame is stored using a 32-bit ABGR format (0xAABBGGRR).
QVideoFrame::Format_BGR32 10 The frame is stored using a 32-bit BGR format (0xBBGGRRff).
QVideoFrame::Format_BGR24 11 The frame is stored using a 24-bit BGR format (0xBBGGRR).
QVideoFrame::Format_BGR565 12 帧使用 16 位 BGR 格式 (5-6-5) 存储。
QVideoFrame::Format_BGR555 13 帧使用 16 位 BGR 格式 (5-5-5) 存储。
QVideoFrame::Format_BGRA5658_Premultiplied 14 The frame is stored using a 24-bit premultiplied BGRA format (5-6-5-8).
QVideoFrame::Format_AYUV444 15 The frame is stored using a packed 32-bit AYUV format (0xAAYYUUVV).
QVideoFrame::Format_AYUV444_Premultiplied 16 The frame is stored using a packed premultiplied 32-bit AYUV format (0xAAYYUUVV).
QVideoFrame::Format_YUV444 17 The frame is stored using a 24-bit packed YUV format (8-8-8).
QVideoFrame::Format_YUV420P 18 The frame is stored using an 8-bit per component planar YUV format with the U and V planes horizontally and vertically sub-sampled, i.e. the height and width of the U and V planes are half that of the Y plane.
QVideoFrame::Format_YUV422P 34 The frame is stored using an 8-bit per component planar YUV format with the U and V planes horizontally sub-sampled, i.e. the width of the U and V planes are half that of the Y plane, and height of U and V planes is the same as Y.
QVideoFrame::Format_YV12 19 The frame is stored using an 8-bit per component planar YVU format with the V and U planes horizontally and vertically sub-sampled, i.e. the height and width of the V and U planes are half that of the Y plane.
QVideoFrame::Format_UYVY 20 The frame is stored using an 8-bit per component packed YUV format with the U and V planes horizontally sub-sampled (U-Y-V-Y), i.e. two horizontally adjacent pixels are stored as a 32-bit macropixel which has a Y value for each pixel and common U and V values.
QVideoFrame::Format_YUYV 21 The frame is stored using an 8-bit per component packed YUV format with the U and V planes horizontally sub-sampled (Y-U-Y-V), i.e. two horizontally adjacent pixels are stored as a 32-bit macropixel which has a Y value for each pixel and common U and V values.
QVideoFrame::Format_NV12 22 The frame is stored using an 8-bit per component semi-planar YUV format with a Y plane (Y) followed by a horizontally and vertically sub-sampled, packed UV plane (U-V).
QVideoFrame::Format_NV21 23 The frame is stored using an 8-bit per component semi-planar YUV format with a Y plane (Y) followed by a horizontally and vertically sub-sampled, packed VU plane (V-U).
QVideoFrame::Format_IMC1 24 The frame is stored using an 8-bit per component planar YUV format with the U and V planes horizontally and vertically sub-sampled. This is similar to the Format_YUV420P type, except that the bytes per line of the U and V planes are padded out to the same stride as the Y plane.
QVideoFrame::Format_IMC2 25 The frame is stored using an 8-bit per component planar YUV format with the U and V planes horizontally and vertically sub-sampled. This is similar to the Format_YUV420P type, except that the lines of the U and V planes are interleaved, i.e. each line of U data is followed by a line of V data creating a single line of the same stride as the Y data.
QVideoFrame::Format_IMC3 26 The frame is stored using an 8-bit per component planar YVU format with the V and U planes horizontally and vertically sub-sampled. This is similar to the Format_YV12 type, except that the bytes per line of the V and U planes are padded out to the same stride as the Y plane.
QVideoFrame::Format_IMC4 27 The frame is stored using an 8-bit per component planar YVU format with the V and U planes horizontally and vertically sub-sampled. This is similar to the Format_YV12 type, except that the lines of the V and U planes are interleaved, i.e. each line of V data is followed by a line of U data creating a single line of the same stride as the Y data.
QVideoFrame::Format_Y8 28 使用 8 位灰度格式存储帧。
QVideoFrame::Format_Y16 29 使用 16 位线性灰度格式存储帧。小端在前。
QVideoFrame::Format_Jpeg 30 以压缩的 JPEG 格式存储帧。
QVideoFrame::Format_CameraRaw 31 使用特定设备摄像头原生格式存储帧。
QVideoFrame::Format_AdobeDng 32 使用原生 Adobe DNG (数字负片) 格式存储帧。
QVideoFrame::Format_User 1000 用户定义像素格式的起始值。

成员函数文档编制

QVideoFrame:: QVideoFrame (const QVideoFrame & other )

构造浅拷贝为 other 。由于 QVideoFrame 是明确共享的,所以这 2 实例将反射相同帧。

QVideoFrame:: QVideoFrame (const QImage & image )

构造视频帧从 image .

注意: 这会构造无效视频帧,若不存在等价图像格式的帧类型。

另请参阅 pixelFormatFromImageFormat ().

QVideoFrame:: QVideoFrame ( int bytes , const QSize & size , int bytesPerLine , QVideoFrame::PixelFormat format )

构造视频帧采用给定像素 format and size (以像素为单位)。

The bytesPerLine (步幅) 是每扫描行的长度 (以字节为单位),和 bytes 是必须为帧分配的总字节数。

QVideoFrame:: QVideoFrame ( QAbstractVideoBuffer * buffer , const QSize & size , QVideoFrame::PixelFormat format )

构造视频帧从 buffer 采用给定像素 format and size (以像素为单位)。

注意: 这不会递增视频缓冲的引用计数。

QVideoFrame:: QVideoFrame ()

构造 null 视频帧。

QVideoFrame &QVideoFrame:: operator= (const QVideoFrame & other )

赋值内容对于 other 到此视频帧。由于 QVideoFrame 是明确共享的,这 2 实例将反射相同帧。

QVideoFrame:: ~QVideoFrame ()

销毁视频帧。

QVariantMap QVideoFrame:: availableMetaData () const

返回关联此帧的任何额外元数据。

uchar *QVideoFrame:: bits ()

返回指向帧数据缓冲起始的指针。

此值才有效当帧数据为 mapped .

凭借此指针访问数据做出的改变 (当采用写入访问映射时) 只保证有持久化当 unmap () 被调用和当缓冲已被映射以供写入。

另请参阅 map (), mappedBytes (),和 bytesPerLine ().

uchar *QVideoFrame:: bits ( int plane )

返回指针指向帧数据缓冲的开始为 plane .

此值才有效当帧数据为 mapped .

凭借此指针访问数据做出的改变 (当采用写入访问映射时) 只保证有持久化当 unmap () 被调用和当缓冲已被映射以供写入。

该函数在 Qt 5.4 引入。

另请参阅 map (), mappedBytes (), bytesPerLine (),和 planeCount ().

const uchar *QVideoFrame:: bits () const

返回指向帧数据缓冲起始的指针。

此值才有效当帧数据为 mapped .

若缓冲未采用读取访问被映射,此缓冲的内容将被初始为未被初始化。

另请参阅 map (), mappedBytes (),和 bytesPerLine ().

const uchar *QVideoFrame:: bits ( int plane ) const

返回指针指向帧数据缓冲的开始为 plane .

此值才有效当帧数据为 mapped .

若缓冲未采用读取访问被映射,此缓冲的内容将被初始为未被初始化。

该函数在 Qt 5.4 引入。

另请参阅 map (), mappedBytes (), bytesPerLine (),和 planeCount ().

QAbstractVideoBuffer *QVideoFrame:: buffer () const

返回底层视频缓冲或 null 若没有。

该函数在 Qt 5.13 引入。

int QVideoFrame:: bytesPerLine () const

返回扫描行字节数。

注意: For planar formats this is the bytes per line of the first plane only. The bytes per line of subsequent planes should be calculated as per the frame 像素格式 .

此值才有效当帧数据为 mapped .

另请参阅 bits (), map (),和 mappedBytes ().

int QVideoFrame:: bytesPerLine ( int plane ) const

Returns the number of bytes in a scan line of a plane .

此值才有效当帧数据为 mapped .

该函数在 Qt 5.4 引入。

另请参阅 bits (), map (), mappedBytes (),和 planeCount ().

qint64 QVideoFrame:: endTime () const

返回要显示的呈现时间 (以微秒为单位),当帧应停止时。

无效时间表示为 -1。

另请参阅 setEndTime ().

QVideoFrame::FieldType QVideoFrame:: fieldType () const

返回隔行扫描视频帧所属的字段。

若不是隔行扫描视频,这会返回 WholeFrame。

另请参阅 setFieldType ().

QVariant QVideoFrame:: handle () const

返回视频帧缓冲的特定类型句柄。

对于 OpenGL 纹理,这将是纹理 ID。

另请参阅 QAbstractVideoBuffer::handle ().

QAbstractVideoBuffer::HandleType QVideoFrame:: handleType () const

返回视频帧的句柄类型。

int QVideoFrame:: height () const

返回视频帧的高度。

QImage QVideoFrame:: image () const

基于像素格式将当前视频帧转换成图像。

该函数在 Qt 5.15 引入。

[static] QImage::Format QVideoFrame:: imageFormatFromPixelFormat ( QVideoFrame::PixelFormat format )

返回图像格式等效视频帧像素 format 。若没有等效格式 QImage::Format_Invalid 被返回取而代之。

注意: 一般而言 QImage 没有 YUV 格式。

bool QVideoFrame:: isMapped () const

标识目前是否把视频帧内容,映射到系统内存。

This is a convenience function which checks that the MapMode of the frame is not equal to QAbstractVideoBuffer::NotMapped .

Returns true if the contents of the video frame are mapped to system memory, and false otherwise.

另请参阅 mapMode () 和 QAbstractVideoBuffer::MapMode .

bool QVideoFrame:: isReadable () const

标识视频帧映射内容,是否是从帧读取当映射时。

这是方便校验函数若 MapMode 包含 QAbstractVideoBuffer::WriteOnly 标志。

返回 true 若从视频帧读取映射内存内容,和 false 否则。

另请参阅 mapMode () 和 QAbstractVideoBuffer::MapMode .

bool QVideoFrame:: isValid () const

标识视频帧是否有效。

无效帧没有关联它的视频缓冲。

返回 true 若帧有效,和 false 若帧无效。

bool QVideoFrame:: isWritable () const

标识视频帧的映射内容是否会持久化,当取消帧映射时。

这是方便校验函数若 MapMode 包含 QAbstractVideoBuffer::WriteOnly 标志。

返回 true 若将更新视频帧当取消映射时,否则返回 false。

注意: 更改以只读方式映射帧数据的结果未定义。从属缓冲实现,改变可能持久化,或更糟更改共享缓冲。

另请参阅 mapMode () 和 QAbstractVideoBuffer::MapMode .

bool QVideoFrame:: map ( QAbstractVideoBuffer::MapMode mode )

把视频帧的内容映射到系统 (CPU 可寻址) 内存。

在某些情况下,视频帧数据可能存储在视频内存 (或其它不可访问内存) 中,因此有必要映射帧在访问像素数据前。这可能涉及围绕内容的拷贝,所以,应避免映射和取消映射 (除非要求)。

映射 mode 指示映射内存内容是否应读取自和/或写入帧。若映射模式包括 QAbstractVideoBuffer::ReadOnly 标志将采用视频帧内容填充映射内存当初始映射时。若映射模式包括 QAbstractVideoBuffer::WriteOnly 标志可能将修改映射内存内容写回到帧当取消映射时。

当映射时,可以直接访问视频帧内容透过指针返回通过 bits () 函数。

当访问数据不再需要时,确保调用 unmap () 函数以释放映射内存且可能更新视频帧内容。

若已以只读方式映射视频帧,则以只读方式多次映射 (且取消映射它相应次数) 是准许的。在所有其它情况下,有必要先取消帧映射,在第 2 次映射前。

注意: 由于只读写入映射内存未定义,且可能导致共享数据改变 (或崩溃)。

返回 true 若映射帧到内存按给定 mode 和 false 否则。

另请参阅 unmap (), mapMode (),和 bits ().

QAbstractVideoBuffer::MapMode QVideoFrame:: mapMode () const

返回将视频帧映射到系统内存中的模式。

另请参阅 map () 和 QAbstractVideoBuffer::MapMode .

int QVideoFrame:: mappedBytes () const

返回由映射帧数据所占据的字节数。

此值才有效当帧数据为 mapped .

另请参阅 map ().

QVariant QVideoFrame:: metaData (const QString & key ) const

返回此帧的任何元数据为给定 key .

这可能包括来自摄像头的帧特定信息,或来自解码视频流的字幕。

见相关视频帧生产者文档编制,进一步了解可用元数据的有关信息。

另请参阅 setMetaData ().

QVideoFrame::PixelFormat QVideoFrame:: pixelFormat () const

返回视频帧的颜色格式。

[static] QVideoFrame::PixelFormat QVideoFrame:: pixelFormatFromImageFormat ( QImage::Format format )

返回视频像素格式相当于图像 format 。若不存在等价格式,返回 QVideoFrame::InvalidType 代替。

注意: 一般而言 QImage 没有 YUV 格式。

int QVideoFrame:: planeCount () const

返回视频帧中的平面数。

此值才有效当帧数据为 mapped .

该函数在 Qt 5.4 引入。

另请参阅 map ().

void QVideoFrame:: setEndTime ( qint64 time )

设置呈现 time (以微秒为单位) 当帧应停止显示时。

无效时间表示为 -1。

另请参阅 endTime ().

void QVideoFrame:: setFieldType ( QVideoFrame::FieldType field )

设置 field 属于隔行扫描视频帧。

另请参阅 fieldType ().

void QVideoFrame:: setMetaData (const QString & key , const QVariant & value )

设置元数据为给定 key to value .

value 是 null 变体,将移除此键的任何元数据。

视频帧生产者可能使用这将某些数据与此帧关联,或让中间处理器为此帧的消费者添加信息。

另请参阅 metaData ().

void QVideoFrame:: setStartTime ( qint64 time )

设置呈现 time (以微秒为单位) 当帧应该被初始显示时。

无效时间表示为 -1。

另请参阅 startTime ().

QSize QVideoFrame:: size () const

返回视频帧尺度。

qint64 QVideoFrame:: startTime () const

返回呈现时间 (以微秒为单位) 当帧应该被显示时。

无效时间表示为 -1。

另请参阅 setStartTime ().

void QVideoFrame:: unmap ()

释放内存映射通过 map () 函数。

MapMode 包括 QAbstractVideoBuffer::WriteOnly 标志,则这会把映射内存当前内容坚持到视频帧。

unmap() 不应被调用,若 map () 函数失败。

另请参阅 map ().

int QVideoFrame:: width () const

返回视频帧的宽度。

bool QVideoFrame:: operator!= (const QVideoFrame & other ) const

返回 true 若此 QVideoFrame and other 不反射相同帧。

bool QVideoFrame:: operator== (const QVideoFrame & other ) const

返回 true 若此 QVideoFrame and other 反射相同帧。