Класс QVideoFrame
Класс QVideoFrame представляет кадр видеоданных. Подробнее...
| Заголовок: | #include <QVideoFrame> |
| qmake: | QT += multimedia |
Открытые типы
| enum | FieldType { ProgressiveFrame, TopField, BottomField, InterlacedFrame } |
| enum | PixelFormat { Format_Invalid, Format_ARGB32, Format_ARGB32_Premultiplied, Format_RGB32, ..., Format_User } |
Открытые функции
| QVideoFrame() | |
| QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, PixelFormat format) | |
| QVideoFrame(int bytes, const QSize &size, int bytesPerLine, PixelFormat format) | |
| QVideoFrame(const QImage &image) | |
| QVideoFrame(const QVideoFrame &other) | |
| ~QVideoFrame() | |
| QVariantMap | availableMetaData() const |
| uchar * | bits() |
| uchar * | bits(int plane) |
| const uchar * | bits() const |
| const uchar * | bits(int plane) const |
| int | bytesPerLine() const |
| int | bytesPerLine(int plane) const |
| qint64 | endTime() const |
| 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 |
| PixelFormat | pixelFormat() const |
| int | planeCount() const |
| void | setEndTime(qint64 time) |
| void | setFieldType(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 |
| QVideoFrame & | operator=(const QVideoFrame &other) |
| bool | operator==(const QVideoFrame &other) const |
Статические открытые члены
| QImage::Format | imageFormatFromPixelFormat(PixelFormat format) |
| PixelFormat | pixelFormatFromImageFormat(QImage::Format format) |
Подробное описание
Класс QVideoFrame представляет кадр видеоданных.
Объект QVideoFrame инкапсулирует пиксельные данные видеокадра и информацию о кадре.
Видеокадры могут поступать из разных источников — декодированных медиа-данных, камеры или генерироваться программным способом. Способ описания пикселей в этих кадрах может значительно варьироваться, и некоторые форматы пикселей предлагают большие возможности сжатия за счет простоты использования.
Содержимое пикселей видеокадра может быть отображено в памяти с помощью функции map(). Во время отображения к видеоданным можно получить доступ с помощью функции bits(), которая возвращает указатель на буфер. Полный размер этого буфера задается функцией mappedBytes(), а размер каждой строки — функцией bytesPerLine(). Возвращаемое значение функции handle() также может использоваться для доступа к данным кадра с помощью собственных API внутреннего буфера (например, дескриптор текстуры OpenGL).
Видеокадр также может иметь связанную с ним информацию о временных метках. Эти временные метки могут использоваться реализацией QAbstractVideoSurface для определения времени начала и окончания отображения кадра, но не все поверхности могут учитывать эту настройку.
Пиксельные видеоданные в QVideoFrame инкапсулируются в QAbstractVideoBuffer. QVideoFrame может быть создан из любого типа буфера путем создания подкласса класса QAbstractVideoBuffer.
Примечание: поскольку копирование видеокадров может быть дорогостоящей операцией, QVideoFrame явно используется совместно, поэтому любое изменение, внесенное в видеокадр, также будет применяться ко всем копиям.
Документация по типам членов
enum 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_BGR32 |
10 |
Кадр хранится в формате BGR 32-бит (0xBBGGRRff). |
QVideoFrame::Format_BGR24 |
11 |
Кадр хранится в формате BGR 24-бит (0xBBGGRR). |
QVideoFrame::Format_BGR565 |
12 |
Кадр хранится в формате BGR 16-бит (5-6-5). |
QVideoFrame::Format_BGR555 |
13 |
Кадр хранится в формате BGR 16-бит (5-5-5). |
QVideoFrame::Format_BGRA5658_Premultiplied |
14 |
Кадр хранится в предумноженном формате BGRA 24-бит (5-6-5-8). |
QVideoFrame::Format_AYUV444 |
15 |
Кадр хранится в упакованном формате AYUV 32-бит (0xAAYYUUVV). |
QVideoFrame::Format_AYUV444_Premultiplied |
16 |
Кадр хранится в предумноженном упакованном формате AYUV 32-бит (0xAAYYUUVV). |
QVideoFrame::Format_YUV444 |
17 |
Кадр хранится в упакованном формате YUV 24-бит (8-8-8). |
QVideoFrame::Format_YUV420P |
18 |
Кадр хранится в формате YUV с 8 битами на компонент в плоском формате, где плоскости U и V горизонтально и вертикально подвыбираются, то есть высота и ширина плоскостей U и V в два раза меньше, чем у плоскости Y. |
QVideoFrame::Format_YV12 |
19 |
Кадр хранится в формате YVU с 8 битами на компонент в плоском формате, где плоскости V и U горизонтально и вертикально подвыбираются, то есть высота и ширина плоскостей V и U в два раза меньше, чем у плоскости Y. |
QVideoFrame::Format_UYVY |
20 |
Кадр хранится в упакованном формате YUV с 8 битами на компонент, где плоскости U и V горизонтально подвыбираются (U-Y-V-Y), то есть два горизонтально смежных пикселя хранятся как 32-битный макропиксель, который имеет значение Y для каждого пикселя и общие значения U и V. |
QVideoFrame::Format_YUYV |
21 |
Кадр хранится в упакованном формате YUV с 8 битами на компонент, где плоскости U и V горизонтально подвыбираются (Y-U-Y-V), то есть два горизонтально смежных пикселя хранятся как 32-битный макропиксель, который имеет значение Y для каждого пикселя и общие значения U и V. |
QVideoFrame::Format_NV12 |
22 |
Кадр хранится в полуплоском формате YUV с 8 битами на компонент, где плоскость Y идёт первой, за ней следует горизонтально и вертикально подвыбранная упакованная плоскость UV (U-V). |
QVideoFrame::Format_NV21 |
23 |
Кадр хранится в полуплоском формате YUV с 8 битами на компонент, где плоскость Y идёт первой, за ней следует горизонтально и вертикально подвыбранная упакованная плоскость VU (V-U). |
QVideoFrame::Format_IMC1 |
24 |
Кадр хранится в плоском формате YUV с 8 битами на компонент, где плоскости U и V горизонтально и вертикально подвыбираются. Это похоже на тип Format_YUV420P, за исключением того, что байты на строку плоскостей U и V заполняются до того же шага, что и плоскость Y. |
QVideoFrame::Format_IMC2 |
25 |
Кадр хранится в плоском формате YUV с 8 битами на компонент, где плоскости U и V горизонтально и вертикально подвыбираются. Это похоже на тип Format_YUV420P, за исключением того, что строки плоскостей U и V чередуются, то есть каждая строка данных U следует за строкой данных V, создавая одну строку с тем же шагом, что и данные Y. |
QVideoFrame::Format_IMC3 |
26 |
Кадр хранится в плоском формате YVU с 8 битами на компонент, где плоскости V и U горизонтально и вертикально подвыбираются. Это похоже на тип Format_YV12, за исключением того, что байты на строку плоскостей V и U заполняются до того же шага, что и плоскость Y. |
QVideoFrame::Format_IMC4 |
27 |
Кадр хранится в плоском формате YVU с 8 битами на компонент, где плоскости V и U горизонтально и вертикально подвыбираются. Это похоже на тип Format_YV12, за исключением того, что строки плоскостей V и U чередуются, то есть каждая строка данных V следует за строкой данных U, создавая одну строку с тем же шагом, что и данные Y. |
QVideoFrame::Format_Y8 |
28 |
Кадр хранится в 8-битном формате серого цвета. |
QVideoFrame::Format_Y16 |
29 |
Кадр хранится в 16-битном линейном формате серого цвета. Маленький порядок байтов. |
QVideoFrame::Format_Jpeg |
30 |
Кадр хранится в сжатом формате JPEG. |
QVideoFrame::Format_CameraRaw |
31 |
Кадр хранится в формате «сырого» изображения камеры, специфичном для устройства. |
QVideoFrame::Format_AdobeDng |
32 |
Кадр хранится в формате «сырого» изображения Adobe Digital Negative (DNG). |
QVideoFrame::Format_User |
1000 |
Начальное значение для пользовательских форматов пикселей. |
Документация по членам-функциям
QVideoFrame::QVideoFrame()
Создаёт пустой видеокадр.
QVideoFrame::QVideoFrame(QAbstractVideoBuffer *buffer, const QSize &size, PixelFormat format)
Создаёт видеокадр из buffer с заданным форматом пикселей format и размером size в пикселях.
Примечание: Это не увеличивает счётчик ссылок видеобуфера.
QVideoFrame::QVideoFrame(int bytes, const QSize &size, int bytesPerLine, PixelFormat format)
Создаёт видеокадр заданного формата пикселей format и размера size в пикселях.
bytesPerLine (шаг) — длина каждой строки сканирования в байтах, а bytes — общее количество байтов, которое необходимо выделить для кадра.
QVideoFrame::QVideoFrame(const QImage &image)
Создаёт видеокадр из image.
Примечание: Это создаст недействительный видеокадр, если нет эквивалентного типа кадра для формата изображения.
См. также pixelFormatFromImageFormat().
QVideoFrame::QVideoFrame(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().
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().
FieldType QVideoFrame::fieldType() const
Возвращает поле, к которому относится чересстрочный видеокадр.
Если видео не чересстрочное, это будет WholeFrame.
См. также setFieldType().
QVariant QVideoFrame::handle() const
Возвращает специфичную для типа ссылку на буфер видеокадра.
Для текстуры OpenGL это будет идентификатор текстуры.
См. также QAbstractVideoBuffer::handle().
QAbstractVideoBuffer::HandleType QVideoFrame::handleType() const
Возвращает тип ссылки на буфер видеокадра.
int QVideoFrame::height() const
Возвращает высоту видеокадра.
Формат изображения, эквивалентный видеоформату. QImage::Format QVideoFrame::imageFormatFromPixelFormat(PixelFormat format)
Возвращает формат изображения, эквивалентный видеоформату пикселей 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)
Отображает содержимое видеокадра в системной (доступной по адресу CPU) памяти.
В некоторых случаях данные видеокадра могут храниться в видеопамяти или в другой памяти, недоступной для доступа, поэтому для доступа к данным пикселей необходимо отобразить кадр. Это может включать копирование содержимого, поэтому избегайте отображения и развязывания, если это не требуется.
Режим отображения mode указывает, должно ли содержимое отображенной памяти считываться и/или записываться в кадр. Если режим отображения включает флаг QAbstractVideoBuffer::ReadOnly, отображенная память будет заполнена содержимым видеокадра при первоначальном отображении. Если режим отображения включает флаг QAbstractVideoBuffer::WriteOnly, содержимое, возможно, изменённой отображенной памяти, будет записано обратно в кадр при развязывании.
Во время отображения содержимое видеокадра может быть обработано напрямую через указатель, возвращаемый функцией bits().
Когда доступ к данным больше не нужен, обязательно вызовите функцию unmap(), чтобы освободить отображенную память и, возможно, обновить содержимое видеокадра.
Если видеокадр был отображен в режиме только для чтения, разрешено отображать его несколько раз в режиме только для чтения (и развязывать его соответствующее количество раз). Во всех остальных случаях необходимо сначала развязать кадр перед повторным отображением.
Примечание: Запись в память, отображённую как только для чтения, не определена и может привести к изменениям в общих данных или к сбоям.
END_OF_DOCUMENT_MARKERВозвращает 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().
PixelFormat QVideoFrame::pixelFormat() const
Возвращает цветовой формат видеокадра.
[static] 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(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().
Если флаг QAbstractVideoBuffer::WriteOnly был включен в MapMode, это сохранит текущее содержимое сопоставленной памяти в видеокадре.
unmap() не должен вызываться, если функция map() завершилась ошибкой.
См. также map().
int QVideoFrame::width() const
Возвращает ширину видеокадра.
bool QVideoFrame::operator!=(const QVideoFrame &other) const
Возвращает true , если этот QVideoFrame и other не отображают один и тот же кадр.
QVideoFrame &QVideoFrame::operator=(const QVideoFrame &other)
Присваивает содержимое other этому видеокадру. Поскольку QVideoFrame явно разделяемый, эти два экземпляра будут отображать один и тот же кадр.
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/archives/qt-5.6/qvideoframe.html