Класс QVideoFrame
Класс QVideoFrame представляет кадр видеоданных. Подробнее...
| Заголовок: | #include <QVideoFrame> |
| qmake: | QT += multimedia |
Открытые типы
| перечисление | FieldType { ProgressiveFrame, TopField, BottomField, InterlacedFrame } |
| перечисление | PixelFormat { Format_Invalid, Format_ARGB32, Format_ARGB32_Premultiplied, Format_RGB32, ..., 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 |
Кадр хранится в формате ARGB 32 бит (0xAARRGGBB). Эквивалентно QImage::Format_ARGB32. |
QVideoFrame::Format_ARGB32_Premultiplied |
2 |
Кадр хранится в предварительно умноженном формате ARGB 32 бит (0xAARRGGBB). Эквивалентно QImage::Format_ARGB32_Premultiplied. |
QVideoFrame::Format_RGB32 |
3 |
Кадр хранится в формате RGB 32 бит (0xffRRGGBB). Эквивалентно QImage::Format_RGB32 |
QVideoFrame::Format_RGB24 |
4 |
Кадр хранится в формате RGB 24 бит (8-8-8). Эквивалентно QImage::Format_RGB888 |
QVideoFrame::Format_RGB565 |
5 |
Кадр хранится в формате RGB 16 бит (5-6-5). Эквивалентно QImage::Format_RGB16. |
QVideoFrame::Format_RGB555 |
6 |
Кадр хранится в формате RGB 16 бит (5-5-5). Эквивалентно QImage::Format_RGB555. |
QVideoFrame::Format_ARGB8565_Premultiplied |
7 |
Кадр хранится в предварительно умноженном формате ARGB 24 бит (8-5-6-5). |
QVideoFrame::Format_BGRA32 |
8 |
Кадр хранится в формате BGRA 32 бит (0xBBGGRRAA). |
QVideoFrame::Format_BGRA32_Premultiplied |
9 |
Кадр хранится в предварительно умноженном формате BGRA 32 бит. |
QVideoFrame::Format_ABGR32 |
10 |
Кадр хранится в формате ABGR 32 бит (0xAABBGGRR). |
QVideoFrame::Format_BGR32 |
11 |
Кадр хранится в формате BGR 32 бит (0xBBGGRRff). |
QVideoFrame::Format_BGR24 |
12 |
Кадр хранится в формате BGR 24 бит (0xBBGGRR). |
QVideoFrame::Format_BGR565 |
13 |
Кадр хранится в формате BGR 16 бит (5-6-5). |
QVideoFrame::Format_BGR555 |
14 |
Кадр хранится в формате BGR 16 бит (5-5-5). |
QVideoFrame::Format_BGRA5658_Premultiplied |
15 |
Кадр хранится в предварительно умноженном формате BGRA 24 бит (5-6-5-8). |
QVideoFrame::Format_AYUV444 |
16 |
Кадр хранится в упакованном формате AYUV 32 бит (0xAAYYUUVV). |
QVideoFrame::Format_AYUV444_Premultiplied |
17 |
Кадр хранится в предварительно умноженном упакованном формате AYUV 32 бит (0xAAYYUUVV). |
QVideoFrame::Format_YUV444 |
18 |
Кадр хранится в упакованном формате YUV 24 бит (8-8-8). |
QVideoFrame::Format_YUV420P |
19 |
Кадр хранится в планарном формате YUV 8 бит на компонент с субдискретизацией U и V плоскостей по горизонтали и вертикали, т.е. высота и ширина плоскостей U и V составляют половину высоты и ширины плоскости Y. |
QVideoFrame::Format_YV12 |
20 |
Кадр хранится в планарном формате YVU 8 бит на компонент с субдискретизацией V и U плоскостей по горизонтали и вертикали, т.е. высота и ширина плоскостей V и U составляют половину высоты и ширины плоскости Y. |
QVideoFrame::Format_UYVY |
21 |
Кадр хранится в упакованном формате YUV 8 бит на компонент с субдискретизацией U и V плоскостей по горизонтали (U-Y-V-Y), т.е. два соседних по горизонтали пикселя хранятся как 32-битный макропиксель, который имеет значение Y для каждого пикселя и общие значения U и V. |
QVideoFrame::Format_YUYV |
22 |
Кадр хранится в упакованном формате YUV 8 бит на компонент с субдискретизацией U и V плоскостей по горизонтали (Y-U-Y-V), т.е. два соседних по горизонтали пикселя хранятся как 32-битный макропиксель, который имеет значение Y для каждого пикселя и общие значения U и V. |
QVideoFrame::Format_NV12 |
23 |
Кадр хранится в полупланарном формате YUV 8 бит на компонент с плоскостью Y, за которой следует упакованная, субдискретизированная по горизонтали и вертикали плоскость UV (U-V). |
QVideoFrame::Format_NV21 |
24 |
Кадр хранится в полупланарном формате YUV 8 бит на компонент с плоскостью Y, за которой следует упакованная, субдискретизированная по горизонтали и вертикали плоскость VU (V-U). |
QVideoFrame::Format_IMC1 |
25 |
Кадр хранится в планарном формате YUV 8 бит на компонент с субдискретизацией U и V плоскостей по горизонтали и вертикали. Это аналогично типу Format_YUV420P, за исключением того, что байты на строку плоскостей U и V заполняются до того же шага, что и плоскость Y. |
QVideoFrame::Format_IMC2 |
26 |
Кадр хранится в планарном формате YUV 8 бит на компонент с субдискретизацией U и V плоскостей по горизонтали и вертикали. Это аналогично типу Format_YUV420P, за исключением того, что строки плоскостей U и V чередуются, т.е. каждая строка данных U следует за строкой данных V, создавая одну строку с тем же шагом, что и данные Y. |
QVideoFrame::Format_IMC3 |
27 |
Кадр хранится в планарном формате YVU 8 бит на компонент с субдискретизацией V и U плоскостей по горизонтали и вертикали. Это аналогично типу Format_YV12, за исключением того, что байты на строку плоскостей V и U заполняются до того же шага, что и плоскость Y. |
QVideoFrame::Format_IMC4 |
28 |
Кадр хранится в планарном формате YVU 8 бит на компонент с субдискретизацией V и U плоскостей по горизонтали и вертикали. Это аналогично типу Format_YV12, за исключением того, что строки плоскостей V и U чередуются, т.е. каждая строка данных V следует за строкой данных U, создавая одну строку с тем же шагом, что и данные Y. |
QVideoFrame::Format_Y8 |
29 |
Кадр хранится в формате серого цвета 8 бит. |
QVideoFrame::Format_Y16 |
30 |
Кадр хранится в линейном формате серого цвета 16 бит. Маленький порядок байтов. |
QVideoFrame::Format_Jpeg |
31 |
Кадр хранится в сжатом формате JPEG. |
QVideoFrame::Format_CameraRaw |
32 |
Кадр хранится в формате необработанных данных камеры, специфичном для устройства. |
QVideoFrame::Format_AdobeDng |
33 |
Кадр хранится в формате необработанных данных Adobe Digital Negative (DNG). |
QVideoFrame::Format_User |
1000 |
Начальное значение для пользовательских форматов пикселей. |
Документация по функциям-членам
QVideoFrame::QVideoFrame(const QVideoFrame &other)
Создает неглубокую копию other. Поскольку QVideoFrame явно разделяется, эти два экземпляра будут отражать один и тот же кадр.
QVideoFrame::QVideoFrame(const QImage &image)
Создает видеокадр из image.
Примечание: Это создаст недействительный видеокадр, если нет типа кадра, эквивалентного формату изображения.
См. также 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)
Возвращает указатель на начало буфера данных кадра для плоскости plane.
Это значение действительно только пока данные кадра отображены.
Изменения, внесённые в данные, доступные через этот указатель (при отображении с правом записи), гарантируются только после вызова unmap() и отображения буфера для записи.
Эта функция была добавлена в Qt 5.4.
См. также map(), mappedBytes(), bytesPerLine() и planeCount().
const uchar *QVideoFrame::bits() const
Возвращает указатель на начало буфера данных кадра.
Это значение действительно только пока данные кадра отображены.
Если буфер не был отображён с доступом для чтения, содержимое этого буфера изначально будет неопределённым.
См. также map(), mappedBytes() и bytesPerLine().
const uchar *QVideoFrame::bits(int plane) const
Возвращает указатель на начало буфера данных кадра для плоскости plane.
Это значение действительно только пока данные кадра отображены.
Если буфер не был отображён с доступом для чтения, содержимое этого буфера изначально будет неопределённым.
Эта функция была добавлена в 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
Возвращает количество байтов в строке сканирования для плоскости plane.
Это значение действительно только пока данные кадра отображены.
Эта функция была добавлена в 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)
Отображает содержимое видеокадра в системную (доступную по адресу ЦП) память.
В некоторых случаях данные видеокадра могут храниться в видеопамяти или в другой памяти, недоступной, поэтому необходимо отобразить кадр перед доступом к данным пикселей. Это может включать копирование содержимого, поэтому избегайте отображения и размена, если это не требуется.
Карта режима указывает, нужно ли считывать и/или записывать содержимое отображённой памяти в кадр. Если режим карты включает флаг QAbstractVideoBuffer::ReadOnly, отображённая память будет заполняться содержимым видеокадра при первоначальном отображении. Если режим карты включает флаг QAbstractVideoBuffer::WriteOnly, содержимое, возможно, изменённой отображённой памяти, будет записано обратно в кадр при его отображении.
Во время отображения к содержимому видеокадра можно получить прямой доступ через указатель, возвращаемый функцией bits().
Когда доступ к данным больше не нужен, убедитесь, что вызывается функция unmap() для освобождения отображённой памяти и, возможно, обновления содержимого видеокадра.
Если видеокадр был отображён в режиме только для чтения, разрешается отображать его несколько раз в режиме только для чтения (и скрывать его соответствующее количество раз). Во всех остальных случаях необходимо сначала скрыть кадр, прежде чем отображать его второй раз.
Примечание: Запись в память, отображённую как только для чтения, не определена и может привести к изменениям в общих данных или к сбоям.
Возвращает true, если кадр был отображён в памяти в заданном режиме, и false в противном случае.
См. также unmap(), mapMode() и bits().
QAbstractVideoBuffer::MapMode QVideoFrame::mapMode() const
Возвращает режим отображения видеокадра в системной памяти.
См. также map() и QAbstractVideoBuffer::MapMode.
int QVideoFrame::mappedBytes() const
Возвращает количество байтов, занимаемых данными отображённого кадра.
Это значение применимо только во время отображения данных кадра.
См. также map().
QVariant QVideoFrame::metaData(const QString &key) const
Возвращает любые метаданные для этого кадра по заданному ключу.
Это могут быть данные, специфичные для кадра, из камеры или субтитры из декодированного видеопотока.
См. документацию соответствующего производителя видеокадров для получения дополнительной информации о доступных метаданных.
См. также setMetaData().
QVideoFrame::PixelFormat QVideoFrame::pixelFormat() const
Возвращает цветовой формат видеокадра.
[static] QVideoFrame::PixelFormat QVideoFrame::pixelFormatFromImageFormat(QImage::Format format)
Возвращает эквивалентный видеопиксельный формат для изображения format. Если эквивалентного формата нет, вместо этого возвращается QVideoFrame::InvalidType.
Примечание: В целом, QImage не обрабатывает форматы YUV.
int QVideoFrame::planeCount() const
Возвращает количество планов в видеокадре.
Это значение применимо только во время отображения данных кадра.
Эта функция была добавлена в Qt 5.4.
См. также map().
void QVideoFrame::setEndTime(qint64 time)
Устанавливает время представления (в микросекундах) завершения отображения кадра.
Неверное время представлено как -1.
См. также endTime().
void QVideoFrame::setFieldType(QVideoFrame::FieldType field)
Устанавливает поле, к которому относится чересстрочный видеокадр.
См. также fieldType().
void QVideoFrame::setMetaData(const QString &key, const QVariant &value)
Устанавливает метаданные для заданного ключа в значение.
Если значение является пустым вариантом, любые метаданные для этого ключа будут удалены.
Производитель видеокадра может использовать это для связывания определённых данных с этим кадром, или промежуточный процессор может добавлять информацию для потребителя этого кадра.
См. также metaData().
void QVideoFrame::setStartTime(qint64 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.13/qvideoframe.html