Класс QAbstractVideoBuffer
Класс QAbstractVideoBuffer — это абстракция для видеоданных. Подробнее...
| Заголовок: | #include <QAbstractVideoBuffer> |
| qmake: | QT += multimedia |
| Наследуется от: |
Типы публичного доступа
| перечисление | HandleType { НетРучки, GLТекстураРучка, XvShmИзображениеРучка, CoreImageРучка, ..., ПользовательскаяРучка } |
| перечисление | MapMode { НеОтмечено, ТолькоЧтение, ТолькоЗапись, ЧтениеЗапись } |
Функции публичного доступа
| 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
Возвращает ручку, специфичную для типа, для буфера данных.
Тип ручки задается функцией 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.13/qabstractvideobuffer.html