QVideoFrame 类

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

头文件 #include <QVideoFrame>
CMakefind_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmakeQT += multimedia

公开类型

枚举HandleType { NoHandle, RhiTextureHandle }
枚举MapMode { NotMapped, ReadOnly, WriteOnly, ReadWrite }

公开函数

QVideoFrame()
QVideoFrame(const QVideoFrameFormat &format)
QVideoFrame(const QVideoFrame &other)
QVideoFrame(QVideoFrame &&other)
~QVideoFrame()
uchar *bits(int plane)
const uchar *bits(int plane) const
intbytesPerLine(int plane) const
qint64endTime() const
QVideoFrame::HandleTypehandleType() const
intheight() const
boolisMapped() const
boolisReadable() const
boolisValid() const
boolisWritable() const
boolmap(QVideoFrame::MapMode mode)
QVideoFrame::MapModemapMode() const
intmappedBytes(int plane) const
boolmirrored() const
voidpaint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options)
QVideoFrameFormat::PixelFormatpixelFormat() const
intplaneCount() const
QtVideo::Rotationrotation() const
voidsetEndTime(qint64 time)
voidsetMirrored(bool mirrored)
voidsetRotation(QtVideo::Rotation angle)
voidsetStartTime(qint64 time)
voidsetSubtitleText(const QString &text)
QSizesize() const
qint64startTime() const
QStringsubtitleText() const
QVideoFrameFormatsurfaceFormat() const
voidswap(QVideoFrame &other)
QImagetoImage() const
voidunmap()
intwidth() const
booloperator!=(const QVideoFrame &other) const
QVideoFrame &operator=(QVideoFrame &&other)
QVideoFrame &operator=(const QVideoFrame &other)
booloperator==(const QVideoFrame &other) const

详细说明

QVideoFrame封装了视频帧的像素数据以及帧的相关信息。

视频帧可以来自多个地方 - 解码的媒体相机或以编程方式生成。在这些帧中描述像素的方式可以有很大的变化,并且一些像素格式在牺牲使用方便性之余提供了更大的压缩机会。

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

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

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

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

注意:由于视频帧的复制可能成本很高,QVideoFrame明确实现为共享,因此对视频帧所做的任何修改也将应用到任何副本上。

成员类型文档

枚举 QVideoFrame::HandleType

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

常量描述
QVideoFrame::NoHandle0缓冲区没有句柄,其数据只能通过映射缓冲区来访问。
QVideoFrame::RhiTextureHandle1缓冲区的句柄由Qt渲染硬件接口(RHI)定义。RHI是Qt内部用于3D API(如OpenGL、Vulkan、Metal和Direct 3D)的图形抽象。

参阅:handleType()

枚举 QVideoFrame::MapMode

枚举了视频缓冲区数据如何映射到系统内存。

常量描述
QVideoFrame::NotMapped0x00视频缓冲区没有映射到内存。
QVideoFrame::ReadOnly0x01当映射时,映射的内存将填充来自视频缓冲区的数据,但映射内存的内容在取消映射时可能会被丢弃。
QVideoFrame::WriteOnly0x02当映射时,映射的内存未初始化,但可能修改的内容将在取消映射时用于填充视频缓冲区。
QVideoFrame::ReadWriteReadOnly | WriteOnly已映射的内存填充了视频缓冲区中的数据,当内存未被映射时,视频缓冲区将重新填充映射内存的内容。

也见mapMode() 和 map

成员函数文档

QVideoFrame::QVideoFrame()

构造一个空的视频帧。

QVideoFrame::QVideoFrame(const QVideoFrameFormat &format)

构建给定像素格式的视频帧。

QVideoFrame::QVideoFrame(const QVideoFrame &other)

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

[noexcept] QVideoFrame::QVideoFrame(QVideoFrame &&other)

通过从其他移动来构造一个QVideoFrame。

[noexcept] QVideoFrame::~QVideoFrame()

销毁视频帧。

uchar *QVideoFrame::bits(int plane)

返回一个指向帧数据缓冲区开始的指针,对于plane

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

通过此指针对数据进行的更改(当以写入权限映射时)仅保证在调用unmap() 时和缓冲区已被映射用于写入时已持久化。

也见mapmappedBytesbytesPerLineplaneCount

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

返回一个指向帧数据缓冲区开始的指针,对于plane

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

如果没有以读取访问权限映射缓冲区,则此缓冲区的内容最初将未被初始化。

也见mapmappedBytesbytesPerLineplaneCount

int QVideoFrame::bytesPerLine(int plane) const

返回plane扫描线中的字节数。

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

也见bitsmapmappedBytesplaneCount

qint64 QVideoFrame::endTime() const

返回帧应停止显示时的呈现时间(微秒)。

无效的时间表示为 -1。

也见setEndTime

QVideoFrame::HandleType QVideoFrame::handleType() const

返回视频帧句柄的类型。

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

int QVideoFrame::height() const

返回视频帧的高度。

bool QVideoFrame::isMapped() const

识别视频帧的内容是否目前映射到系统内存。

这是一个便利函数,用于检查帧的映射模式是否不等于QVideoFrame::NotMapped

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

另请参阅mapMode() 和 QVideoFrame::MapMode

bool QVideoFrame::isReadable() const

识别从映射的视频帧读取了映射的内容。

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

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

另请参阅mapMode() 和 QVideoFrame::MapMode

bool QVideoFrame::isValid() const

识别视频帧是否有效。

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

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

bool QVideoFrame::isWritable() const

识别视频帧的映射内容是否在取消映射时保留。

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

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

注意:以只读模式映射的帧的数据更改结果是未定义的。根据缓冲区实现的不同,更改可能会保留,或者更糟,改变共享缓冲区。

另请参阅mapMode() 和 QVideoFrame::MapMode

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

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

在某些情况下,视频帧数据可能存储在视频内存或其他无法访问的内存中,因此在访问像素数据之前必须映射一个帧。这可能涉及到内容复制,因此除非需要,否则请避免映射和取消映射。

映射模式 mode 指示映射内存的内容是否应该从/或写入帧。如果映射模式包括 QVideoFrame::ReadOnly 标志,则初始映射时将使用视频帧的内容填充映射内存。如果映射模式包括 QVideoFrame::WriteOnly 标志,则可能更改的映射内存的内容在取消映射时将写回帧。

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

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

如果视频帧是以只读模式映射的,则可以多次以只读模式将其映射(并相应地取消映射)。在所有其他情况下,在第二次映射之前必须首先取消映射。

注意:向仅读模式映射的内存写入是未定义的,可能会导致共享数据的更改或崩溃。

如果帧在给定的 mode 下映射到内存,则返回 true,否则返回 false。

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

QVideoFrame::MapMode QVideoFrame::mapMode() const

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

另请参阅 map() 和 QVideoFrame::MapMode

int QVideoFrame::mappedBytes(int plane) const

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

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

另请参阅 map

bool QVideoFrame::mirrored() const

返回是否在显示之前应对帧进行镜像。

另请参阅 setMirrored

void QVideoFrame::paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options)

使用 QPainterpainter,将此 QVideoFrame 渲染到 rect 中。PaintOptions options 可用于指定背景颜色以及如何填充 rect 的视频。

注意: 使用此方法渲染时通常会不使用硬件加速。

QVideoFrameFormat::PixelFormat QVideoFrame::pixelFormat() const

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

int QVideoFrame::planeCount() const

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

另请参阅 map

QtVideo::Rotation QVideoFrame::rotation() const

返回在显示之前应将帧按顺时针方向旋转的角度。

另请参阅 setRotation

void QVideoFrame::setEndTime(qint64 time)

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

无效的时间表示为 -1。

另请参阅 endTime

void QVideoFrame::setMirrored(bool mirrored)

设置帧的 mirrored 标志并将该标志设置为底层的 surfaceFormat

另请参阅 mirrored

void QVideoFrame::setRotation(QtVideo::Rotation angle)

设置在显示之前帧应按顺时针方向旋转的角度 angle

另请参阅 rotation

void QVideoFrame::setStartTime(qint64 time)

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

无效的时间表示为 -1。

另请参阅 startTime

void QVideoFrame::setSubtitleText(const QString &text)

将与此视频帧一起渲染的字幕文本设置为text

另请参阅subtitleText()。

QSize QVideoFrame::size() const

返回视频帧的尺寸。

qint64 QVideoFrame::startTime() const

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

无效的时间表示为 -1。

另请参阅setStartTime()。

QString QVideoFrame::subtitleText() const

返回与此视频帧一起渲染的字幕文本。

另请参阅setSubtitleText()。

QVideoFrameFormat QVideoFrame::surfaceFormat() const

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

[noexcept] void QVideoFrame::swap(QVideoFrame &other)

交换当前视频帧与other

QImage QVideoFrame::toImage() const

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

void QVideoFrame::unmap()

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

如果映射模式包含QVideoFrame::WriteOnly标志,这将持久化映射内存的当前内容到视频帧。

如果失败,不要调用unmap()函数。

另请参阅 map

int QVideoFrame::width() const

返回视频帧的宽度。

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

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

[noexcept] QVideoFrame &QVideoFrame::operator=(QVideoFrame &&other)

other移动到此QVideoFrame

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

other的内容分配给此视频帧。由于QVideoFrame是显式共享的,这两个实例将反映相同的帧。

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

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

版权所有 © 2024 The Qt Company Ltd. 本文档中的贡献内容均为各所有者的版权。提供的文档 根据 GNU 自由文档许可证版本 1.3 许可,由自由软件基金会发布。Qt 及其相关标志为芬兰及全球其他国家的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。