Sur cette page

QVideoFrame Class

La classe QVideoFrame représente une image de données vidéo. En savoir plus...

En-tête : #include <QVideoFrame>
CMake : find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake : QT += multimedia

Types publics

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

Fonctions publiques

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

Description détaillée

Un QVideoFrame encapsule les données de pixels d'une image vidéo, ainsi que des informations sur cette image.

Les images vidéo peuvent provenir de plusieurs sources : une image décodée media, un fichier camera ou une image générée par programmation. La manière dont les pixels sont décrits dans ces images peut varier considérablement, et certains formats de pixels offrent de meilleures possibilités de compression au détriment de la facilité d'utilisation.

Le contenu en pixels d’une image vidéo peut être mappé en mémoire à l’aide de la fonction ` map()`. Une fois l’appel à ` map()` réussi, les données vidéo sont accessibles via diverses fonctions. Certains formats de pixels YUV fournissent les données sur plusieurs plans. La méthode ` planeCount()` renvoie le nombre de plans utilisés.

Une fois mappées, les données vidéo de chaque plan sont accessibles via la fonction ` bits()`, qui renvoie un pointeur vers un tampon. La taille de ce tampon est fournie par la fonction ` mappedBytes()`, et la taille de chaque ligne est fournie par ` bytesPerLine()`. La valeur renvoyée par la fonction `handle()` peut également être utilisée pour accéder aux données d’image à l’aide des API natives du tampon interne (par exemple, un descripteur de texture OpenGL).

Une image vidéo peut également être associée à des informations d’horodatage. Ces horodatages peuvent être utilisés pour déterminer quand commencer et arrêter l’affichage de l’image.

Les objets `QVideoFrame` peuvent consommer une quantité importante de mémoire ou de ressources système et ne doivent pas être conservés plus longtemps que ne l’exige l’application.

Remarque : la copie des images vidéopouvant être coûteuse en ressources, QVideoFrame est explicitement partagé ; ainsi, toute modification apportée à une image vidéo s’appliquera également à toutes ses copies.

Voir également QAbstractVideoBuffer, QVideoFrameFormat et QVideoFrame::MapMode.

Documentation sur les types de membres

enum QVideoFrame::HandleType

Permet d'identifier le type d'un descripteur de tampon vidéo.

ConstanteValeurDescription
QVideoFrame::NoHandle0Le tampon n'a pas de descripteur ; ses données ne sont accessibles qu'en mappant le tampon.
QVideoFrame::RhiTextureHandle1Le descripteur du tampon est défini par l'interface matérielle de rendu (RHI) de Qt. La RHI est l'abstraction graphique interne de Qt pour les API 3D, telles que OpenGL, Vulkan, Metal et Direct 3D.

Voir aussi ` handleType()`.

enum QVideoFrame::MapMode

Décrit comment les données d'un tampon vidéo sont mappées dans la mémoire système.

ConstanteValeurDescription
QVideoFrame::NotMapped0x00Le tampon vidéo n'est pas mappé en mémoire.
QVideoFrame::ReadOnly0x01La mémoire mappée est remplie avec les données du tampon vidéo lors du mappage, mais son contenu peut être perdu lors du démappage.
QVideoFrame::WriteOnly0x02La mémoire mappée n’est pas initialisée lors du mappage, mais son contenu, éventuellement modifié, sera utilisé pour remplir le tampon vidéo lors du démappage.
QVideoFrame::ReadWriteReadOnly | WriteOnlyLa mémoire mappée est remplie avec les données du tampon vidéo, et le tampon vidéo est à nouveau rempli avec le contenu de la mémoire mappée lors de la démappage.

Voir également mapMode() et map().

Documentation des fonctions membres

QVideoFrame::QVideoFrame()

Crée une image vidéo nulle.

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

Crée un objet QVideoFrame à partir d'un objet QImage.

Si l’ QImage::Format correspond à l’un des formats répertoriés sur QVideoFrameFormat::PixelFormat, le QVideoFrame contiendra une instance de l’ image et utilisera ce format sans aucune conversion de format de pixels. Dans ce cas, les données de pixels ne seront copiées que si vous appelez QVideoFrame::map avec le drapeau WriteOnly tout en conservant l’image d’origine.

Sinon, si l'QImage::Format ne correspond à aucun format vidéo, l'image est d'abord convertie en un format (A)RGB pris en charge à l'aide de la fonction QImage::convertedTo() avec le drapeau Qt::AutoColor. Cela peut entraîner une perte de performances.

Si la fonction ` QImage::isNull()` renvoie `true` pour l’ QImage d’entrée, le `QVideoFrame` sera invalide et la fonction ` QVideoFrameFormat::isValid()` renverra `false`.

Cette fonction a été introduite dans Qt 6.8.

Voir également QVideoFrameFormat::pixelFormatFromImageFormat(), QImage::convertedTo() et QImage::isNull().

QVideoFrame::QVideoFrame(const QVideoFrameFormat &format)

Crée une image vidéo à partir de l'format de pixels indiquée.

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

Crée un objet `QVideoFrame` à partir d'un objet ` QAbstractVideoBuffer`.

L'videoBuffer spécifié fait référence à une instance d'un QAbstractVideoBuffer réimplémenté. L'instance doit contenir un tampon vidéo personnalisé préalloué et doit implémenter les méthodes QAbstractVideoBuffer::format, QAbstractVideoBuffer::map et QAbstractVideoBuffer::unmap pour le contenu GPU.

Si ` videoBuffer ` est nul ou reçoit une instance ` QVideoFrameFormat` non valide, le constructeur crée une image vidéo non valide.

L'image créée conservera la propriété du tampon vidéo spécifié pendant toute sa durée de vie. Étant donné que `QVideoFrame` est implémenté via un objet privé partagé, le tampon vidéo spécifié sera détruit lors de la destruction de la dernière copie de l'image vidéo créée.

Remarque : si une image vidéo a été transmise à ` QMediaRecorder ` ou à un pipeline de rendu, la durée de vie de l’image est indéfinie, et l’enregistreur multimédia peut la détruire dans un autre thread.

QVideoFrame contiendra sa propre instance d'QVideoFrameFormat. Lors de l'appel de setStreamFrameRate, setMirrored ou setRotation, le format interne peut être modifié, et surfaceFormat renverra une instance détachée.

Cette fonction a été introduite dans Qt 6.8.

Voir également QAbstractVideoBuffer et QVideoFrameFormat.

QVideoFrame::QVideoFrame(const QVideoFrame &other)

Crée une copie superficielle de ` other`. Étant donné que `QVideoFrame` est explicitement partagé, ces deux instances représenteront la même image.

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

Crée un objet `QVideoFrame` à partir de ` other`.

[noexcept] QVideoFrame::~QVideoFrame()

Supprime une image vidéo.

uchar *QVideoFrame::bits(int plane)

Renvoie un pointeur vers le début du tampon de données de trame pour une plane.

Cette valeur n’est valide que tant que les données de trame sont en cours de traitement ( mapped).

Les modifications apportées aux données accessibles via ce pointeur (lorsqu'il est mappé avec un accès en écriture) ne sont garanties comme ayant été persistées que lorsque la fonction ` unmap()` est appelée et que le tampon a été mappé en écriture.

Voir également map(), mappedBytes(), bytesPerLine() et planeCount().

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

Renvoie un pointeur vers le début du tampon de données de trame pour une plane.

Cette valeur n’est valide que tant que les données de trame sont en cours d’ mapped.

Si le tampon n’a pas été mappé avec un accès en lecture, son contenu sera initialement non initialisé.

Voir également map(), mappedBytes(), bytesPerLine() et planeCount().

int QVideoFrame::bytesPerLine(int plane) const

Renvoie le nombre d'octets contenus dans une ligne de balayage d'un fichier « plane ».

Cette valeur n’est valide que tant que les données de l’image sont de type « mapped ».

Voir également bits(), map(), mappedBytes() et planeCount().

qint64 QVideoFrame::endTime() const

Renvoie la durée d'affichage (en microsecondes) pendant laquelle une image doit rester à l'écran.

Une durée non valide est représentée par -1.

Voir également setEndTime().

QVideoFrame::HandleType QVideoFrame::handleType() const

Renvoie le type du descripteur d'une image vidéo.

Le type de descripteur peut être soit « NoHandle », ce qui signifie que l'image est stockée en mémoire, soit une texture RHI.

int QVideoFrame::height() const

Renvoie la hauteur d'une image vidéo.

bool QVideoFrame::isMapped() const

Détermine si le contenu d'une image vidéo est actuellement mappé en mémoire système.

Il s'agit d'une fonction pratique qui vérifie que l'MapMode de l'image n'est pas égale à QVideoFrame::NotMapped.

Renvoie « true » si le contenu de l'image vidéo est mappé en mémoire système, et « false » dans le cas contraire.

Voir également mapMode() et QVideoFrame::MapMode.

bool QVideoFrame::isReadable() const

Indique si le contenu mappé d'une image vidéo a été lu à partir de cette image au moment où elle a été mappée.

Il s'agit d'une fonction pratique qui vérifie si l'MapMode contient l'indicateur « QVideoFrame::WriteOnly ».

Renvoie « true » si le contenu de la mémoire mappée a été lu à partir de l'image vidéo, et « false » dans le cas contraire.

Voir également mapMode() et QVideoFrame::MapMode.

bool QVideoFrame::isValid() const

Détermine si une image vidéo est valide.

Une image non valide n'est associée à aucun tampon vidéo.

Renvoie « true » si l'image est valide, et « false » dans le cas contraire.

bool QVideoFrame::isWritable() const

Détermine si le contenu mappé d'une image vidéo sera conservé lorsque le mappage de cette image sera supprimé.

Il s'agit d'une fonction pratique qui vérifie si l'MapMode contient l'indicateur « QVideoFrame::WriteOnly ».

Renvoie « true » si l'image vidéo sera mise à jour lors de la désaffectation, et « false » dans le cas contraire.

Remarque : le résultat de la modification des données d’une image mappée en mode lecture seule est indéfini. Selon l’implémentation du tampon, les modifications peuvent être conservées, ou pire, altérer un tampon partagé.

Voir également mapMode() et QVideoFrame::MapMode.

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

Mappe le contenu d'une image vidéo vers la mémoire système (adressable par le processeur).

Dans certains cas, les données de l’image vidéo peuvent être stockées dans la mémoire vidéo ou dans une mémoire autrement inaccessible ; il est donc nécessaire de mapper une image avant d’accéder aux données de pixels. Cela peut impliquer de copier le contenu ; évitez donc de mapper et de démapper sauf si cela est nécessaire.

L’ mode de mappage indique si le contenu de la mémoire mappée doit être lu et/ou écrit dans l’image. Si le mode de mappage inclut l’indicateur « QVideoFrame::ReadOnly », la mémoire mappée sera remplie avec le contenu de l’image vidéo lors du mappage initial. Si le mode de mappage inclut l’indicateur « QVideoFrame::WriteOnly », le contenu de la mémoire mappée, éventuellement modifié, sera réécrit dans l’image lors du démappage.

Tant que la mémoire est mappée, on peut accéder directement au contenu d’une image vidéo via le pointeur renvoyé par la fonction ` bits()`.

Lorsque l’accès aux données n’est plus nécessaire, veillez à appeler la fonction ` unmap()` pour libérer la mémoire mappée et, le cas échéant, mettre à jour le contenu de l’image vidéo.

Si l’image vidéo a été mappée en mode lecture seule, il est possible de la mapper plusieurs fois en mode lecture seule (et de la démapper un nombre correspondant de fois). Dans tous les autres cas, il est nécessaire de démapper l’image avant de la mapper une deuxième fois.

Remarque : l'écriture dans une mémoire mappée en lecture seule est indéfinie et peut entraîner des modifications des données partagées ou des plantages.

Renvoie `true` si la trame a été mappée en mémoire selon l’ mode donnée, et `false` dans le cas contraire.

Voir également unmap(), mapMode() et bits().

QVideoFrame::MapMode QVideoFrame::mapMode() const

Renvoie le mode dans lequel une image vidéo a été mappée en mémoire système.

Voir également map() et QVideoFrame::MapMode.

int QVideoFrame::mappedBytes(int plane) const

Renvoie le nombre d'octets occupés par le plan plane des données de trame mappées.

Cette valeur n'est valide que tant que les données de trame sont en cours d'mapped.

Voir également ` map()`

bool QVideoFrame::mirrored() const

Indique si l'image doit être inversée par rapport à son axe vertical avant d'être affichée.

Les transformations de ` QVideoFrame`, notamment la rotation et la réflexion, sont utilisées uniquement pour l'affichage de l'image vidéo et s'appliquent par-dessus la transformation de surface, qui est déterminée par ` QVideoFrameFormat`. La réflexion s'applique après la rotation.

La réflexion est généralement nécessaire pour les images vidéo provenant de la caméra avant d'un appareil mobile.

Voir également ` setMirrored()`.

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

Utilise un objet ` QPainter` ( painter) pour convertir cette URL QVideoFrame en rect. L'objet `PaintOptions` ( options ) permet de définir une couleur d'arrière-plan et de spécifier comment l'élément ` rect ` doit être rempli avec la vidéo.

Remarque : le rendu s'effectuera généralement sans accélération matérielle lorsque vous utilisez cette méthode.

QVideoFrameFormat::PixelFormat QVideoFrame::pixelFormat() const

Renvoie le format de pixels de cette image vidéo.

int QVideoFrame::planeCount() const

Renvoie le nombre de plans dans l'image vidéo.

Voir aussi map().

QtVideo::Rotation QVideoFrame::rotation() const

Renvoie l'angle de rotation dans le sens des aiguilles d'une montre dont doit faire l'objet l'image avant son affichage.

Les transformations de ` QVideoFrame`, en particulier la rotation et la réflexion, ne sont utilisées que pour l’affichage de l’image vidéo et s’appliquent par-dessus la transformation de surface, qui est déterminée par ` QVideoFrameFormat`. La rotation s’applique avant la réflexion.

Voir également setRotation().

void QVideoFrame::setEndTime(qint64 time)

Définit l'time de présentation (en microsecondes) à laquelle l'affichage d'une image doit s'arrêter.

Une durée non valide est représentée par -1.

Voir également endTime().

void QVideoFrame::setMirrored(bool mirrored)

Détermine si l'image doit subir une transformation de type « mirrored » autour de son axe vertical avant d'être affichée.

Les transformations de l'QVideoFrame, notamment la rotation et la réflexion, ne sont utilisées que pour l'affichage de l'image vidéo et s'appliquent en plus de la transformation de surface, qui est déterminée par QVideoFrameFormat. La réflexion s'applique après la rotation.

La réflexion est généralement nécessaire pour les images vidéo provenant de la caméra avant d’un appareil mobile.

La valeur par défaut est ` false`.

Voir également mirrored().

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

Définit l’ angle selon laquelle l’image doit être pivotée dans le sens des aiguilles d’une montre avant d’être affichée.

Les transformations de ` QVideoFrame`, notamment la rotation et la réflexion, ne sont utilisées que pour l'affichage de l'image vidéo et s'appliquent par-dessus la transformation de surface, qui est déterminée par ` QVideoFrameFormat`. La rotation s'applique avant la réflexion.

La valeur par défaut est ` QtVideo::Rotation::None`.

Voir également rotation().

void QVideoFrame::setStartTime(qint64 time)

Définit l'time e de présentation (en microsecondes) à laquelle l'image doit s'afficher pour la première fois.

Une durée non valide est représentée par -1.

Voir également startTime().

void QVideoFrame::setStreamFrameRate(qreal rate)

Définit la fréquence d'rate d'un flux vidéo en images par seconde.

Voir aussi streamFrameRate().

void QVideoFrame::setSubtitleText(const QString &text)

Définit le texte des sous-titres qui doit s'afficher avec cette image vidéo sur text.

Voir également subtitleText().

QSize QVideoFrame::size() const

Renvoie les dimensions d'une image vidéo.

qint64 QVideoFrame::startTime() const

Renvoie l'instant d'affichage (en microsecondes) auquel l'image doit être affichée.

Une durée non valide est représentée par -1.

Voir également setStartTime().

qreal QVideoFrame::streamFrameRate() const

Renvoie la fréquence d'images d'un flux vidéo, exprimée en images par seconde.

Voir aussi setStreamFrameRate().

QString QVideoFrame::subtitleText() const

Renvoie le texte du sous-titre qui doit être affiché en même temps que cette image vidéo.

Voir également setSubtitleText().

QVideoFrameFormat QVideoFrame::surfaceFormat() const

Renvoie le format de surface de cette image vidéo.

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

Permet d'échanger l'image vidéo actuelle avec celle de other.

QImage QVideoFrame::toImage() const

Convertit l'image vidéo actuelle en image statique.

La conversion s'appuie sur les données de pixels actuelles et l'surface format. Les transformations de l'image n'ont aucune incidence sur le résultat, car elles sont appliquées uniquement à des fins d'affichage.

void QVideoFrame::unmap()

Libère la mémoire mappée par la fonction map().

Si la fonction ` MapMode ` a été appelée avec le drapeau ` QVideoFrame::WriteOnly `, le contenu actuel de la mémoire mappée sera conservé dans l'image vidéo.

La fonction unmap() ne doit pas être appelée si la fonction map() a échoué.

Voir également map().

int QVideoFrame::width() const

Renvoie la largeur d'une image vidéo.

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

Renvoie « true » si les adresses QVideoFrame et other ne correspondent pas à la même trame.

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

Déplace « other » vers cette adresse : QVideoFrame.

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

Attribue le contenu de ` other ` à cette image vidéo. Étant donné que ` QVideoFrame ` est explicitement partagé, ces deux instances refléteront la même image.

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

Renvoie « true » si les adresses QVideoFrame et other correspondent à la même trame.

© 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.