Класс QAbstractVideoBuffer
Класс QAbstractVideoBuffer — это абстракция для видеоданных. Подробнее...
| Заголовок: | #include <QAbstractVideoBuffer> |
| qmake: | QT += multimedia |
| Наследуется от: |
Типы публичного интерфейса
| перечисление | HandleType { НетРучки, GLТекстураРучка, XvShmИзображениеРучка, CoreImageРучка, ..., ПользовательскаяРучка } |
| перечисление | MapMode { НеОтображено, ТолькоЧтение, ТолькоЗапись, ЧтениеЗапись } |
Публичные функции
| QAbstractVideoBuffer(HandleType type) | |
| виртуальный | ~QAbstractVideoBuffer() |
| виртуальный QVariant | handle() const |
| HandleType | handleType() const |
| виртуальный uchar * | map(MapMode mode, int *numBytes, int *bytesPerLine) = 0 |
| виртуальный MapMode | mapMode() const = 0 |
| int | mapPlanes(MapMode mode, int *numBytes, int[4] bytesPerLine, uchar *[4] data) |
| виртуальный void | release() |
| виртуальный void | unmap() = 0 |
Подробное описание
Класс QAbstractVideoBuffer — это абстракция для видеоданных.
Класс 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(HandleType type)
Конструирует абстрактный видеобуфер заданного типа type.
[virtual] QAbstractVideoBuffer::~QAbstractVideoBuffer()
Удаляет абстрактный видеобуфер.
[virtual] QVariant QAbstractVideoBuffer::handle() const
Возвращает тип-специфическую ручку буфера данных.
Тип ручки задаётся функцией 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, а шаг строки в 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 и реализуйте его функцию отображения.
Эта функция была добавлена в 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.9/qabstractvideobuffer.html