Класс 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
Определяет тип дескриптора буфера видео.
| Постоянная | Значение | Описание |
|---|---|---|
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
Возвращает дескриптор (handle) данных буфера, специфичный для типа.
Тип дескриптора задается функцией 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/qt-5.14/qabstractvideobuffer.html