Класс QAbstractVideoBuffer
Класс QAbstractVideoBuffer является абстракцией для видеоданных. Подробнее...
| Заголовок: | #include <QAbstractVideoBuffer> |
| qmake: | QT += multimedia |
| Наследуется от: |
Типы публичного доступа
| Перечисление | HandleType { NoHandle, GLTextureHandle, XvShmImageHandle, CoreImageHandle, QPixmapHandle, …, UserHandle } |
| Перечисление | MapMode { NotMapped, ReadOnly, WriteOnly, ReadWrite } |
Функции публичного доступа
| 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 |
Подробное описание
Класс QVideoFrame использует QAbstractVideoBuffer в качестве внутреннего объекта для ссылки на буфер видеоданных. Часто буферы видеоданных могут находиться в видеопамяти, а не в оперативной памяти, и этот класс предоставляет абстракцию расположения.
Кроме того, создание подкласса QAbstractVideoBuffer позволит вам создавать видеокадры из предварительно выделенных или статических буферов в тех случаях, когда конструкторы QVideoFrame, принимающие QByteArray или QImage, не подходят. Это может потребоваться при реализации новой системы видеообработки с аппаратным ускорением, например.
В содержимое буфера можно получить доступ, отобразив буфер в оперативную память с помощью функции map(), которая возвращает указатель на память, содержащую содержимое видеобуфера. Память, возвращенная функцией map(), освобождается путем вызова функции unmap().
Дескриптор (handle) буфера также может быть использован для управления его содержимым с помощью специфичных для типа API. Тип дескриптора буфера задается функцией handleType().
См. также QVideoFrame.
Документация типов членов
Перечисление QAbstractVideoBuffer::HandleType
Определяет тип дескриптора (handle) видеобуфера.
| Константа | Значение | Описание |
|---|---|---|
QAbstractVideoBuffer::NoHandle |
0 |
Буфер не имеет дескриптора (handle), доступ к его данным возможен только с помощью отображения буфера. |
QAbstractVideoBuffer::GLTextureHandle |
1 |
Дескриптор (handle) буфера — идентификатор текстуры OpenGL. |
QAbstractVideoBuffer::XvShmImageHandle |
2 |
Дескриптор (handle) содержит указатель на изображение XVideo в общей памяти. |
QAbstractVideoBuffer::CoreImageHandle |
3 |
Дескриптор (handle) содержит указатель на объект CIImage macOS. |
QAbstractVideoBuffer::QPixmapHandle |
4 |
Дескриптор (handle) буфера — объект QPixmap. |
QAbstractVideoBuffer::EGLImageHandle |
5 |
Дескриптор (handle) буфера — EGLImageKHR. |
QAbstractVideoBuffer::UserHandle |
1000 |
Начальное значение для типов дескрипторов (handle), определенных пользователем. |
См. также 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
Возвращает специфичный для типа дескриптор (handle) буфера данных.
Тип дескриптора (handle) задается функцией handleType().
См. также handleType().
QAbstractVideoBuffer::HandleType QAbstractVideoBuffer::handleType() const
Возвращает тип дескриптора (handle) видеобуфера.
См. также 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 и реализуйте вместо этого экземпляр его функции map.
Эта функция была введена в 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/qt-5.15/qabstractvideobuffer.html