class QVideoFrame#

QVideoFrame类表示视频数据的一个帧。 更多

简介#

方法#

注意

本文档可能包含自动从 C++ 翻译到 Python 的代码片段。我们始终欢迎对片段翻译做出贡献。如果您发现翻译存在问题,您还可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单的方式来告知我们。

详细描述#

QVideoFrame 封装了视频帧的像素数据和帧信息。

视频帧可以来自多个位置 - 解码的 媒体摄像头,或程序生成。这些帧中描述的像素方式可能各不相同,某些像素格式在方便使用的同时提供了更大的压缩机会。

可以使用 map() 函数将视频帧的像素内容映射到内存中。在成功调用 map() 之后,可以通过各种函数访问视频数据。某些 YUV 像素格式提供多平面的数据。使用 planeCount() 方法将返回正在使用的平面数量。

在映射期间,每个平面上的视频数据可以通过 bits() 函数来访问,该函数会返回一个指向缓冲区的指针。该缓冲区的大小由 mappedBytes() 函数给出,而每行的尺寸由 bytesPerLine() 函数给出。handle() 函数的返回值还可以用来通过内部缓冲区本地的 API(例如 - OpenGL 纹理句柄)来访问帧数据。

视频帧还可以关联时间戳信息。这些时间戳可以用来确定何时开始和停止显示帧。

QVideoFrame 对象可能会消耗大量的内存或系统资源,不应保留超过应用程序所需的时长。

注意

由于视频帧的拷贝可能会很贵,所以 QVideoFrame 是显式共享的,因此对视频帧的任何更改也将应用于任何副本。

class HandleType#

用于标识视频缓冲区句柄的类型。

常量

描述

QVideoFrame.NoHandle

缓冲区没有句柄,其数据只能通过映射缓冲区来访问。

QVideoFrame.RhiTextureHandle

缓冲区的句柄由 Qt 渲染硬件接口 (RHI) 定义。RHI 是 Qt 内部用于 3D API(如 OpenGL、Vulkan、Metal 和 Direct 3D)的图形抽象。

另请参阅

handleType()

class MapMode#

枚举了视频缓冲区数据映射到系统内存的方式。

常量

描述

QVideoFrame.NotMapped

视频缓冲区没有映射到内存。

QVideoFrame.ReadOnly

在映射时,映射的内存会填充来自视频缓冲区的数据,但在取消映射时,映射内存的内容可能会被丢弃。

QVideoFrame.WriteOnly

在映射时,映射的内存是未初始化的,但可能在取消映射后被修改并用于填充视频缓冲区。

QVideoFrame.ReadWrite

在映射时,映射的内存会填充来自视频缓冲区的数据,在取消映射时,视频缓冲区会用映射内存的内容重新填充。

另请参阅

mapMode() map()

新版本 6.1。

class RotationAngle#

请使用 Rotation 代替。

在显示之前应应用于视频帧的顺时针旋转角度。

常量

描述

QVideoFrame.Rotation0

无需旋转,帧方向正确

QVideoFrame.Rotation90

帧应旋转90度

QVideoFrame.Rotation180

帧应旋转180度

QVideoFrame.Rotation270

帧应旋转270度

自版本6.2.3新增。

__init__(other)#
参数:

otherQVideoFrame

构造other的浅拷贝。由于QVideoFrame是显式共享的,这两个实例将反映相同的帧。

__init__()

构造一个空的视频帧。

__init__(format)
参数:

formatQVideoFrameFormat

构造指定像素格式的视频帧。

bytesPerLine(plane)#
参数:

plane – int

返回类型:

int

返回扫描线中字节数。

此值仅在帧数据被mapped时有效。

另请参阅

bits() map() mappedBytes() planeCount()

endTime()#
返回类型:

int

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

无效时间表示为-1。

另请参阅

setEndTime()

handleType()#
返回类型:

HandleType

返回视频帧句柄的类型。

句柄类型可以是NoHandle,表示帧基于内存,或RHI纹理。

height()#
返回类型:

int

返回视频帧的高度。

isMapped()#
返回类型:

bool

用于确定视频帧的内容是否当前被映射到系统内存。

这是一个便利函数,它检查帧的MapMode属性是否不等于NotMapped

如果视频帧的内容被映射到系统内存,则返回true,否则返回false。

另请参阅

mapMode() / MapMode

isReadable()#
返回类型:

bool

用于确定视频帧映射的内容是否在它会话期间已被读取。

这是一个便利函数,用于检查MapMode是否包含WriteOnly标志。

如果映射的内存内容是从视频帧中读取的,则返回true,否则返回false。

另请参阅

mapMode() / MapMode

isValid()#
返回类型:

bool

用于确定视频帧是否有效。

无效的帧没有与之关联的视频缓冲区。

如果帧是有效的,则返回true;如果不是,则返回false。

isWritable()#
返回类型:

bool

用于确定在将帧取消映射时,其内容是否将保持不变。

这是一个便利函数,用于检查MapMode是否包含WriteOnly标志。

如果视频帧在取消映射时将被更新,则返回true,否则返回false。

注意

在只读模式下修改已映射帧中的数据的结果是不确定的。具体取决于缓冲区实现,更改可能被保存,或者更糟的是,可能更改共享缓冲区。

另请参阅

mapMode() / MapMode

map(mode)#
参数:

**mode** – MapMode

返回类型:

bool

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

在某些情况下,视频帧数据可能存储在视频内存或其他无法访问的内存中,因此在使用像素数据之前必须映射帧。这可能导致内容复制,所以除非必要,请避免映射和卸载。

映射模式的 mode 指示是否应从和/or 写入帧中读取映射内存的内容。如果映射模式包括 QVideoFrame::ReadOnly 标志,则映射内存将在初使映射时填充视频帧的内容。如果映射模式包括 QVideoFrame::WriteOnly 标志,则在解除映射时,可能被修改的映射内存内容将被写回帧中。

在映射期间,可以通过 bits() 函数返回的指针直接访问视频帧的内容。

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

如果视频帧是只读模式映射的,则可以多次在只读模式下映射它(并相应地解除映射)。在其他所有情况下,必须首先解除映射,然后再进行第二次映射。

注意

写入只读映射的内存是未定义的,可能会导致共享数据更改或崩溃。

如果帧以指定的 mode 映射到内存中则返回 true,否则返回 false。

另请参阅

unmap() mapMode() bits()

mapMode()#
返回类型:

映射模式

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

另请参阅

map() MapMode

mappedBytes(plane)#
参数:

plane – int

返回类型:

int

返回映射帧数据中平面 plane 占用的字节数。

此值仅在帧数据被mapped时有效。

另请参阅

映射

mirrored()#
返回类型:

bool

返回帧是否应该在显示前镜像。

另请参阅

设置镜像

__ne__(other)#
参数:

otherQVideoFrame

返回类型:

bool

如果此 QVideoFrameother 不反映相同的帧,则返回 true

__eq__(other)#
参数:

otherQVideoFrame

返回类型:

bool

返回 true 如果此 QVideoFrameother 代表相同的帧。

pixelFormat()#
返回类型:

像素格式

返回此视频帧的像素格式。

planeCount()#
返回类型:

int

返回视频帧中的平面数量。

另请参阅

映射

rotation()#
返回类型:

旋转方向

返回在显示之前帧应该顺时针旋转的角度。

另请参阅

setRotation()

rotationAngle()#
返回类型:

旋转角度

注意

此函数已弃用。

请使用 QVideoFrame::rotation 代替。

返回在显示之前帧应该顺时针旋转的角度。

另请参阅

setRotationAngle()

setEndTime(time)#
参数:

时间 – int

设置帧应停止显示的时间表示(以微秒为单位)。

无效时间表示为-1。

另请参阅

endTime()

setMirrored(arg__1)#
参数:

arg__1 – bool

设置帧的 mirrored 标志。

另请参阅

mirrored()

setRotation(angle)#
参数:

角度Rotation

设置在显示之前帧应该顺时针旋转的角度。

另请参阅

rotation()

setRotationAngle(angle)#
参数:

角度RotationAngle

注意

此函数已弃用。

请使用 QVideoFrame::setRotation 代替。

设置在显示之前帧应该顺时针旋转的角度。

另请参阅

rotationAngle()

setStartTime(time)#
参数:

时间 – int

设置帧最初应显示的时间表示(以微秒为单位)。

无效时间表示为-1。

另请参阅

startTime()

setSubtitleText(text)#
参数:

text – 字符串

将为与当前视频帧一起渲染的子标题文本设置为 text

另请参阅

subtitleText()

size()#
返回类型:

QSize

返回视频帧的尺寸。

startTime()#
返回类型:

int

返回帧应该显示时的播放时间(微秒)。

无效时间表示为-1。

另请参阅

setStartTime()

subtitleText()#
返回类型:

str

返回将与当前视频帧一起渲染的子标题文本。

另请参阅

setSubtitleText()

surfaceFormat()#
返回类型:

QVideoFrameFormat

返回此视频帧的表面格式。

swap(other)#
参数:

otherQVideoFrame

交换当前视频帧与 other

toImage()#
返回类型:

QImage

根据像素格式将当前视频帧转换为图像。

unmap()#

释放由 map() 函数映射的内存。

如果 MapMode 包含了 WriteOnly 标志,则这将持久化映射内存中的当前内容到视频帧。

如果 map() 函数失败,则不应调用 unmap()

另请参阅

映射

width()#
返回类型:

int

返回视频帧的宽度。