Spec-Zone.ru › Qt 5.14

Класс QAbstractVideoBuffer

Класс QAbstractVideoBuffer является абстракцией для видеоданных. Подробнее...

Заголовок: #include <QAbstractVideoBuffer>
qmake: QT += multimedia
Наследуется от:

QAbstractPlanarVideoBuffer

  • Список всех членов, включая наследуемые

Типы публичного доступа

перечисление 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 Отображенная память заполняется данными из буфера видео, и буфер видео заполняется содержимым отображенной памяти при её отображении.

См. также mapMode() и map().

Документация по функциям-членам

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API