Auf dieser Seite

QVideoFrame Class

Die Klasse „QVideoFrame“ repräsentiert einen Frame mit Videodaten. Mehr...

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

Öffentliche Typen

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

Öffentliche Funktionen

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

Ausführliche Beschreibung

Ein QVideoFrame kapselt die Pixeldaten eines Videobildes sowie Informationen über das Bild.

Videobilder können aus verschiedenen Quellen stammen – aus dem dekodierten „ media “, einem „ camera “ oder programmgesteuert generiert sein. Die Art und Weise, wie Pixel in diesen Bildern beschrieben werden, kann stark variieren, und manche Pixelformate bieten bessere Komprimierungsmöglichkeiten auf Kosten der Benutzerfreundlichkeit.

Der Pixelinhalt eines Videobildes kann mithilfe der Funktion ` map()` in den Speicher abgebildet werden. Nach einem erfolgreichen Aufruf von ` map()` kann über verschiedene Funktionen auf die Videodaten zugegriffen werden. Einige der YUV-Pixelformate stellen die Daten in mehreren Ebenen bereit. Die Methode ` planeCount()` gibt die Anzahl der verwendeten Ebenen zurück.

Während des Abbildens kann auf die Videodaten jeder Ebene mithilfe der Funktion ` bits()` zugegriffen werden, die einen Zeiger auf einen Puffer zurückgibt. Die Größe dieses Puffers wird durch die Funktion ` mappedBytes()` angegeben, und die Größe jeder Zeile wird durch ` bytesPerLine()` angegeben. Der Rückgabewert der Funktion `handle()` kann auch verwendet werden, um über die nativen APIs des internen Puffers auf Bilddaten zuzugreifen (zum Beispiel über ein OpenGL-Textur-Handle).

Ein Videobild kann zudem mit Zeitstempelinformationen verknüpft sein. Anhand dieser Zeitstempel lässt sich bestimmen, wann die Anzeige des Bildes gestartet und beendet werden soll.

QVideoFrame-Objekte können eine beträchtliche Menge an Speicher oder Systemressourcen beanspruchen und sollten nicht länger als für die Anwendung erforderlich gehalten werden.

Hinweis: Da das Kopieren von Videobildern rechenintensiv sein kann, wird QVideoFrame explizit gemeinsam genutzt, sodass jede an einem Videobild vorgenommene Änderung auch für alle Kopien gilt.

Siehe auch QAbstractVideoBuffer, QVideoFrameFormat und QVideoFrame::MapMode.

Dokumentation zu Mitgliedstypen

enum QVideoFrame::HandleType

Ermittelt den Typ eines Handles für Videopuffer.

KonstanteWertBeschreibung
QVideoFrame::NoHandle0Der Puffer hat kein Handle; auf seine Daten kann nur durch Zuordnung des Puffers zugegriffen werden.
QVideoFrame::RhiTextureHandle1Das Handle des Puffers wird durch das Qt Rendering Hardware Interface (RHI) definiert. RHI ist die interne Grafikabstraktion von Qt für 3D-APIs wie OpenGL, Vulkan, Metal und Direct 3D.

Siehe auch ` handleType()`.

enum QVideoFrame::MapMode

Beschreibt, wie die Daten eines Videopuffers auf den Systemspeicher abgebildet werden.

KonstanteWertBeschreibung
QVideoFrame::NotMapped0x00Der Videopuffer wird nicht in den Speicher abgebildet.
QVideoFrame::ReadOnly0x01Der zugeordnete Speicher wird beim Zuweisen mit Daten aus dem Videopuffer gefüllt, der Inhalt des zugeordneten Speichers kann jedoch beim Aufheben der Zuordnung verworfen werden.
QVideoFrame::WriteOnly0x02Der zugeordnete Speicher ist bei der Zuordnung nicht initialisiert, doch der möglicherweise geänderte Inhalt wird beim Aufheben der Zuordnung zum Befüllen des Videopuffers verwendet.
QVideoFrame::ReadWriteReadOnly | WriteOnlyDer zugeordnete Speicher wird mit Daten aus dem Videopuffer gefüllt, und der Videopuffer wird beim Aufheben der Zuordnung mit dem Inhalt des zugeordneten Speichers neu gefüllt.

Siehe auch mapMode() und map().

Dokumentation zu den Member-Funktionen

QVideoFrame::QVideoFrame()

Erstellt einen leeren Videorahmen.

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

Erstellt ein `QVideoFrame` aus einem ` QImage`.

Wenn das ` QImage::Format ` mit einem der Formate unter QVideoFrameFormat::PixelFormat übereinstimmt, enthält das `QVideoFrame` eine Instanz von ` image ` und verwendet dieses Format ohne Pixelformatkonvertierung. In diesem Fall werden die Pixeldaten nur dann kopiert, wenn Sie ` QVideoFrame::map ` mit dem Flag ` WriteOnly ` aufrufen, wobei das Originalbild erhalten bleibt.

Andernfalls, wenn das „ QImage::Format “ mit keinem der Videoformate übereinstimmt, wird das Bild zunächst mithilfe von ` QImage::convertedTo()` mit dem Flag ` Qt::AutoColor ` in ein unterstütztes (A)RGB-Format konvertiert. Dies kann zu Leistungseinbußen führen.

Wenn QImage::isNull() für das eingegebene QImage den Wert „true“ ergibt, ist der QVideoFrame ungültig und QVideoFrameFormat::isValid() gibt „false“ zurück.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch ` QVideoFrameFormat::pixelFormatFromImageFormat()`, ` QImage::convertedTo()` und ` QImage::isNull()`.

QVideoFrame::QVideoFrame(const QVideoFrameFormat &format)

Erzeugt ein Videobild aus dem angegebenen Pixel format.

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

Erstellt einen QVideoFrame aus einem QAbstractVideoBuffer.

Das angegebene ` videoBuffer ` verweist auf eine Instanz einer neu implementierten ` QAbstractVideoBuffer`. Die Instanz muss einen vorab zugewiesenen benutzerdefinierten Videopuffer enthalten und die Methoden ` QAbstractVideoBuffer::format`, ` QAbstractVideoBuffer::map` sowie ` QAbstractVideoBuffer::unmap ` für GPU-Inhalte implementieren.

Ist ` videoBuffer ` null oder erhält es ein ungültiges ` QVideoFrameFormat`, erstellt der Konstruktor einen ungültigen Videorahmen.

Das erstellte Bild behält während seiner gesamten Lebensdauer das Eigentumsrecht am angegebenen Videopuffer. Da `QVideoFrame` über ein gemeinsam genutztes privates Objekt implementiert ist, wird der angegebene Videopuffer bei der Zerstörung der letzten Kopie des erstellten Videobildes zerstört.

Beachten Sie: Wenn ein Videorahmen an ` QMediaRecorder ` oder eine Rendering-Pipeline übergeben wurde, ist die Lebensdauer des Rahmens undefiniert, und der Medienrekorder kann ihn in einem anderen Thread zerstören.

`QVideoFrame` enthält eine eigene Instanz von ` QVideoFrameFormat`. Beim Aufruf von ` setStreamFrameRate`, ` setMirrored` oder ` setRotation` kann das interne Format geändert werden, und ` surfaceFormat ` gibt eine abgekoppelte Instanz zurück.

Diese Funktion wurde in Qt 6.8 eingeführt.

Siehe auch QAbstractVideoBuffer und QVideoFrameFormat.

QVideoFrame::QVideoFrame(const QVideoFrame &other)

Erstellt eine flache Kopie von ` other`. Da `QVideoFrame` explizit gemeinsam genutzt wird, spiegeln diese beiden Instanzen denselben Frame wider.

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

Erstellt ein `QVideoFrame` durch Abrufen von ` other`.

[noexcept] QVideoFrame::~QVideoFrame()

Löscht ein Videobild.

uchar *QVideoFrame::bits(int plane)

Gibt einen Zeiger auf den Anfang des Frame-Datenpuffers für einen „ plane “ zurück.

Dieser Wert ist nur gültig, solange die Frame-Daten im Status „ mapped “ sind.

Änderungen an Daten, auf die über diesen Zeiger zugegriffen wird (wenn dieser mit Schreibzugriff zugeordnet ist), werden garantiert erst dann dauerhaft gespeichert, wenn „ unmap()“ aufgerufen wird und der Puffer zum Schreiben zugeordnet wurde.

Siehe auch ` map()`, ` mappedBytes()`, ` bytesPerLine()` und ` planeCount()`.

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

Gibt einen Zeiger auf den Anfang des Frame-Datenpuffers für ein ` plane` zurück.

Dieser Wert ist nur gültig, solange die Frame-Daten als „ mapped “ vorliegen.

Wenn der Puffer nicht mit Lesezugriff zugeordnet wurde, ist der Inhalt dieses Puffers zunächst nicht initialisiert.

Siehe auch map(), mappedBytes(), bytesPerLine() und planeCount().

int QVideoFrame::bytesPerLine(int plane) const

Gibt die Anzahl der Bytes in einer Scanlinie eines „ plane “ zurück.

Dieser Wert ist nur gültig, solange die Frame-Daten den Status „ mapped “ haben.

Siehe auch „ bits()“, „ map()“, „ mappedBytes()“ und „ planeCount()“.

qint64 QVideoFrame::endTime() const

Gibt die Anzeigedauer (in Mikrosekunden) zurück, nach der ein Bild nicht mehr angezeigt werden soll.

Eine ungültige Zeit wird als -1 dargestellt.

Siehe auch „ setEndTime()“.

QVideoFrame::HandleType QVideoFrame::handleType() const

Gibt den Typ des Handles eines Videobildes zurück.

Der Handle-Typ kann entweder „ NoHandle “ sein, was bedeutet, dass das Bild speicherbasiert ist, oder eine RHI-Textur.

int QVideoFrame::height() const

Gibt die Höhe eines Videobildes zurück.

bool QVideoFrame::isMapped() const

Prüft, ob der Inhalt eines Videobildes derzeit im Systemspeicher abgebildet ist.

Dies ist eine Hilfsfunktion, die prüft, ob der Wert von „ MapMode “ des Frames nicht gleich „ QVideoFrame::NotMapped “ ist.

Gibt „true“ zurück, wenn der Inhalt des Videobildes im Systemspeicher abgebildet ist, andernfalls „false“.

Siehe auch „ mapMode()“ und „ QVideoFrame::MapMode “.

bool QVideoFrame::isReadable() const

Gibt an, ob die zugeordneten Inhalte eines Videobildes beim Zuordnen aus dem Bild gelesen wurden.

Dies ist eine Hilfsfunktion, die prüft, ob die „ MapMode “ das Flag „ QVideoFrame::WriteOnly “ enthält.

Gibt „true“ zurück, wenn der Inhalt des zugeordneten Speichers aus dem Videobild gelesen wurde, andernfalls „false“.

Siehe auch „ mapMode()“ und „ QVideoFrame::MapMode “.

bool QVideoFrame::isValid() const

Gibt an, ob ein Videobild gültig ist.

Einem ungültigen Bild ist kein Videopuffer zugeordnet.

Gibt „true“ zurück, wenn das Bild gültig ist, und „false“, wenn es ungültig ist.

bool QVideoFrame::isWritable() const

Gibt an, ob die zugeordneten Inhalte eines Videobildes erhalten bleiben, wenn die Zuordnung des Bildes aufgehoben wird.

Dies ist eine Hilfsfunktion, die prüft, ob der „ MapMode “ das Flag „ QVideoFrame::WriteOnly “ enthält.

Gibt „true“ zurück, wenn das Videobild beim Aufheben der Zuordnung aktualisiert wird, andernfalls „false“.

Hinweis: Das Ergebnis der Änderung der Daten eines Frames, der im schreibgeschützten Modus zugeordnet ist, ist undefiniert. Je nach Pufferimplementierung können die Änderungen beibehalten werden oder im schlimmsten Fall einen gemeinsam genutzten Puffer verändern.

Siehe auch mapMode() und QVideoFrame::MapMode.

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

Ordnet den Inhalt eines Videobildes dem Systemspeicher (der von der CPU adressierbar ist) zu.

In einigen Fällen können die Daten des Videobildes im Videospeicher oder in einem anderweitig unzugänglichen Speicherbereich gespeichert sein, sodass es notwendig ist, ein Bild abzubilden, bevor auf die Pixeldaten zugegriffen werden kann. Dies kann das Kopieren des Inhalts erfordern; vermeiden Sie daher das Abbilden und Aufheben der Abbildung, sofern dies nicht erforderlich ist.

Die Zuordnungs mode gibt an, ob der Inhalt des zugeordneten Speichers aus dem Bild gelesen und/oder in das Bild geschrieben werden soll. Enthält der Zuordnungsmodus das Flag „ QVideoFrame::ReadOnly “, wird der zugeordnete Speicher bei der ersten Zuordnung mit dem Inhalt des Videobildes gefüllt. Enthält der Zuordnungsmodus das Flag „ QVideoFrame::WriteOnly “, wird der Inhalt des möglicherweise geänderten zugeordneten Speichers beim Aufheben der Zuordnung wieder in das Bild zurückgeschrieben.

Solange der Speicherbereich zugeordnet ist, kann direkt über den von der Funktion ` bits()` zurückgegebenen Zeiger auf den Inhalt eines Videobildes zugegriffen werden.

Wenn der Zugriff auf die Daten nicht mehr benötigt wird, muss unbedingt die Funktion ` unmap()` aufgerufen werden, um den zugeordneten Speicher freizugeben und gegebenenfalls den Inhalt des Videobildes zu aktualisieren.

Wurde der Videorahmen im schreibgeschützten Modus zugeordnet, ist es zulässig, ihn mehrfach im schreibgeschützten Modus zuzuordnen (und entsprechend oft die Zuordnung aufzuheben). In allen anderen Fällen muss die Zuordnung des Rahmens zunächst aufgehoben werden, bevor eine zweite Zuordnung erfolgen kann.

Hinweis: Das Schreiben in Speicher, der als schreibgeschützt zugeordnet ist, ist nicht definiert und kann zu Änderungen an gemeinsam genutzten Daten oder zu Abstürzen führen.

Gibt „true“ zurück, wenn der Frame im angegebenen „ mode “ in den Speicher abgebildet wurde, andernfalls „false“.

Siehe auch ` unmap()`, ` mapMode()` und ` bits()`.

QVideoFrame::MapMode QVideoFrame::mapMode() const

Gibt den Modus zurück, in dem ein Videobild in den Systemspeicher abgebildet wurde.

Siehe auch map() und QVideoFrame::MapMode.

int QVideoFrame::mappedBytes(int plane) const

Gibt die Anzahl der Bytes zurück, die von der Ebene plane der abgebildeten Frame-Daten belegt werden.

Dieser Wert ist nur gültig, solange die Frame-Daten im Zustand „ mapped “ sind.

Siehe auch ` map()`.

bool QVideoFrame::mirrored() const

Gibt zurück, ob das Bild vor der Anzeige um seine vertikale Achse gespiegelt werden soll.

Transformationen von ` QVideoFrame` – insbesondere Drehung und Spiegelung – werden ausschließlich für die Anzeige des Videobildes verwendet und werden zusätzlich zur Oberflächentransformation angewendet, die durch ` QVideoFrameFormat` bestimmt wird. Die Spiegelung wird nach der Drehung angewendet.

Eine Spiegelung ist in der Regel für Videobilder erforderlich, die von der Frontkamera eines Mobilgeräts stammen.

Siehe auch ` setMirrored()`.

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

Verwendet „ QPainter “ ( painter), um diese Datei „ QVideoFrame “ in „ rect “ darzustellen. Mit den „PaintOptions“ ( options ) lassen sich eine Hintergrundfarbe festlegen und bestimmen, wie „ rect “ mit dem Video gefüllt werden soll.

Hinweis: Bei Verwendung dieser Methode erfolgtdie Darstellung in der Regel ohne Hardwarebeschleunigung.

QVideoFrameFormat::PixelFormat QVideoFrame::pixelFormat() const

Gibt das Pixelformat dieses Videobildes zurück.

int QVideoFrame::planeCount() const

Gibt die Anzahl der Ebenen im Videobild zurück.

Siehe auch „ map()“.

QtVideo::Rotation QVideoFrame::rotation() const

Gibt den Winkel zurück, um den das Bild vor der Anzeige im Uhrzeigersinn gedreht werden soll.

Transformationen von ` QVideoFrame`, insbesondere Rotation und Spiegelung, werden ausschließlich zur Darstellung des Videobildes verwendet und werden zusätzlich zur Oberflächentransformation angewendet, die durch ` QVideoFrameFormat` bestimmt wird. Die Rotation wird vor der Spiegelung angewendet.

Siehe auch ` setRotation()`.

void QVideoFrame::setEndTime(qint64 time)

Legt die Darstellungs time e (in Mikrosekunden) fest, nach der ein Frame nicht mehr angezeigt werden soll.

Eine ungültige Zeit wird als -1 dargestellt.

Siehe auch „ endTime()“.

void QVideoFrame::setMirrored(bool mirrored)

Legt fest, ob das Bild vor der Anzeige um seine vertikale Achse gedreht ( mirrored ) werden soll.

QVideoFrame-Transformationen, insbesondere Rotation und Spiegelung, werden ausschließlich für die Darstellung des Videoframes verwendet und zusätzlich zur Oberflächentransformation angewendet, die durch ` QVideoFrameFormat` festgelegt wird. Die Spiegelung wird nach der Rotation angewendet.

Eine Spiegelung ist in der Regel für Videobilder erforderlich, die von der Frontkamera eines Mobilgeräts stammen.

Der Standardwert ist ` false`.

Siehe auch mirrored().

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

Legt die „ angle “ fest, um die der Frame vor der Anzeige im Uhrzeigersinn gedreht werden soll.

Transformationen von ` QVideoFrame` – insbesondere Drehung und Spiegelung – werden ausschließlich für die Darstellung des Videobildes verwendet und werden zusätzlich zur Oberflächentransformation angewendet, die durch ` QVideoFrameFormat` bestimmt wird. Die Drehung wird vor der Spiegelung angewendet.

Der Standardwert ist ` QtVideo::Rotation::None`.

Siehe auch ` rotation()`.

void QVideoFrame::setStartTime(qint64 time)

Legt die Darstellungs time e (in Mikrosekunden) fest, zu der der Frame erstmals angezeigt werden soll.

Eine ungültige Zeit wird als -1 dargestellt.

Siehe auch ` startTime()`.

void QVideoFrame::setStreamFrameRate(qreal rate)

Legt die Bild rate eines Videostreams in Bildern pro Sekunde fest.

Siehe auch streamFrameRate().

void QVideoFrame::setSubtitleText(const QString &text)

Legt den Untertiteltext fest, der zusammen mit diesem Videobild gerendert werden soll: text.

Siehe auch subtitleText().

QSize QVideoFrame::size() const

Gibt die Abmessungen eines Videobildes zurück.

qint64 QVideoFrame::startTime() const

Gibt den Darstellungszeitpunkt (in Mikrosekunden) zurück, zu dem der Frame angezeigt werden soll.

Eine ungültige Zeit wird als -1 dargestellt.

Siehe auch ` setStartTime()`.

qreal QVideoFrame::streamFrameRate() const

Gibt die Bildrate eines Videostreams in Bildern pro Sekunde zurück.

Siehe auch „ setStreamFrameRate()“.

QString QVideoFrame::subtitleText() const

Gibt den Untertiteltext zurück, der zusammen mit diesem Videobild dargestellt werden soll.

Siehe auch „ setSubtitleText()“.

QVideoFrameFormat QVideoFrame::surfaceFormat() const

Gibt das Oberflächenformat dieses Videobildes zurück.

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

Tauscht das aktuelle Videobild mit „ other “ aus.

QImage QVideoFrame::toImage() const

Wandelt das aktuelle Videobild in ein Standbild um.

Die Umwandlung basiert auf den aktuellen Pixeldaten und dem „ surface format “. Transformationen des Bildes haben keinen Einfluss auf das Ergebnis, da sie ausschließlich zur Darstellung dienen.

void QVideoFrame::unmap()

Gibt den von der Funktion „ map()“ zugeordneten Speicherbereich frei.

Wenn bei ` MapMode ` das Flag ` QVideoFrame::WriteOnly ` gesetzt war, wird der aktuelle Inhalt des zugeordneten Speichers im Videobild beibehalten.

unmap() sollte nicht aufgerufen werden, wenn die Funktion map() fehlgeschlagen ist.

Siehe auch map().

int QVideoFrame::width() const

Gibt die Breite eines Videoframes zurück.

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

Gibt „ true “ zurück, wenn „ QVideoFrame “ und „ other “ nicht denselben Frame widerspiegeln.

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

Verschiebt „ other “ in diesen Ordner: QVideoFrame.

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

Weist diesem Videoframe den Inhalt von „ other “ zu. Da „ QVideoFrame “ explizit gemeinsam genutzt wird, zeigen diese beiden Instanzen denselben Frame an.

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

Gibt „ true “ zurück, wenn „ QVideoFrame “ und „ other “ denselben Frame bezeichnen.

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