Класс QAbstractVideoBuffer
Класс QAbstractVideoBuffer — это абстракция для видеоданных. Подробнее...
| Заголовок: | #include <QAbstractVideoBuffer> |
| qmake: | QT += multimedia |
| Наследуется от: |
Типы
| Перечисление | HandleType { NoHandle, GLTextureHandle, XvShmImageHandle, CoreImageHandle, ..., UserHandle } |
| Перечисление | MapMode { NotMapped, ReadOnly, WriteOnly, ReadWrite } |
Открытые функции
| QAbstractVideoBuffer(HandleType type) | |
| virtual | ~QAbstractVideoBuffer() |
| virtual QVariant | handle() const |
| HandleType | handleType() const |
| virtual uchar * | map(MapMode mode, int *numBytes, int *bytesPerLine) = 0 |
| virtual MapMode | mapMode() const = 0 |
| int | mapPlanes(MapMode mode, int *numBytes, int[4] bytesPerLine, uchar *[4] data) |
| virtual void | release() |
| virtual void | unmap() = 0 |
Подробное описание
Класс QAbstractVideoBuffer — это абстракция для видеоданных.
Класс QVideoFrame использует QAbstractVideoBuffer внутри для ссылки на буфер видеоданных. Часто буферы видеоданных могут находиться в видеопамяти, а не в системной памяти, и этот класс предоставляет абстракцию расположения.
Кроме того, создание подкласса QAbstractVideoBuffer позволит создавать видеокадры из предварительно выделенных или статических буферов в тех случаях, когда конструкторы QVideoFrame, принимающие QByteArray или QImage, не подходят. Это может потребоваться при реализации новой системы ускоренной обработки видео, например.
Содержимое буфера можно получить, отобразив буфер в память с помощью функции map(), которая возвращает указатель на память, содержащую содержимое буфера видео. Память, возвращенная map(), освобождается путем вызова функции unmap().
Дескриптор (handle) буфера также может использоваться для управления его содержимым с использованием API, специфичных для типа. Тип дескриптора буфера задается функцией handleType().
См. также QVideoFrame.
Документация по типам членов
Перечисление QAbstractVideoBuffer::HandleType
Идентифицирует тип дескриптора (handle) буфера видео.
| Константа | Значение | Описание |
|---|---|---|
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(HandleType type)
Создает абстрактный буфер видео заданного типа type.
[virtual] QAbstractVideoBuffer::~QAbstractVideoBuffer()
Удаляет абстрактный буфер видео.
[virtual] QVariant QAbstractVideoBuffer::handle() const
Возвращает дескриптор (handle) буфера данных, специфичный для типа.
Тип дескриптора указан в функции handleType().
См. также handleType().
HandleType QAbstractVideoBuffer::handleType() const
Возвращает тип дескриптора буфера видео.
См. также handle().
[pure virtual] uchar *QAbstractVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine)
Отображает содержимое буфера видео в память.
В некоторых случаях буфер видео может храниться в видеопамяти или в памяти, недоступной другим способом, поэтому перед доступом к данным пикселей необходимо отобразить буфер. Это может включать копирование содержимого, поэтому избегайте отображения и закрытия отображения, если это не требуется.
Режим отображения mode указывает, нужно ли читать и/или записывать содержимое отображенной памяти в буфер. Если режим отображения включает флаг QAbstractVideoBuffer::ReadOnly, отображенная память будет заполнена содержимым буфера при первом отображении. Если режим отображения включает флаг QAbstractVideoBuffer::WriteOnly, содержимое, возможно, измененной отображенной памяти будет записано обратно в буфер при закрытии отображения.
Когда доступ к данным больше не нужен, обязательно вызовите функцию unmap(), чтобы освободить отображенную память и, возможно, обновить содержимое буфера.
Возвращает указатель на отображенный регион памяти или нулевой указатель, если отображение не удалось. Размер отображенного региона памяти в байтах возвращается в numBytes, а строковый шаг (line stride) в bytesPerLine.
Примечание: Запись в память, отображенную как только для чтения, является неопределенной и может привести к изменениям общих данных или ошибкам.
См. также unmap() и mapMode().
[pure virtual] MapMode QAbstractVideoBuffer::mapMode() const
Возвращает режим отображения буфера видео.
См. также map().
int QAbstractVideoBuffer::mapPlanes(MapMode mode, int *numBytes, int[4] bytesPerLine, uchar *[4] data)
Независимо отображает плоскости буфера видео в память.
Режим отображения 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/archives/qt-5.6/qabstractvideobuffer.html