En esta página

QVideoFrame Class

La clase QVideoFrame representa un fotograma de datos de vídeo. Más...

Cabecera: #include <QVideoFrame>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia

Tipos públicos

enum HandleType { NoHandle, RhiTextureHandle }
enum MapMode { NotMapped, ReadOnly, WriteOnly, ReadWrite }

Funciones Públicas

QVideoFrame()
(since 6.8) QVideoFrame(const QImage &image)
QVideoFrame(const QVideoFrameFormat &format)
(since 6.8) QVideoFrame(std::unique_ptr<QAbstractVideoBuffer> videoBuffer)
QVideoFrame(const QVideoFrame &other)
QVideoFrame(QVideoFrame &&other)
~QVideoFrame()
uchar *bits(int plane)
const uchar *bits(int plane) const
int bytesPerLine(int plane) const
qint64 endTime() const
QVideoFrame::HandleType handleType() const
int height() const
bool isMapped() const
bool isReadable() const
bool isValid() const
bool isWritable() const
bool map(QVideoFrame::MapMode mode)
QVideoFrame::MapMode mapMode() const
int mappedBytes(int plane) const
bool mirrored() const
void paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options)
QVideoFrameFormat::PixelFormat pixelFormat() const
int planeCount() const
QtVideo::Rotation rotation() const
void setEndTime(qint64 time)
void setMirrored(bool mirrored)
void setRotation(QtVideo::Rotation angle)
void setStartTime(qint64 time)
void setStreamFrameRate(qreal rate)
void setSubtitleText(const QString &text)
QSize size() const
qint64 startTime() const
qreal streamFrameRate() const
QString subtitleText() const
QVideoFrameFormat surfaceFormat() const
void swap(QVideoFrame &other)
QImage toImage() const
void unmap()
int width() const
bool operator!=(const QVideoFrame &other) const
QVideoFrame &operator=(QVideoFrame &&other)
QVideoFrame &operator=(const QVideoFrame &other)
bool operator==(const QVideoFrame &other) const

Descripción detallada

Un QVideoFrame encapsula los datos de píxeles de un fotograma de vídeo, e información sobre el fotograma.

Los fotogramas de vídeo pueden proceder de varios lugares - decodificados media, un camera, o generados mediante programación. La forma en que se describen los píxeles en estos fotogramas puede variar enormemente, y algunos formatos de píxel ofrecen mayores oportunidades de compresión a expensas de la facilidad de uso.

El contenido de píxeles de un fotograma de vídeo se puede asignar a la memoria mediante la función map(). Después de una llamada exitosa a map(), se puede acceder a los datos de vídeo a través de varias funciones. Algunos de los formatos de píxel YUV proporcionan los datos en varios planos. El método planeCount() devolverá la cantidad de planos que se están utilizando.

Mientras se mapea, se puede acceder a los datos de vídeo de cada plano mediante la función bits(), que devuelve un puntero a un búfer. El tamaño de este búfer viene dado por la función mappedBytes(), y el tamaño de cada línea viene dado por bytesPerLine(). El valor de retorno de la función handle() también puede utilizarse para acceder a los datos del fotograma utilizando las APIs nativas del buffer interno (por ejemplo - un handle de textura OpenGL).

Un fotograma de vídeo también puede tener asociada información de fecha y hora. Estas marcas de tiempo pueden ser usadas para determinar cuando empezar y parar de mostrar el cuadro.

Los objetos QVideoFrame pueden consumir una cantidad significativa de memoria o recursos del sistema y no deben ser retenidos por más tiempo del requerido por la aplicación.

Nota: Dado que los fotogramas de vídeo pueden ser caros de copiar, QVideoFrame es explícitamente compartido, por lo que cualquier cambio realizado en un fotograma de vídeo también se aplicará a cualquier copia.

Véase también QAbstractVideoBuffer, QVideoFrameFormat, y QVideoFrame::MapMode.

Documentación de tipos de miembros

enum QVideoFrame::HandleType

Identifica el tipo de manejador de una memoria intermedia de vídeo.

ConstanteValorDescripción
QVideoFrame::NoHandle0El buffer no tiene handle, sólo se puede acceder a sus datos mapeando el buffer.
QVideoFrame::RhiTextureHandle1El handle del buffer está definido por The Qt Rendering Hardware Interface (RHI). RHI es la abstracción gráfica interna de Qt para APIs 3D, como OpenGL, Vulkan, Metal y Direct 3D.

Véase también handleType().

enum QVideoFrame::MapMode

Enumera cómo se asignan los datos de un búfer de vídeo a la memoria del sistema.

ConstanteValorDescripción
QVideoFrame::NotMapped0x00El búfer de vídeo no se asigna a la memoria.
QVideoFrame::ReadOnly0x01La memoria mapeada se rellena con datos del buffer de video cuando se mapea, pero el contenido de la memoria mapeada puede ser descartado cuando se desmapea.
QVideoFrame::WriteOnly0x02La memoria asignada no se inicializa cuando se asigna, pero el contenido posiblemente modificado se utilizará para rellenar el búfer de vídeo cuando se desasigne.
QVideoFrame::ReadWriteReadOnly | WriteOnlyLa memoria mapeada se rellena con datos del búfer de vídeo, y el búfer de vídeo se vuelve a rellenar con el contenido de la memoria mapeada cuando se desmapea.

Véase también mapMode() y map().

Documentación de las funciones miembro

QVideoFrame::QVideoFrame()

Construye un fotograma de vídeo nulo.

[explicit, since 6.8] QVideoFrame::QVideoFrame(const QImage &image)

Construye un QVideoFrame a partir de un QImage.

Si QImage::Format coincide con uno de los formatos de QVideoFrameFormat::PixelFormat, el QVideoFrame contendrá una instancia de image y utilizará ese formato sin ninguna conversión de formato de píxel. En este caso, los datos de píxeles sólo se copiarán si se llama a QVideoFrame::map con la bandera WriteOnly manteniendo la imagen original.

De lo contrario, si QImage::Format no coincide con ninguno de los formatos de vídeo, la imagen se convierte primero a un formato (A)RGB compatible utilizando QImage::convertedTo() con el indicador Qt::AutoColor. Esto puede suponer una penalización de rendimiento.

Si QImage::isNull() evalúa a true para la entrada QImage, el QVideoFrame será inválido y QVideoFrameFormat::isValid() devolverá false.

Esta función se introdujo en Qt 6.8.

Ver también QVideoFrameFormat::pixelFormatFromImageFormat(), QImage::convertedTo(), y QImage::isNull().

QVideoFrame::QVideoFrame(const QVideoFrameFormat &format)

Construye un fotograma de vídeo del píxel dado format.

[explicit, since 6.8] QVideoFrame::QVideoFrame(std::unique_ptr<QAbstractVideoBuffer> videoBuffer)

Construye un QVideoFrame a partir de un QAbstractVideoBuffer.

El videoBuffer especificado se refiere a una instancia de un QAbstractVideoBuffer reimplementado. Se espera que la instancia contenga un búfer de vídeo personalizado preasignado y debe implementar QAbstractVideoBuffer::format, QAbstractVideoBuffer::map, y QAbstractVideoBuffer::unmap para contenido GPU.

Si videoBuffer es nulo u obtiene un QVideoFrameFormat inválido , los constructores crean un fotograma de vídeo inválido.

El frame creado mantendrá la propiedad del buffer de video especificado durante toda su vida. Considerando que QVideoFrame es implementado a través de un objeto privado compartido, el buffer de video especificado será destruido al destruirse la última copia del cuadro de video creado.

Nota, si un cuadro de video ha sido pasado a QMediaRecorder o a un pipeline de renderizado, el tiempo de vida del cuadro es indefinido, y el grabador de medios puede destruirlo en un thread diferente.

QVideoFrame contendrá una instancia propia de QVideoFrameFormat. Al invocar setStreamFrameRate, setMirrored, o setRotation, el formato interno puede ser modificado, y surfaceFormat devolverá una instancia separada.

Esta función se introdujo en Qt 6.8.

Véase también QAbstractVideoBuffer y QVideoFrameFormat.

QVideoFrame::QVideoFrame(const QVideoFrame &other)

Construye una copia superficial de other. Dado que QVideoFrame es explícitamente compartido, estas dos instancias reflejarán el mismo frame.

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

Construye un QVideoFrame desplazándose desde other.

[noexcept] QVideoFrame::~QVideoFrame()

Destruye un fotograma de vídeo.

uchar *QVideoFrame::bits(int plane)

Devuelve un puntero al inicio del búfer de datos de trama para un plane.

Este valor sólo es válido mientras los datos del marco estén en mapped.

Los cambios realizados en los datos a los que se accede a través de este puntero (cuando se mapean con acceso de escritura) sólo se garantiza que hayan persistido cuando se llame a unmap() y cuando el búfer haya sido mapeado para escritura.

Véase también map(), mappedBytes(), bytesPerLine() y planeCount().

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

Devuelve un puntero al inicio del búfer de datos de trama para un plane.

Este valor sólo es válido mientras los datos de la trama son mapped.

Si el búfer no fue mapeado con acceso de lectura, el contenido de este búfer estará inicialmente sin inicializar.

Véase también map(), mappedBytes(), bytesPerLine(), y planeCount().

int QVideoFrame::bytesPerLine(int plane) const

Devuelve el número de bytes en una línea de exploración de un plane.

Este valor sólo es válido mientras los datos de la trama sean mapped.

Véase también bits(), map(), mappedBytes() y planeCount().

qint64 QVideoFrame::endTime() const

Devuelve el tiempo de presentación (en microsegundos) cuando un fotograma debe dejar de mostrarse.

Un tiempo no válido se representa como -1.

Véase también setEndTime().

QVideoFrame::HandleType QVideoFrame::handleType() const

Devuelve el tipo de manejador de un fotograma de vídeo.

El tipo de manejador puede ser NoHandle, lo que significa que el fotograma está basado en memoria, o una textura RHI.

int QVideoFrame::height() const

Devuelve la altura de un fotograma de vídeo.

bool QVideoFrame::isMapped() const

Identifica si el contenido de un fotograma de vídeo está actualmente asignado a la memoria del sistema.

Se trata de una función práctica que comprueba que MapMode del fotograma no es igual a QVideoFrame::NotMapped.

Devuelve true si el contenido del fotograma de vídeo está mapeado en la memoria del sistema, y false en caso contrario.

Véase también mapMode() y QVideoFrame::MapMode.

bool QVideoFrame::isReadable() const

Identifica si el contenido mapeado de un fotograma de vídeo se leyó del fotograma cuando se mapeó.

Se trata de una función práctica que comprueba si MapMode contiene el indicador QVideoFrame::WriteOnly.

Devuelve true si el contenido de la memoria mapeada se leyó del fotograma de vídeo, y false en caso contrario.

Véase también mapMode() y QVideoFrame::MapMode.

bool QVideoFrame::isValid() const

Identifica si un fotograma de vídeo es válido.

Un fotograma no válido no tiene ningún búfer de vídeo asociado.

Devuelve true si el fotograma es válido, y false si no lo es.

bool QVideoFrame::isWritable() const

Identifica si el contenido mapeado de un fotograma de vídeo se mantendrá cuando el fotograma se desmapee.

Se trata de una función práctica que comprueba si MapMode contiene el indicador QVideoFrame::WriteOnly.

Devuelve true si el fotograma de vídeo se actualizará cuando se desmapee, y false en caso contrario.

Nota: El resultado de alterar los datos de un fotograma mapeado en modo sólo lectura es indefinido. Dependiendo de la implementación del buffer los cambios pueden persistir, o peor alterar un buffer compartido.

Véase también mapMode() y QVideoFrame::MapMode.

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

Asigna el contenido de un fotograma de vídeo a la memoria del sistema (direccionable por la CPU).

En algunos casos, los datos del fotograma de vídeo pueden estar almacenados en la memoria de vídeo o en otra memoria inaccesible, por lo que es necesario mapear un fotograma antes de acceder a los datos de píxeles. Esto puede implicar copiar el contenido, así que evite mapear y desmapear a menos que sea necesario.

El mapa mode indica si el contenido de la memoria mapeada debe leerse y/o escribirse en el fotograma. Si el modo de mapeo incluye la bandera QVideoFrame::ReadOnly la memoria mapeada será poblada con el contenido del cuadro de video cuando sea mapeado inicialmente. Si el modo de mapeo incluye la bandera QVideoFrame::WriteOnly, el contenido de la memoria mapeada posiblemente modificada se escribirá de nuevo en el cuadro cuando se desmapee.

Mientras está mapeado, se puede acceder directamente al contenido de un fotograma de vídeo a través del puntero devuelto por la función bits().

Cuando el acceso a los datos ya no sea necesario, asegúrese de llamar a la función unmap() para liberar la memoria mapeada y posiblemente actualizar el contenido del fotograma de vídeo.

Si el fotograma de vídeo ha sido mapeado en modo de sólo lectura, es permisible mapearlo múltiples veces en modo de sólo lectura (y desmapearlo un número correspondiente de veces). En todos los demás casos, es necesario desmapear el cuadro antes de mapearlo por segunda vez.

Nota: Escribir en memoria mapeada como sólo lectura no está definido, y puede provocar cambios en los datos compartidos o fallos.

Devuelve true si el marco fue mapeado a la memoria en el mode dado y false en caso contrario.

Véase también unmap(), mapMode(), y bits().

QVideoFrame::MapMode QVideoFrame::mapMode() const

Devuelve el modo en que un fotograma de vídeo fue asignado a la memoria del sistema.

Véase también map() y QVideoFrame::MapMode.

int QVideoFrame::mappedBytes(int plane) const

Devuelve el número de bytes ocupados por el plano plane de los datos de trama mapeados.

Este valor sólo es válido mientras los datos de trama sean mapped.

Véase también map().

bool QVideoFrame::mirrored() const

Devuelve si el fotograma debe reflejarse alrededor de su eje vertical antes de mostrarse.

Las transformaciones de QVideoFrame, en concreto la rotación y el reflejo, sólo se utilizan para mostrar el fotograma de vídeo y se aplican sobre la transformación de la superficie, que viene determinada por QVideoFrameFormat. El reflejo se aplica después de la rotación.

El mirroring suele ser necesario para los fotogramas de vídeo procedentes de la cámara frontal de un dispositivo móvil.

Véase también setMirrored().

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

Utiliza un QPainter, painter, para renderizar este QVideoFrame a rect. El PaintOptions options se puede utilizar para especificar un color de fondo y cómo rect debe ser llenado con el vídeo.

Nota: que el renderizado normalmente ocurrirá sin aceleración de hardware cuando se utilice este método.

QVideoFrameFormat::PixelFormat QVideoFrame::pixelFormat() const

Devuelve el formato de píxel de este fotograma de vídeo.

int QVideoFrame::planeCount() const

Devuelve el número de planos del fotograma de vídeo.

Véase también map().

QtVideo::Rotation QVideoFrame::rotation() const

Devuelve el ángulo en el que debe girarse el fotograma en el sentido de las agujas del reloj antes de mostrarlo.

Las transformaciones de QVideoFrame, concretamente la rotación y el reflejo, sólo se utilizan para mostrar el fotograma de vídeo y se aplican sobre la transformación de la superficie, que viene determinada por QVideoFrameFormat. La rotación se aplica antes que el reflejo.

Véase también setRotation().

void QVideoFrame::setEndTime(qint64 time)

Establece la presentación time (en microsegundos) cuando un fotograma debe dejar de mostrarse.

Un tiempo no válido se representa como -1.

Véase también endTime().

void QVideoFrame::setMirrored(bool mirrored)

Establece si el fotograma debe ser mirrored alrededor de su eje vertical antes de ser mostrado.

Las transformaciones de QVideoFrame, concretamente la rotación y el reflejo, sólo se utilizan para mostrar el fotograma de vídeo y se aplican sobre la transformación de la superficie, que viene determinada por QVideoFrameFormat. El reflejo se aplica después de la rotación.

El reflejo suele ser necesario para los fotogramas de vídeo procedentes de la cámara frontal de un dispositivo móvil.

El valor por defecto es false.

Véase también mirrored().

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

Establece en angle que el fotograma debe girarse en el sentido de las agujas del reloj antes de mostrarse.

Las transformaciones de QVideoFrame, concretamente la rotación y el reflejo, sólo se utilizan para mostrar el fotograma de vídeo y se aplican sobre la transformación de la superficie, que viene determinada por QVideoFrameFormat. La rotación se aplica antes que el reflejo.

El valor por defecto es QtVideo::Rotation::None.

Véase también rotation().

void QVideoFrame::setStartTime(qint64 time)

Establece la presentación time (en microsegundos) cuando el fotograma debe mostrarse inicialmente.

Un tiempo no válido se representa como -1.

Véase también startTime().

void QVideoFrame::setStreamFrameRate(qreal rate)

Establece los fotogramas rate de un flujo de vídeo en fotogramas por segundo.

Véase también streamFrameRate().

void QVideoFrame::setSubtitleText(const QString &text)

Establece el texto de los subtítulos que debe ser renderizado junto con este fotograma de vídeo en text.

Véase también subtitleText().

QSize QVideoFrame::size() const

Devuelve las dimensiones de un fotograma de vídeo.

qint64 QVideoFrame::startTime() const

Devuelve el tiempo de presentación (en microsegundos) en que debe mostrarse el fotograma.

Un tiempo no válido se representa como -1.

Véase también setStartTime().

qreal QVideoFrame::streamFrameRate() const

Devuelve la frecuencia de imagen de un flujo de vídeo en fotogramas por segundo.

Véase también setStreamFrameRate().

QString QVideoFrame::subtitleText() const

Devuelve el texto de los subtítulos que debe ser renderizado junto con este fotograma de vídeo.

Véase también setSubtitleText().

QVideoFrameFormat QVideoFrame::surfaceFormat() const

Devuelve el formato de superficie de este fotograma de vídeo.

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

Intercambia el fotograma de vídeo actual con other.

QImage QVideoFrame::toImage() const

Convierte el fotograma de vídeo actual en imagen.

La conversión se basa en los datos de píxeles actuales y en surface format. Las transformaciones del fotograma no afectan al resultado, ya que sólo se aplican para la presentación.

void QVideoFrame::unmap()

Libera la memoria mapeada por la función map().

Si MapMode incluyó la bandera QVideoFrame::WriteOnly esto persistirá el contenido actual de la memoria mapeada al cuadro de video.

unmap() no debe ser llamada si la función map() ha fallado.

Véase también map().

int QVideoFrame::width() const

Devuelve la anchura de un fotograma de vídeo.

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

Devuelve true si este QVideoFrame y other no reflejan el mismo marco.

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

Mueve other en este QVideoFrame.

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

Asigna el contenido de other a este fotograma de vídeo. Dado que QVideoFrame se comparte explícitamente, estas dos instancias reflejarán el mismo fotograma.

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

Devuelve true si este QVideoFrame y other reflejan el mismo marco.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.