Класс QVideoFrame
Класс QVideoFrame представляет кадр видеоданных. Подробнее...
| Заголовок: | #include <QVideoFrame> |
| CMake: | find_package(Qt6 COMPONENTS Multimedia REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
| qmake: | QT += multimedia |
Типы public
| Перечисление | HandleType { NoHandle, RhiTextureHandle } |
| Перечисление | MapMode { NotMapped, ReadOnly, WriteOnly, ReadWrite } |
Функции public
| QVideoFrame(QVideoFrame &&other) | |
| QVideoFrame(const QVideoFrame &other) | |
| QVideoFrame(const QVideoFrameFormat &format) | |
| QVideoFrame() | |
| QVideoFrame & | operator=(const QVideoFrame &other) |
| QVideoFrame & | operator=(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 |
| void | paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options) |
| QVideoFrameFormat::PixelFormat | pixelFormat() const |
| int | planeCount() const |
| void | setEndTime(qint64 time) |
| void | setStartTime(qint64 time) |
| void | setSubtitleText(const QString &text) |
| QSize | size() const |
| qint64 | startTime() const |
| QString | subtitleText() const |
| QVideoFrameFormat | surfaceFormat() const |
| QImage | toImage() const |
| void | unmap() |
| int | width() const |
| bool | operator!=(const QVideoFrame &other) const |
| bool | operator==(const QVideoFrame &other) const |
Подробное описание
Класс QVideoFrame инкапсулирует пиксельные данные кадра видео и информацию о кадре.
Кадры видео могут поступать из нескольких источников - декодированные медиа, камеры или генерироваться программно. Способы описания пикселей в этих кадрах могут существенно различаться, а некоторые форматы пикселей предлагают лучшие возможности сжатия в ущерб удобству использования.
Пиксельные данные кадра видео можно отобразить в памяти, используя функцию map(). После успешного вызова map() доступ к видеоданным можно получить через различные функции. Некоторые форматы пикселей YUV предоставляют данные в нескольких плоскостях. Метод planeCount() вернёт количество используемых плоскостей.
При отображении видеоданные каждого самолета можно получить с помощью функции bits(), которая возвращает указатель на буфер. Размер этого буфера задается функцией mappedBytes(), а размер каждой строки — функцией bytesPerLine(). Значение, возвращаемое функцией handle(), также может использоваться для доступа к данным кадра с помощью собственных API буфера (например, обработка OpenGL-текстуры).
Видеокадр также может содержать информацию о временной метке. Эти метки времени могут использоваться для определения момента начала и остановки отображения кадра.
Объекты QVideoFrame могут потреблять значительное количество памяти или системных ресурсов и не должны удерживаться дольше, чем необходимо приложению.
Примечание: Поскольку копирование видеокадров может быть дорогостоящим, QVideoFrame явно совместно используется, поэтому любые изменения, внесенные в видеокадр, также будут применены к любым его копиям.
Документация по типам членов
enum QVideoFrame::HandleType
Определяет тип обработчика видеобуфера.
| Константа | Значение | Описание |
|---|---|---|
QVideoFrame::NoHandle |
0 |
Буфер не имеет обработчика; доступ к его данным возможен только путем отображения буфера. |
QVideoFrame::RhiTextureHandle |
1 |
Обработчик буфера определяется интерфейсом Qt Rendering Hardware Interface (RHI). RHI — это внутреннее графическое абстрагирование Qt для 3D-API, таких как OpenGL, Vulkan, Metal и Direct 3D. |
См. также handleType().
enum QVideoFrame::MapMode
Перечисляет способы отображения данных видеобуфера в оперативной памяти.
| Постоянная | Значение | Описание |
|---|---|---|
QVideoFrame::NotMapped |
0x00 |
Буфер видео не отображён в памяти. |
QVideoFrame::ReadOnly |
0x01 |
Отображённая память заполняется данными из буфера видео при отображении, но содержимое отображённой памяти может быть удалено при её освобождении. |
QVideoFrame::WriteOnly |
0x02 |
Отображённая память не инициализирована при отображении, но возможно изменённое содержимое будет использовано для заполнения буфера видео при её освобождении. |
QVideoFrame::ReadWrite |
ReadOnly | WriteOnly |
Отображённая память заполняется данными из буфера видео, и буфер видео заполняется содержимым отображённой памяти при её освобождении. |
Документация функций-членов
QVideoFrame::QVideoFrame(QVideoFrame &&other)
Создаёт QVideoFrame, перемещая данные из other.
QVideoFrame::QVideoFrame(const QVideoFrame &other)
Создаёт поверхностную копию other. Поскольку QVideoFrame использует явное совместное использование, эти два экземпляра будут отражать один и тот же кадр.
QVideoFrame::QVideoFrame(const QVideoFrameFormat &format)
Создаёт видеокадр заданного пиксельного формата.
QVideoFrame::QVideoFrame()
Создаёт нулевой видеокадр.
QVideoFrame &QVideoFrame::operator=(const QVideoFrame &other)
Присваивает содержимое other этому видеокадру. Поскольку QVideoFrame использует явное совместное использование, эти два экземпляра будут отражать один и тот же кадр.
QVideoFrame &QVideoFrame::operator=(QVideoFrame &&other)
Перемещает other в этот QVideoFrame.
QVideoFrame::~QVideoFrame()
Уничтожает видеокадр.
uchar *QVideoFrame::bits(int plane)
Возвращает указатель на начало буфера данных кадра для plane.
Это значение действительно только пока данные кадра отображены в памяти.
Изменения, внесённые в данные, доступные через этот указатель (при отображении с правом записи), гарантированно будут сохранены только при вызове unmap() и при отображении буфера для записи.
См. также map(), mappedBytes(), bytesPerLine() и planeCount().
const uchar *QVideoFrame::bits(int plane) const
Возвращает указатель на начало буфера данных кадра для plane.
Это значение действительно только пока данные кадра отображены в памяти.
Если буфер не был отображён с правом чтения, содержимое этого буфера изначально будет неинициализированным.
См. также map(), mappedBytes(), bytesPerLine() и planeCount().
int QVideoFrame::bytesPerLine(int plane) const
Возвращает количество байтов в строке сканирования plane.
Это значение действительно только пока данные кадра отображены в памяти.
См. также bits(), map(), mappedBytes() и planeCount().
qint64 QVideoFrame::endTime() const
Возвращает время представления (в микросекундах), когда кадр должен перестать отображаться.
Неверное время представлено как -1.
См. также setEndTime().
QVideoFrame::HandleType QVideoFrame::handleType() const
Возвращает тип обработчика видеокадра.
Тип обработчика может быть NoHandle, что означает, что кадр основан на памяти, или текстурой RHI.
int QVideoFrame::height() const
Возвращает высоту видеокадра.
bool QVideoFrame::isMapped() const
Определяет, отображено ли содержимое видеокадра в оперативной памяти.
Это вспомогательная функция, которая проверяет, что MapMode кадра не равен 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(), чтобы освободить отображённую память и, возможно, обновить содержимое видеокадра.
Если видеокадр был отображён в режиме только для чтения, допускается отображать его несколько раз в режиме только для чтения (и соответствующее количество раз освобождать). Во всех других случаях необходимо сначала освободить кадр, прежде чем отображать его второй раз.
Примечание: Запись в память, отображённую как только для чтения, не определена и может привести к изменениям в общих данных или к сбоям.
Возвращает true, если кадр был отображён в памяти в заданном mode, и false в противном случае.
См. также unmap(), mapMode() и bits().
QVideoFrame::MapMode QVideoFrame::mapMode() const
Возвращает режим отображения видеокадра в системной памяти.
См. также map() и QVideoFrame::MapMode.
int QVideoFrame::mappedBytes(int plane) const
Возвращает количество байтов, занимаемых планом plane отображённых данных кадра.
Это значение действительно только пока данные кадра отображены в памяти.
См. также map().
void QVideoFrame::paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options)
Использует QPainter, painter, для отрисовки этого QVideoFrame в прямоугольник rect. Опции рисования options могут быть использованы для задания цвета фона и способа заполнения прямоугольника rect видео.
Примечание: отрисовка обычно происходит без аппаратного ускорения при использовании этого метода.
QVideoFrameFormat::PixelFormat QVideoFrame::pixelFormat() const
Возвращает формат пикселей этого видеокадра.
int QVideoFrame::planeCount() const
Возвращает количество планов в видеокадре.
См. также map().
void QVideoFrame::setEndTime(qint64 time)
Устанавливает время представления time (в микросекундах), когда кадр должен перестать отображаться.
Неверное время представлено как -1.
См. также endTime().
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
Возвращает формат поверхности этого видеокадра.
QImage QVideoFrame::toImage() const
На основе формата пикселей преобразует текущий видеокадр в изображение.
void QVideoFrame::unmap()
Освобождает память, отображенную функцией map().
Если флаг QVideoFrame::WriteOnly включен в MapMode, это сохранит текущее содержимое отображенной памяти в видеокадр.
unmap() не следует вызывать, если функция map() завершилась неудачно.
См. также map().
int QVideoFrame::width() const
Возвращает ширину видеокадра.
bool QVideoFrame::operator!=(const QVideoFrame &other) const
Возвращает true , если этот QVideoFrame и other не отражают один и тот же кадр.
bool QVideoFrame::operator==(const QVideoFrame &other) const
Возвращает true , если этот QVideoFrame и other отражают один и тот же кадр.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qvideoframe.html