Spec-Zone.ru › Qt 5.12

Класс QAbstractVideoBuffer

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

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

QAbstractPlanarVideoBuffer

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

Типы

перечисление HandleType { NoHandle, GLTextureHandle, XvShmImageHandle, CoreImageHandle, ..., 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

Защищенные переменные

QAbstractVideoBufferPrivate * d_ptr
QAbstractVideoBuffer::HandleType m_type

Подробное описание

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

См. также 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 и реализуйте его функцию 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.12/qabstractvideobuffer.html

Spec-Zone.ru

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