QVideoFrame Class
Die Klasse QVideoFrame repräsentiert ein Bild von Videodaten. Mehr...
Kopfzeile: | #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 |
Detaillierte Beschreibung
Ein QVideoFrame kapselt die Pixeldaten eines Videobildes und Informationen über das Bild.
Videoframes können aus verschiedenen Quellen stammen - dekodiert media, camera, oder programmatisch erzeugt. Die Art und Weise, wie Pixel in diesen Frames beschrieben werden, kann sehr unterschiedlich sein, und einige Pixelformate bieten größere Komprimierungsmöglichkeiten auf Kosten der Benutzerfreundlichkeit.
Der Pixelinhalt eines Videobildes kann mit der Funktion map() im Speicher abgebildet werden. Nach einem erfolgreichen Aufruf von map() kann auf die Videodaten mit verschiedenen Funktionen zugegriffen werden. Einige der YUV-Pixelformate liefern die Daten in mehreren Ebenen. Die Methode planeCount() gibt die Anzahl der verwendeten Ebenen zurück.
Während des Mappings kann auf die Videodaten jeder Ebene mit der Funktion bits() zugegriffen werden, die einen Zeiger auf einen Puffer zurückgibt. Die Größe dieses Puffers wird durch die Funktion mappedBytes() angegeben, die Größe jeder Zeile durch bytesPerLine(). Der Rückgabewert der Funktion handle() kann auch für den Zugriff auf Frame-Daten über die nativen APIs des internen Puffers verwendet werden (z. B. ein OpenGL-Textur-Handle).
Einem Videobild können auch Zeitstempelinformationen zugeordnet werden. Diese Zeitstempel können verwendet werden, um zu bestimmen, wann die Anzeige des Frames beginnen und enden soll.
QVideoFrame-Objekte können eine beträchtliche Menge an Speicher oder Systemressourcen verbrauchen und sollten nicht länger als für die Anwendung erforderlich gehalten werden.
Hinweis: Da das Kopieren von Videoframes teuer sein kann, wird QVideoFrame explizit gemeinsam genutzt, so dass jede Änderung an einem Videoframe auch auf alle Kopien angewendet wird.
Siehe auch QAbstractVideoBuffer, QVideoFrameFormat, und QVideoFrame::MapMode.
Dokumentation der Mitgliedstypen
enum QVideoFrame::HandleType
Bezeichnet den Typ des Handles eines Videopuffers.
Konstante | Wert | Beschreibung |
---|---|---|
QVideoFrame::NoHandle | 0 | Der Puffer hat kein Handle, auf seine Daten kann nur durch Mapping des Puffers zugegriffen werden. |
QVideoFrame::RhiTextureHandle | 1 | Das 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
Zählt auf, wie die Daten eines Videopuffers im Systemspeicher abgebildet werden.
Konstante | Wert | Beschreibung |
---|---|---|
QVideoFrame::NotMapped | 0x00 | Der Videopuffer wird nicht im Speicher abgebildet. |
QVideoFrame::ReadOnly | 0x01 | Der zugeordnete Speicher wird mit Daten aus dem Videopuffer gefüllt, wenn er zugeordnet wird, aber der Inhalt des zugeordneten Speichers kann verworfen werden, wenn er nicht zugeordnet wird. |
QVideoFrame::WriteOnly | 0x02 | Der zugeordnete Speicher ist nicht initialisiert, wenn er zugeordnet ist, aber der möglicherweise geänderte Inhalt wird verwendet, um den Videopuffer aufzufüllen, wenn er nicht zugeordnet ist. |
QVideoFrame::ReadWrite | ReadOnly | WriteOnly | Der zugeordnete Speicher wird mit Daten aus dem Videopuffer gefüllt, und der Videopuffer wird mit dem Inhalt des zugeordneten Speichers neu gefüllt, wenn die Zuordnung aufgehoben wird. |
Dokumentation der Mitgliedsfunktionen
QVideoFrame::QVideoFrame()
Konstruiert ein Null-Videobild.
[explicit, since 6.8]
QVideoFrame::QVideoFrame(const QImage &image)
Konstruiert einen QVideoFrame aus einem QImage.
Wenn QImage::Format mit einem der Formate in QVideoFrameFormat::PixelFormat übereinstimmt, enthält der QVideoFrame eine Instanz von image und verwendet dieses Format ohne jegliche Pixelformatkonvertierung. In diesem Fall werden die Pixeldaten nur kopiert, wenn Sie QVideoFrame::map mit dem Flag WriteOnly
aufrufen und das Originalbild behalten.
Andernfalls, wenn QImage::Format mit keinem der Videoformate übereinstimmt, wird das Bild zunächst mit 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 die Eingabe 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)
Konstruiert ein Videobild mit dem angegebenen Pixel format.
[explicit, since 6.8]
QVideoFrame::QVideoFrame(std::unique_ptr<QAbstractVideoBuffer> videoBuffer)
Konstruiert einen QVideoFrame aus einem QAbstractVideoBuffer.
Die angegebene videoBuffer verweist auf eine Instanz einer neu implementierten QAbstractVideoBuffer. Von der Instanz wird erwartet, dass sie einen vorab zugewiesenen benutzerdefinierten Videopuffer enthält, und sie muss QAbstractVideoBuffer::format, QAbstractVideoBuffer::map und QAbstractVideoBuffer::unmap für GPU-Inhalte implementieren.
Wenn videoBuffer null ist oder einen ungültigen QVideoFrameFormat erhält, erstellen die Konstruktoren ein ungültiges Videobild.
Der erstellte Frame behält den Besitz des angegebenen Videopuffers für seine Lebensdauer. Da QVideoFrame über ein gemeinsam genutztes privates Objekt implementiert ist, wird der angegebene Videopuffer nach der Zerstörung der letzten Kopie des erstellten Videobildes zerstört.
Hinweis: Wenn ein Videobild an QMediaRecorder oder eine Rendering-Pipeline übergeben wurde, ist die Lebensdauer des Bildes undefiniert, und der Medienrekorder kann es in einem anderen Thread zerstören.
QVideoFrame enthält eine eigene Instanz von QVideoFrameFormat. Beim Aufruf von setStreamFrameRate, setMirrored oder setRotation kann das innere Format geändert werden, und surfaceFormat gibt eine losgelöste Instanz zurück.
Diese Funktion wurde in Qt 6.8 eingeführt.
Siehe auch QAbstractVideoBuffer und QVideoFrameFormat.
QVideoFrame::QVideoFrame(const QVideoFrame &other)
Konstruiert eine flache Kopie von other. Da QVideoFrame explizit gemeinsam genutzt wird, spiegeln diese beiden Instanzen das gleiche Bild wider.
[noexcept]
QVideoFrame::QVideoFrame(QVideoFrame &&other)
Konstruiert einen QVideoFrame durch Verschieben von other.
[noexcept]
QVideoFrame::~QVideoFrame()
Zerstört ein Videobild.
uchar *QVideoFrame::bits(int plane)
Gibt einen Zeiger auf den Anfang des Rahmendatenpuffers für ein plane zurück.
Dieser Wert ist nur gültig, solange die Rahmendaten mapped sind.
Änderungen an Daten, auf die über diesen Zeiger zugegriffen wird (wenn sie mit Schreibzugriff abgebildet werden), werden nur dann garantiert, wenn unmap() aufgerufen wird und wenn der Puffer zum Schreiben abgebildet wurde.
Siehe auch map(), mappedBytes(), bytesPerLine(), und planeCount().
const uchar *QVideoFrame::bits(int plane) const
Gibt einen Zeiger auf den Anfang des Rahmendatenpuffers für ein plane zurück.
Dieser Wert ist nur gültig, solange die Rahmendaten mapped sind.
Wenn der Puffer nicht mit Lesezugriff abgebildet wurde, ist der Inhalt dieses Puffers zunächst uninitialisiert.
Siehe auch map(), mappedBytes(), bytesPerLine(), und planeCount().
int QVideoFrame::bytesPerLine(int plane) const
Gibt die Anzahl der Bytes in einer Abtastzeile eines plane zurück.
Dieser Wert ist nur gültig, solange die Rahmendaten mapped sind.
Siehe auch bits(), map(), mappedBytes(), und planeCount().
qint64 QVideoFrame::endTime() const
Gibt die Darstellungszeit (in Mikrosekunden) zurück, zu 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
Ermittelt, ob der Inhalt eines Videobildes derzeit im Systemspeicher abgebildet ist.
Dies ist eine Komfortfunktion, die prüft, ob MapMode des Frames nicht gleich QVideoFrame::NotMapped ist.
Gibt true zurück, wenn der Inhalt des Videobildes dem Systemspeicher zugeordnet ist, und andernfalls false.
Siehe auch mapMode() und QVideoFrame::MapMode.
bool QVideoFrame::isReadable() const
Gibt an, ob der zugeordnete Inhalt eines Videobildes aus dem Bild gelesen wurde, als es zugeordnet wurde.
Dies ist eine Komfortfunktion, die prüft, ob MapMode das Flag QVideoFrame::WriteOnly enthält.
Gibt true zurück, wenn der Inhalt des zugeordneten Speichers aus dem Videobild gelesen wurde, und 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 nicht gültig ist.
bool QVideoFrame::isWritable() const
Gibt an, ob der zugeordnete Inhalt eines Videobildes beibehalten wird, wenn das Bild nicht zugeordnet wird.
Dies ist eine Komfortfunktion, die prüft, ob MapMode das Flag QVideoFrame::WriteOnly enthält.
Gibt true zurück, wenn das Videobild aktualisiert wird, wenn die Zuordnung aufgehoben wird, und andernfalls false.
Hinweis: Das Ergebnis der Änderung der Daten eines Frames, das im schreibgeschützten Modus zugeordnet ist, ist undefiniert. Je nach Pufferimplementierung können die Änderungen bestehen bleiben 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 (CPU-adressierbaren) Systemspeicher zu.
In einigen Fällen können die Videobilddaten im Videospeicher oder in einem anderweitig unzugänglichen Speicher gespeichert sein, so dass es notwendig ist, ein Bild vor dem Zugriff auf die Pixeldaten zuzuordnen. Dies kann bedeuten, dass der Inhalt umher kopiert werden muss, daher sollte ein Mapping und Unmapping vermieden werden, sofern nicht erforderlich.
Die Map mode gibt an, ob der Inhalt des gemappten Speichers aus dem Bild gelesen und/oder in das Bild geschrieben werden soll. Wenn der Zuordnungsmodus das Flag QVideoFrame::ReadOnly
enthält, wird der zugeordnete Speicher bei der ersten Zuordnung mit dem Inhalt des Videobildes aufgefüllt. Wenn der Zuordnungsmodus das Flag QVideoFrame::WriteOnly
enthält, wird der Inhalt des möglicherweise geänderten zugeordneten Speichers in das Bild zurückgeschrieben, wenn die Zuordnung aufgehoben wird.
Während der Zuordnung kann auf den Inhalt eines Videobildes direkt über den von der Funktion bits() zurückgegebenen Zeiger zugegriffen werden.
Wenn der Zugriff auf die Daten nicht mehr benötigt wird, muss die Funktion unmap() aufgerufen werden, um den zugeordneten Speicher freizugeben und möglicherweise den Inhalt des Videobildes zu aktualisieren.
Wenn das Videobild im Nur-Lese-Modus abgebildet wurde, ist es zulässig, es mehrfach im Nur-Lese-Modus abzubilden (und die Abbildung entsprechend oft aufzuheben). In allen anderen Fällen muss die Zuordnung zuerst aufgehoben werden, bevor das Bild ein zweites Mal zugeordnet werden kann.
Hinweis: Das Schreiben in Speicher, der als schreibgeschützt gemappt ist, ist undefiniert und kann zu Änderungen an gemeinsamen Daten oder zu Abstürzen führen.
Gibt true zurück, wenn der Rahmen im angegebenen mode in den Speicher gemappt wurde, andernfalls false.
Siehe auch unmap(), mapMode(), und bits().
QVideoFrame::MapMode QVideoFrame::mapMode() const
Gibt den Modus zurück, in dem ein Videobild im 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 gemappten Rahmendaten belegt werden.
Dieser Wert ist nur gültig, solange die Rahmendaten 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 nur 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.
Die Spiegelung wird in der Regel für Videobilder benötigt, die von einer Frontkamera eines mobilen Geräts stammen.
Siehe auch setMirrored().
void QVideoFrame::paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options)
Verwendet ein QPainter, painter, um dieses QVideoFrame auf rect zu rendern. Die PaintOptions options können verwendet werden, um eine Hintergrundfarbe anzugeben und wie rect mit dem Video gefüllt werden soll.
Hinweis: Das Rendern erfolgt bei dieser Methode normalerweise 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 Drehung und Spiegelung, werden nur für die Anzeige des Videobildes verwendet und werden zusätzlich zur Oberflächentransformation angewendet, die durch QVideoFrameFormat bestimmt wird. Die Drehung wird vor der Spiegelung angewendet.
Siehe auch setRotation().
void QVideoFrame::setEndTime(qint64 time)
Legt die Darstellungszeit time (in Mikrosekunden) fest, zu der ein Bild 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 auf mirrored um seine vertikale Achse gedreht werden soll.
Die Transformationen von QVideoFrame
, insbesondere Drehung und Spiegelung, werden nur 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.
Die Spiegelung wird in der Regel für Videobilder benötigt, die von einer Frontkamera eines mobilen Geräts stammen.
Der Standardwert ist false
.
Siehe auch mirrored().
void QVideoFrame::setRotation(QtVideo::Rotation angle)
Legt die angle fest, dass das Bild vor der Anzeige im Uhrzeigersinn gedreht werden soll.
Die Transformationen von QVideoFrame
, insbesondere Drehung und Spiegelung, werden nur für die Anzeige 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 Darstellungszeit time (in Mikrosekunden) fest, zu der das Bild erstmals angezeigt werden soll.
Eine ungültige Zeit wird als -1 dargestellt.
Siehe auch startTime().
void QVideoFrame::setStreamFrameRate(qreal rate)
Legt das Bild rate eines Videostroms in Bildern pro Sekunde fest.
Siehe auch streamFrameRate().
void QVideoFrame::setSubtitleText(const QString &text)
Setzt den Untertiteltext, der zusammen mit diesem Videobild gerendert werden soll, auf text.
Siehe auch subtitleText().
QSize QVideoFrame::size() const
Gibt die Abmessungen eines Videobildes zurück.
qint64 QVideoFrame::startTime() const
Gibt die Darstellungszeit (in Mikrosekunden) zurück, zu der das Bild angezeigt werden soll.
Eine ungültige Zeit wird als -1 dargestellt.
Siehe auch setStartTime().
qreal QVideoFrame::streamFrameRate() const
Gibt die Bildrate eines Video-Streams in Bildern pro Sekunde zurück.
Siehe auch setStreamFrameRate().
QString QVideoFrame::subtitleText() const
Gibt den Untertiteltext zurück, der zusammen mit diesem Videobild gerendert 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
Konvertiert das aktuelle Videobild in ein Bild.
Die Umwandlung basiert auf den aktuellen Pixeldaten und dem QVideoFrame::surfaceFormat. Transformationen des Frames haben keinen Einfluss auf das Ergebnis, da sie nur für die Darstellung angewendet werden.
void QVideoFrame::unmap()
Gibt den von der Funktion map() gemappten Speicher frei.
Wenn die Funktion MapMode das Flag QVideoFrame::WriteOnly enthielt, 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 Videobildes zurück.
bool QVideoFrame::operator!=(const QVideoFrame &other) const
Gibt true
zurück, wenn diese QVideoFrame und other nicht denselben Rahmen widerspiegeln.
[noexcept]
QVideoFrame &QVideoFrame::operator=(QVideoFrame &&other)
Bewegt sich other in diese QVideoFrame.
QVideoFrame &QVideoFrame::operator=(const QVideoFrame &other)
Weist den Inhalt von other diesem Videobild zu. Da QVideoFrame explizit gemeinsam genutzt wird, spiegeln diese beiden Instanzen denselben Frame wider.
bool QVideoFrame::operator==(const QVideoFrame &other) const
Gibt true
zurück, wenn diese QVideoFrame und other denselben Rahmen wiedergeben.
© 2025 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.