Класс QAbstractVideoSurface
Класс QAbstractVideoSurface является базовым классом для поверхностей представления видео. Подробнее...
| Заголовок: | #include <QAbstractVideoSurface> |
| qmake: | QT += multimedia |
| Наследует: | QObject |
Типы public
| Перечисление | Ошибка { НетОшибки, ОшибкаНеподдерживаемогоФормата, ОшибкаНеправильногоФормата, ОшибкаОстановки, ОшибкаРесурса } |
Свойства
- nativeResolution : const QSize
Функции public
| QAbstractVideoSurface(QObject *parent = nullptr) | |
| virtual | ~QAbstractVideoSurface() |
| QAbstractVideoSurface::Ошибка | error() const |
| bool | isActive() const |
| virtual bool | isFormatSupported(const QVideoSurfaceFormat &format) const |
| QSize | nativeResolution() const |
| virtual QVideoSurfaceFormat | nearestFormat(const QVideoSurfaceFormat &format) const |
| virtual bool | present(const QVideoFrame &frame) = 0 |
| virtual bool | start(const QVideoSurfaceFormat &format) |
| virtual void | stop() |
| virtual QList<QVideoFrame::PixelFormat> | supportedPixelFormats(QAbstractVideoBuffer::HandleType type = QAbstractVideoBuffer::NoHandle) const = 0 |
| QVideoSurfaceFormat | surfaceFormat() const |
Сигналы
| void | activeChanged(bool active) |
| void | nativeResolutionChanged(const QSize &resolution) |
| void | supportedFormatsChanged() |
| void | surfaceFormatChanged(const QVideoSurfaceFormat &format) |
Защищенные функции
| void | setError(QAbstractVideoSurface::Ошибка error) |
| void | setNativeResolution(const QSize &resolution) |
Подробное описание
Класс QAbstractVideoSurface определяет стандартный интерфейс, который видеопроизводители используют для взаимодействия с поверхностями представления видео. Вы можете подклассировать этот интерфейс, чтобы получать видеокадры из источников, таких как декодированное медиа или камеры, для выполнения собственной обработки.
Поверхность видео представляет собой непрерывный поток одинаково отформатированных экземпляров QVideoFrame, где формат каждого кадра совместим с форматом потока, предоставленным при запуске представления. Каждый кадр может иметь информацию о временной метке, которая может использоваться поверхностью для определения того, когда отображать этот кадр.
Список форматов пикселей, которые может отображать поверхность, задается функцией supportedPixelFormats(), а функция isFormatSupported() проверяет, поддерживается ли формат видеоповерхности. Если формат не поддерживается, функция nearestFormat() может предложить похожий формат. Например, если поверхность поддерживает фиксированный набор разрешений, она может предложить самое меньшее поддерживаемое разрешение, которое содержит предложенное разрешение.
Функция start() принимает поддерживаемый формат и включает видеоповерхность. После запуска поверхность начнет отображать кадры, которые она получает в функции present(). Поверхности могут хранить ссылку на буфер представленного видеокадра до тех пор, пока не будет представлен новый кадр или не будет остановлен поток. Кроме того, видеоповерхность может хранить ссылку на видеокадр до тех пор, пока не будет пройден конечный отметки времени. Функция stop() отключит поверхность и освободит любые буферы видео, к которым она хранит ссылки.
Реализация подкласса QAbstractVideoSurface
При реализации подкласса этого интерфейса необходимо реализовать лишь несколько функций, разделенных на два класса:
- Связанные с форматом
- Связанные с представлением
Для функциональности, связанной с форматом, вам нужно только описать форматы пикселей, которые вы поддерживаете (и функцию nearestFormat()). Для функциональности, связанной с представлением, вам нужно реализовать функцию present(), а также функции start() и stop().
Примечание: Вы должны вызвать реализацию базового класса start() и stop() в своей реализации.
Документация по типам членов
Перечисление QAbstractVideoSurface::Ошибка
Это перечисление описывает ошибки, которые могут возвращаться функцией error().
| Константа | Значение | Описание |
|---|---|---|
QAbstractVideoSurface::NoError |
0 |
Ошибка не произошла. |
QAbstractVideoSurface::UnsupportedFormatError |
1 |
Формат видео не поддерживается. |
QAbstractVideoSurface::IncorrectFormatError |
2 |
Видеокадр несовместим с форматом поверхности. |
QAbstractVideoSurface::StoppedError |
3 |
Поверхность не запущена. |
QAbstractVideoSurface::ResourceError |
4 |
Поверхность не смогла выделить некоторый ресурс. |
Документация по свойствам
nativeResolution : const QSize
Родное разрешение видеоповерхности. Это разрешение видеокадров, которые поверхность может рендерить с оптимальным качеством и/или производительностью.
Родное разрешение не всегда известно и может меняться во время воспроизведения.
Функции доступа:
| QSize | nativeResolution() const |
Сигнал-уведомление:
| void | nativeResolutionChanged(const QSize &resolution) |
Документация по функциям-членам
QAbstractVideoSurface::QAbstractVideoSurface(QObject *parent = nullptr)
Конструирует видеоповерхность с заданным parent.
ИзменилсяАктивныйСостояниеvoid QAbstractVideoSurface::activeChanged(bool active)
Сигнализирует, что состояние active видеоповерхности изменилось.
См. также isActive(), start() и stop().
ИзменилосьРодноеРазрешениеvoid QAbstractVideoSurface::nativeResolutionChanged(const QSize &resolution)
Сигнализирует о том, что родное resolution видеоповерхности изменилось.
Примечание: Сигнал Notifier для свойства nativeResolution.
[signal] void QAbstractVideoSurface::supportedFormatsChanged()
Сигнализирует о том, что набор форматов, поддерживаемых видеоповерхностью, изменился.
См. также supportedPixelFormats() и isFormatSupported().
[signal] void QAbstractVideoSurface::surfaceFormatChanged(const QVideoSurfaceFormat &format)
Сигнализирует о том, что конфигурируемый формат format видеоповерхности изменился.
См. также surfaceFormat() и start().
[virtual] QAbstractVideoSurface::~QAbstractVideoSurface()
Удаляет видеоповерхность.
QAbstractVideoSurface::Error QAbstractVideoSurface::error() const
Возвращает последнюю произошедшую ошибку.
Если поверхность не может запуститься или неожиданно останавливается, этот метод можно вызвать, чтобы определить, какая ошибка произошла.
См. также setError().
bool QAbstractVideoSurface::isActive() const
Указывает, была ли запущена видеоповерхность.
Возвращает true, если поверхность запущена, и false в противном случае.
[virtual] bool QAbstractVideoSurface::isFormatSupported(const QVideoSurfaceFormat &format) const
Проверяет формат видеоповерхности format, чтобы определить, может ли поверхность его принять.
Возвращает true, если формат поддерживается поверхностью, и false в противном случае.
[virtual] QVideoSurfaceFormat QAbstractVideoSurface::nearestFormat(const QVideoSurfaceFormat &format) const
Возвращает поддерживаемый формат видеоповерхности, похожий на format.
Похожий формат поверхности — это формат с тем же форматом пикселей и типом дескриптора, но может отличаться по некоторым другим свойствам. Например, если существуют ограничения на размеры кадров, которые может принять видеоповерхность, она может предложить формат с бОльшим размером кадра и viewport размером исходного размера кадра.
Если формат уже поддерживается, он возвращается без изменений, или, если нет аналогичного поддерживаемого формата, возвращается недействительный формат.
[pure virtual] bool QAbstractVideoSurface::present(const QVideoFrame &frame)
Представляет видеокадр.
Возвращает true, если кадр был представлен, и false, если произошла ошибка.
Не все поверхности будут блокироваться до завершения представления кадра. Вызов present() на неблокирующей поверхности может завершиться неудачей, если он вызывается до завершения представления предыдущего кадра. В таких случаях поверхность может не вернуться в состояние готовности до того, как у неё будет возможность обработать события.
Если present() завершится неудачей по любой другой причине, поверхность должна немедленно перейти в состояние остановки, и значение error() будет установлено.
Видеоповерхность должна быть в состоянии запущена, для успешного выполнения present(), и формат видеокадра должен быть совместим с текущим форматом видеоповерхности.
См. также error().
[protected] void QAbstractVideoSurface::setError(QAbstractVideoSurface::Error error)
Устанавливает значение error() в error.
Это можно вызвать реализациям этого интерфейса, чтобы сообщить, в чём заключалась последняя ошибка.
См. также error().
[protected] void QAbstractVideoSurface::setNativeResolution(const QSize &resolution)
Устанавливает родное разрешение видеоповерхности resolution.
Этот метод можно вызвать реализациям этого интерфейса, чтобы указать производителям кадров, каково родное разрешение этой поверхности.
См. также nativeResolution().
[virtual] bool QAbstractVideoSurface::start(const QVideoSurfaceFormat &format)
Запускает видеоповерхность, отображающую кадры format.
Возвращает true, если поверхность была запущена, и false, если произошла ошибка.
Примечание: Вы должны вызвать реализацию базового класса start() в конце вашей реализации.
См. также isActive() и stop().
[virtual] void QAbstractVideoSurface::stop()
Останавливает видеоповерхность, отображающую кадры, и освобождает любые ресурсы, полученные в start().
Примечание: Вы должны вызвать реализацию базового класса stop() в начале вашей реализации.
См. также isActive() и start().
[pure virtual] QList<QVideoFrame::PixelFormat> QAbstractVideoSurface::supportedPixelFormats(QAbstractVideoBuffer::HandleType type = QAbstractVideoBuffer::NoHandle) const
Возвращает список форматов пикселей, которые может отобразить видеоповерхность для данного типа дескриптора type.
Форматы пикселей, возвращённые для типа QAbstractVideoBuffer::NoHandle, действительны для любого буфера, который можно отобразить в режиме только для чтения.
Типы, которые стоят первыми в списке, можно считать быстрее для отрисовки.
QVideoSurfaceFormat QAbstractVideoSurface::surfaceFormat() const
Возвращает формат видеоповерхности.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qabstractvideosurface.html