Класс QVideoFrame
Класс QVideoFrame представляет кадр видеоданных. Подробнее...
| Заголовок: | #include <QVideoFrame> |
| qmake: | QT += multimedia |
Типы публичного доступа
| перечисление | FieldType { ProgressiveFrame, TopField, BottomField, InterlacedFrame } |
| перечисление | PixelFormat { Format_Invalid, Format_ARGB32, Format_ARGB32_Premultiplied, Format_RGB32, Format_RGB24, …, Format_User } |
Публичные функции
| QVideoFrame(const QVideoFrame &other) | |
| QVideoFrame(const QImage &image) | |
| QVideoFrame(int bytes, const QSize &size, int bytesPerLine, QVideoFrame::PixelFormat format) | |
| QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, QVideoFrame::PixelFormat format) | |
| QVideoFrame() | |
| QVideoFrame & | operator=(const QVideoFrame &other) |
| ~QVideoFrame() | |
| QVariantMap | availableMetaData() const |
| uchar * | bits() |
| uchar * | bits(int plane) |
| const uchar * | bits() const |
| const uchar * | bits(int plane) const |
| QAbstractVideoBuffer * | buffer() const |
| int | bytesPerLine() const |
| int | bytesPerLine(int plane) const |
| qint64 | endTime() const |
| QVideoFrame::FieldType | fieldType() const |
| QVariant | handle() const |
| QAbstractVideoBuffer::HandleType | handleType() const |
| int | height() const |
| bool | isMapped() const |
| bool | isReadable() const |
| bool | isValid() const |
| bool | isWritable() const |
| bool | map(QAbstractVideoBuffer::MapMode mode) |
| QAbstractVideoBuffer::MapMode | mapMode() const |
| int | mappedBytes() const |
| QVariant | metaData(const QString &key) const |
| QVideoFrame::PixelFormat | pixelFormat() const |
| int | planeCount() const |
| void | setEndTime(qint64 time) |
| void | setFieldType(QVideoFrame::FieldType field) |
| void | setMetaData(const QString &key, const QVariant &value) |
| void | setStartTime(qint64 time) |
| QSize | size() const |
| qint64 | startTime() const |
| void | unmap() |
| int | width() const |
| bool | operator!=(const QVideoFrame &other) const |
| bool | operator==(const QVideoFrame &other) const |
Статические публичные члены
| QImage::Format | imageFormatFromPixelFormat(QVideoFrame::PixelFormat format) |
| QVideoFrame::PixelFormat | pixelFormatFromImageFormat(QImage::Format format) |
Подробное описание
QVideoFrame инкапсулирует пиксельные данные кадра видео и информацию о кадре.
Кадры видео могут поступать из нескольких источников — декодированного медиа, камеры или быть сгенерированы программно. Способ описания пикселей в этих кадрах может сильно отличаться, и некоторые форматы пикселей предлагают большую возможность сжатия в ущерб простоте использования.
Внутреннее содержимое кадра видео может быть отображено в памяти с помощью функции map(). Во время отображения к данным видео можно получить доступ с помощью функции bits(), которая возвращает указатель на буфер. Общий размер этого буфера задается функцией mappedBytes(), а размер каждой строки — функцией bytesPerLine(). Значение функции handle() также может быть использовано для доступа к данным кадра с помощью собственных API-интерфейсов внутреннего буфера (например, дескриптор текстуры OpenGL).
Кадр видео также может содержать информацию о временных метках. Эти временные метки могут использоваться реализацией QAbstractVideoSurface для определения, когда начать и остановить отображение кадра, но не все поверхности могут учитывать это значение.
Данные видеопикселей в QVideoFrame инкапсулированы в QAbstractVideoBuffer. QVideoFrame может быть создан из любого типа буфера путём наследования класса QAbstractVideoBuffer.
Примечание: Поскольку копирование кадров видео может быть дорогостоящим, QVideoFrame явно использует общие данные, поэтому любое изменение, внесенное в кадр видео, также применится к любым его копиям.
Документация по типам членов
перечисление QVideoFrame::FieldType
Определяет поле, к которому относится интерлинированный кадр видео.
| Константа | Значение | Описание |
|---|---|---|
QVideoFrame::ProgressiveFrame |
0 |
Кадр не чересстрочный. |
QVideoFrame::TopField |
1 |
Кадр содержит верхнюю строку. |
QVideoFrame::BottomField |
2 |
Кадр содержит нижнюю строку. |
QVideoFrame::InterlacedFrame |
3 |
Кадр содержит объединённую верхнюю и нижнюю строки. |
enum QVideoFrame::PixelFormat
Перечисляет типы видеоданных.
| Константа | Значение | Описание |
|---|---|---|
QVideoFrame::Format_Invalid |
0 |
Кадр недействителен. |
QVideoFrame::Format_ARGB32 |
1 |
Кадр хранится в формате 32-битного ARGB (0xAARRGGBB). Эквивалентен QImage::Format_ARGB32. |
QVideoFrame::Format_ARGB32_Premultiplied |
2 |
Кадр хранится в предварительно умноженном 32-битном формате ARGB (0xAARRGGBB). Эквивалентен QImage::Format_ARGB32_Premultiplied. |
QVideoFrame::Format_RGB32 |
3 |
Кадр хранится в 32-битном формате RGB (0xffRRGGBB). Эквивалентен QImage::Format_RGB32 |
QVideoFrame::Format_RGB24 |
4 |
Кадр хранится в 24-битном формате RGB (8-8-8). Эквивалентен QImage::Format_RGB888 |
QVideoFrame::Format_RGB565 |
5 |
Кадр хранится в 16-битном формате RGB (5-6-5). Эквивалентен QImage::Format_RGB16. |
QVideoFrame::Format_RGB555 |
6 |
Кадр хранится в 16-битном формате RGB (5-5-5). Эквивалентен QImage::Format_RGB555. |
Документация по функциям-членам
QVideoFrame::QVideoFrame(const QVideoFrame &other)
Создаёт поверхностную копию other. Поскольку QVideoFrame явно использует совместный доступ, эти два экземпляра будут отражать один и тот же кадр.
QVideoFrame::QVideoFrame(const QImage &image)
Создаёт видеокадр из image.
Примечание: Это создаст недействительный видеокадр, если нет типа кадра, эквивалентного формату изображения.
END_OF_DOCUMENT_MARKERСм. также pixelFormatFromImageFormat().
QVideoFrame::QVideoFrame(int bytes, const QSize &size, int bytesPerLine, QVideoFrame::PixelFormat format)
Создаёт видеокадр заданного пиксельного формата и размера в пикселях.
bytesPerLine (шаг) — длина каждой строки сканирования в байтах, а bytes — общее количество байтов, которые должны быть выделены для кадра.
QVideoFrame::QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, QVideoFrame::PixelFormat format)
Создаёт видеокадр из буфера с заданным пиксельным форматом и размером в пикселях.
Примечание: Это не увеличивает счётчик ссылок видеобуфера.
QVideoFrame::QVideoFrame()
Создаёт нулевой видеокадр.
QVideoFrame &QVideoFrame::operator=(const QVideoFrame &other)
Присваивает содержимое other этому видеокадру. Поскольку QVideoFrame явно совместно используемый, эти два экземпляра будут отражать один и тот же кадр.
QVideoFrame::~QVideoFrame()
Уничтожает видеокадр.
QVariantMap QVideoFrame::availableMetaData() const
Возвращает любые дополнительные метаданные, связанные с этим кадром.
uchar *QVideoFrame::bits()
Возвращает указатель на начало буфера данных кадра.
Это значение действительное только пока данные кадра отображены.
Изменения, внесённые в данные, к которым осуществляется доступ через этот указатель (при отображении с записью), гарантированы только при вызове unmap() и при отображении буфера для записи.
См. также map(), mappedBytes() и bytesPerLine().
uchar *QVideoFrame::bits(int plane)
Возвращает указатель на начало буфера данных кадра для плоскости.
Это значение действительное только пока данные кадра отображены.
Изменения, внесённые в данные, к которым осуществляется доступ через этот указатель (при отображении с записью), гарантированы только при вызове unmap() и при отображении буфера для записи.
Эта функция была добавлена в Qt 5.4.
См. также map(), mappedBytes(), bytesPerLine() и planeCount().
const uchar *QVideoFrame::bits() const
Возвращает указатель на начало буфера данных кадра.
Это значение действительное только пока данные кадра отображены.
Если буфер не отображался с доступом для чтения, содержимое этого буфера изначально будет неопределённым.
См. также map(), mappedBytes() и bytesPerLine().
const uchar *QVideoFrame::bits(int plane) const
Возвращает указатель на начало буфера данных кадра для плоскости.
Это значение действительное только пока данные кадра отображены.
Если буфер не отображался с доступом для чтения, содержимое этого буфера изначально будет неопределённым.
Эта функция была добавлена в Qt 5.4.
См. также map(), mappedBytes(), bytesPerLine() и planeCount().
QAbstractVideoBuffer *QVideoFrame::buffer() const
Возвращает базовый видеобуфер или null если его нет.
Эта функция была добавлена в Qt 5.13.
int QVideoFrame::bytesPerLine() const
Возвращает количество байтов в строке сканирования.
Примечание: Для плоских форматов это количество байтов в строке только для первой плоскости. Количество байтов в строке последующих плоскостей должно быть вычислено в соответствии с форматом пикселей кадра.
Это значение действительное только пока данные кадра отображены.
См. также bits(), map() и mappedBytes().
int QVideoFrame::bytesPerLine(int plane) const
Возвращает количество байтов в строке сканирования для плоскости.
Это значение действительное только пока данные кадра отображены.
Эта функция была добавлена в Qt 5.4.
См. также bits(), map(), mappedBytes() и planeCount().
qint64 QVideoFrame::endTime() const
Возвращает время презентации (в микросекундах), когда кадр должен перестать отображаться.
Неверное время представлено как -1.
См. также setEndTime().
QVideoFrame::FieldType QVideoFrame::fieldType() const
Возвращает поле, к которому относится чересстрочный видеокадр.
Если видео не чересстрочное, это будет WholeFrame.
См. также setFieldType().
QVariant QVideoFrame::handle() const
Возвращает специфичную для типа ручку буфера видеокадра.
Для текстуры OpenGL это будет идентификатор текстуры.
См. также QAbstractVideoBuffer::handle().
QAbstractVideoBuffer::HandleType QVideoFrame::handleType() const
Возвращает тип ручки видеокадра.
int QVideoFrame::height() const
Возвращает высоту видеокадра.
[static] QImage::Format QVideoFrame::imageFormatFromPixelFormat(QVideoFrame::PixelFormat format)
Возвращает эквивалентный формат изображения для пиксельного формата видеокадра. Если эквивалентного формата нет, возвращается QImage::Format_Invalid.
Примечание: В общем случае QImage не обрабатывает форматы YUV.
bool QVideoFrame::isMapped() const
Определяет, отображаются ли в настоящее время содержимое видеокадра в системной памяти.
Это вспомогательная функция, которая проверяет, что MapMode кадра не равен QAbstractVideoBuffer::NotMapped.
Возвращает true, если содержимое видеокадра отображено в системной памяти, и false в противном случае.
См. также mapMode() и QAbstractVideoBuffer::MapMode.
bool QVideoFrame::isReadable() const
Определяет, были ли отображенные данные видеокадра прочитаны из кадра при отображении.
Это вспомогательная функция, которая проверяет, содержит ли MapMode флаг QAbstractVideoBuffer::WriteOnly.
Возвращает true, если содержимое отображённой памяти было прочитано из видеокадра, и false в противном случае.
См. также mapMode() и QAbstractVideoBuffer::MapMode.
bool QVideoFrame::isValid() const
Определяет, является ли видеокадр допустимым.
Недопустимый кадр не имеет связанного с ним видеобуфера.
Возвращает true, если кадр допустим, и false в противном случае.
bool QVideoFrame::isWritable() const
Определяет, будут ли сохранены отображённые данные видеокадра при раз отображении.
Это вспомогательная функция, которая проверяет, содержит ли MapMode флаг QAbstractVideoBuffer::WriteOnly.
Возвращает true, если видеокадр будет обновлён при раз отображении, и false в противном случае.
Примечание: Результат изменения данных кадра, отображённого в режиме только для чтения, не определён. В зависимости от реализации буфера изменения могут быть сохранены или, что хуже, изменят общий буфер.
См. также mapMode() и QAbstractVideoBuffer::MapMode.
bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
Отображает содержимое видеокадра в системную (доступную по адресу ЦП) память.
В некоторых случаях данные кадра видео могут храниться в видеопамяти или в другой недоступной памяти, поэтому для доступа к данным пикселей необходимо отобразить кадр. Это может потребовать копирования содержимого, поэтому избегайте отображения и скрытия, если это не требуется.
Режим отображения mode указывает, следует ли читать из отображенной памяти и/или записывать в нее данные кадра. Если режим отображения включает флаг QAbstractVideoBuffer::ReadOnly, отображенная память будет заполнена содержимым видеокадра при первом отображении. Если режим отображения включает флаг QAbstractVideoBuffer::WriteOnly, содержимое, возможно, измененной отображенной памяти будет записано обратно в кадр при скрытии.
Во время отображения к содержимому видеокадра можно получить прямой доступ через указатель, возвращаемый функцией bits().
Когда доступ к данным больше не нужен, обязательно вызовите функцию unmap() для освобождения отображенной памяти и, возможно, обновления содержимого видеокадра.
Если видеокадр отображен в режиме только для чтения, разрешено отображать его несколько раз в режиме только для чтения (и скрывать соответствующее количество раз). Во всех остальных случаях необходимо сначала скрыть кадр перед повторным отображением.
Примечание: Запись в память, отображенную как только для чтения, не определена и может привести к изменениям в общих данных или сбоям.
Возвращает true, если кадр был отображен в памяти в указанном режиме mode, и false в противном случае.
См. также unmap(), mapMode() и bits().
QAbstractVideoBuffer::MapMode QVideoFrame::mapMode() const
Возвращает режим отображения видеокадра в системной памяти.
См. также map() и QAbstractVideoBuffer::MapMode.
int QVideoFrame::mappedBytes() const
Возвращает количество байтов, занимаемых отображенными данными кадра.
Это значение применимо только пока данные кадра отображены mapped.
См. также map().
QVariant QVideoFrame::metaData(const QString &key) const
Возвращает любые метаданные для этого кадра для данного ключа key.
Это может включать информацию о кадре, полученную с камеры, или субтитры из декодированного видеопотока.
Дополнительную информацию об имеющихся метаданных см. в документации соответствующего производителя видеокадров.
См. также setMetaData().
QVideoFrame::PixelFormat QVideoFrame::pixelFormat() const
Возвращает цветовой формат видеокадра.
[static] QVideoFrame::PixelFormat QVideoFrame::pixelFormatFromImageFormat(QImage::Format format)
Возвращает эквивалентный видеопиксельный формат для изображения format. Если эквивалентного формата нет, возвращается QVideoFrame::InvalidType.
Примечание: В целом QImage не обрабатывает форматы YUV.
int QVideoFrame::planeCount() const
Возвращает количество планов в видеокадре.
Это значение применимо только пока данные кадра отображены mapped.
Эта функция была добавлена в Qt 5.4.
См. также map().
void QVideoFrame::setEndTime(qint64 time)
Устанавливает время отображения (в микросекундах) time, когда кадр должен перестать отображаться.
Неверное время представлено как -1.
См. также endTime().
void QVideoFrame::setFieldType(QVideoFrame::FieldType field)
Устанавливает поле, к которому относится чересстрочный видеокадр.
См. также fieldType().
void QVideoFrame::setMetaData(const QString &key, const QVariant &value)
Устанавливает метаданные для заданного ключа key со значением value.
Если value — это нулевая переменная, все метаданные для этого ключа будут удалены.
Производитель видеокадра может использовать это для ассоциации определенных данных с этим кадром, или для промежуточного обработчика для добавления информации для потребителя этого кадра.
См. также metaData().
void QVideoFrame::setStartTime(qint64 time)
Устанавливает время отображения (в микросекундах) time, когда кадр должен быть отображен вначале.
Неверное время представлено как -1.
См. также startTime().
QSize QVideoFrame::size() const
Возвращает размеры видеокадра.
qint64 QVideoFrame::startTime() const
Возвращает время отображения (в микросекундах), когда кадр должен отображаться.
Неверное время представлено как -1.
См. также setStartTime().
void QVideoFrame::unmap()
Освобождает память, отображенную функцией map().
Если MapMode включал флаг QAbstractVideoBuffer::WriteOnly, это сохранит текущее содержимое отображенной памяти в видеокадр.
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-5.14/qvideoframe.html