Класс QAbstractVideoBuffer
Класс QAbstractVideoBuffer является абстракцией для видеоданных. Подробнее...
| Заголовок: | #include <QAbstractVideoBuffer> |
| qmake: | QT += multimedia |
| Наследуется от: |
Типы публичного доступа
| перечисление | HandleType { НетОбработчика, GLTextureHandle, XvShmImageHandle, CoreImageHandle, ..., ОбработчикПользователя } |
| перечисление | MapMode { НеОтображено, ТолькоДляЧтения, ТолькоДляЗаписи, ДляЧтенияИЗаписи } |
Функции публичного доступа
| QAbstractVideoBuffer(QAbstractVideoBuffer::HandleType type) | |
| виртуальный | ~QAbstractVideoBuffer() |
| виртуальный QVariant | handle() const |
| QAbstractVideoBuffer::HandleType | handleType() const |
| виртуальный uchar * | map(QAbstractVideoBuffer::MapMode mode, int *numBytes, int *bytesPerLine) = 0 |
| виртуальный QAbstractVideoBuffer::MapMode | mapMode() const = 0 |
| int | mapPlanes(QAbstractVideoBuffer::MapMode mode, int *numBytes, int [4] bytesPerLine = 4, uchar *[4] data = 4) |
| виртуальный void | release() |
| виртуальный void | unmap() = 0 |
Подробное описание
Класс QAbstractVideoBuffer является абстракцией для видеоданных.
Класс QVideoFrame использует QAbstractVideoBuffer внутри для ссылки на буфер видеоданных. Часто буферы видеоданных могут находиться в видеопамяти, а не в системной памяти, и этот класс предоставляет абстракцию местоположения.
Кроме того, создание подкласса QAbstractVideoBuffer позволит создавать видеокадры из предварительно выделенных или статических буферов в случаях, когда конструкторы QVideoFrame, принимающие QByteArray или QImage, недостаточны. Это может быть необходимо при реализации новой системы видеообработки с аппаратным ускорением, например.
Содержание буфера можно получить, отобразив буфер в память с помощью функции map(), которая возвращает указатель на память, содержащую содержимое буфера видеоданных. Память, возвращаемая функцией map(), освобождается с помощью функции unmap().
Обработчик handle() буфера также может использоваться для управления его содержимым с помощью API, специфичных для типа. Тип обработчика буфера задается функцией handleType().
См. также QVideoFrame.
Документация по типам-членам
перечисление QAbstractVideoBuffer::HandleType
Идентифицирует тип обработчика буфера видеоданных.
| Константа | Значение | Описание |
|---|---|---|
QAbstractVideoBuffer::NoHandle |
0 |
Буфер не имеет обработчика; данные можно получить только с помощью отображения буфера. |
QAbstractVideoBuffer::GLTextureHandle |
1 |
Обработчик буфера — идентификатор текстуры OpenGL. |
QAbstractVideoBuffer::XvShmImageHandle |
2 |
Обработчик содержит указатель на изображение XVideo в общей памяти. |
QAbstractVideoBuffer::CoreImageHandle |
3 |
Обработчик содержит указатель на CIImage macOS. |
QAbstractVideoBuffer::QPixmapHandle |
4 |
Обработчик буфера — QPixmap. |
QAbstractVideoBuffer::EGLImageHandle |
5 |
Обработчик буфера — EGLImageKHR. |
QAbstractVideoBuffer::UserHandle |
1000 |
Начальное значение для пользовательских типов обработчиков. |
См. также handleType().
перечисление QAbstractVideoBuffer::MapMode
Перечисляет способы отображения данных буфера видео в системную память.
| Константа | Значение | Описание |
|---|---|---|
QAbstractVideoBuffer::NotMapped |
0x00 |
Буфер видео не отображен в памяти. |
QAbstractVideoBuffer::ReadOnly |
0x01 |
Данные из буфера видео загружаются в отображенную память при отображении, но содержимое отображенной памяти может быть удалено при отображении. |
QAbstractVideoBuffer::WriteOnly |
0x02 |
Отображенная память не инициализируется при отображении, но потенциально измененное содержимое будет использоваться для заполнения буфера видео при отображении. |
QAbstractVideoBuffer::ReadWrite |
ReadOnly | WriteOnly |
Отображенная память заполняется данными из буфера видео, и буфер видео заполняется содержимым отображенной памяти при отображении. |
Документация по функциям-членам
QAbstractVideoBuffer::QAbstractVideoBuffer(QAbstractVideoBuffer::HandleType type)
Создает абстрактный буфер видео заданного типа type.
[virtual] QAbstractVideoBuffer::~QAbstractVideoBuffer()
Уничтожает абстрактный буфер видео.
[virtual] QVariant QAbstractVideoBuffer::handle() const
Возвращает обработчик, специфичный для типа, буфера данных.
Тип обработчика задается функцией handleType().
См. также handleType().
QAbstractVideoBuffer::HandleType QAbstractVideoBuffer::handleType() const
Возвращает тип обработчика буфера видеоданных.
См. также handle().
[pure virtual] uchar *QAbstractVideoBuffer::map(QAbstractVideoBuffer::MapMode mode, int *numBytes, int *bytesPerLine)
Отображает содержимое буфера видео в память.
В некоторых случаях буфер видео может храниться в видеопамяти или в ином недоступном сегменте памяти, поэтому перед доступом к данным пикселей необходимо отобразить буфер. Это может включать копирование содержимого, поэтому избегайте отображения и отображения, если это не требуется.
Режим отображения mode указывает, должно ли содержимое отображенной памяти читаться из и/или записываться в буфер. Если режим отображения включает флаг QAbstractVideoBuffer::ReadOnly, отображенная память будет заполнена содержимым буфера при первоначальном отображении. Если режим отображения включает флаг QAbstractVideoBuffer::WriteOnly, содержимое потенциально измененной отображенной памяти будет перезаписано в буфер при отображении.
Когда доступ к данным больше не нужен, обязательно вызовите функцию unmap() для освобождения отображенной памяти и возможного обновления содержимого буфера.
Возвращает указатель на отображенный регион памяти или нулевой указатель, если отображение не удалось. Размер отображенного региона памяти в байтах возвращается в numBytes, а шаг строки — в bytesPerLine.
Примечание: Запись в память, отображенную как только для чтения, не определена и может привести к изменениям в общих данных или к сбоям.
См. также unmap() и mapMode().
[pure virtual] QAbstractVideoBuffer::MapMode QAbstractVideoBuffer::mapMode() const
Возвращает режим отображения буфера видео.
См. также map().
int QAbstractVideoBuffer::mapPlanes(QAbstractVideoBuffer::MapMode mode, int *numBytes, int [4] bytesPerLine = 4, uchar *[4] data = 4)
Независимо отображает плоскости буфера видео в память.
Режим отображения mode указывает, следует ли читать/записывать содержимое отображенной памяти в буфер. Если режим отображения включает флаг QAbstractVideoBuffer::ReadOnly, отображенная память будет заполняться содержимым буфера при первоначальном отображении. Если режим отображения включает флаг QAbstractVideoBuffer::WriteOnly, содержимое, возможно, изменённой отображенной памяти, будет записано обратно в буфер при размыкании.
Когда доступ к данным больше не нужен, обязательно вызовите функцию unmap(), чтобы освободить отображенную память и, возможно, обновить содержимое буфера.
Возвращает количество плоскостей в отображенных видеоданных. Для каждой плоскости размер строки этой плоскости будет возвращён в bytesPerLine, а указатель на данные плоскости будет возвращён в data. Общий размер отображенных данных возвращается в numBytes.
Не все реализации буферов будут отображать более первой плоскости, если это возвращает одну плоскость для плоского формата, дополнительные плоскости нужно будет вычислить из размера строки первой плоскости и высоты кадра. Отображение буфера с помощью QVideoFrame сделает это за вас.
Для реализации этой функции создайте производный класс от QAbstractPlanarVideoBuffer и реализуйте его функцию отображения вместо.
Эта функция была добавлена в Qt 5.4.
[virtual] void QAbstractVideoBuffer::release()
Освобождает буфер видео.
QVideoFrame вызывает QAbstractVideoBuffer::release, когда буфер больше не используется и может быть уничтожен или возвращён в пул буферов.
По умолчанию реализация удаляет экземпляр буфера.
[pure virtual] void QAbstractVideoBuffer::unmap()
Освобождает память, отображенную функцией map().
Если режим отображения MapMode включал флаг QAbstractVideoBuffer::WriteOnly, это запишет текущее содержимое отображенной памяти обратно в кадр видео.
См. также map().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qabstractvideobuffer.html