Класс QAbstractVideoSurface
Класс QAbstractVideoSurface — базовый класс для поверхностей отображения видео. Подробнее...
| Заголовок: | #include <QAbstractVideoSurface> |
| qmake: | QT += multimedia |
| Наследует: | QObject |
Открытые типы
| перечисление | Ошибка { НетОшибки, ОшибкаФормата, НеправильныйФормат, ОшибкаОстановки, ОшибкаРесурса } |
Свойства
- nativeResolution : const QSize
Открытые функции
| QAbstractVideoSurface(QObject *parent = nullptr) | |
| виртуальный | ~QAbstractVideoSurface() |
| QAbstractVideoSurface::Ошибка | ошибка() const |
| bool | isActive() const |
| виртуальный bool | поддерживаетФормат(const QVideoSurfaceFormat &format) const |
| QSize | nativeResolution() const |
| виртуальный QVideoSurfaceFormat | ближайшийФормат(const QVideoSurfaceFormat &format) const |
| виртуальный bool | представить(const QVideoFrame &frame) = 0 |
| виртуальный bool | начать(const QVideoSurfaceFormat &format) |
| виртуальный void | остановить() |
| виртуальный QList<QVideoFrame::PixelFormat> | поддерживаемыеФорматыПикселей(QAbstractVideoBuffer::HandleType type = QAbstractVideoBuffer::NoHandle) const = 0 |
| QVideoSurfaceFormat | форматПоверхности() const |
Сигналы
| void | activeChanged(bool active) |
| void | nativeResolutionChanged(const QSize &resolution) |
| void | supportedFormatsChanged() |
| void | surfaceFormatChanged(const QVideoSurfaceFormat &format) |
Защищенные функции
| void | установитьОшибка(QAbstractVideoSurface::Ошибка error) |
| void | установитьNativeResolution(const QSize &resolution) |
Подробное описание
Класс QAbstractVideoSurface определяет стандартный интерфейс, который производители видео используют для взаимодействия с поверхностями отображения видео. Вы можете создать подкласс этого интерфейса, чтобы получать видеокадры из таких источников, как декодированное медиа или камеры, для выполнения собственной обработки.
Поверхность видео отображает непрерывный поток одинаково отформатированных экземпляров QVideoFrame, где формат каждого кадра совместим с форматом потока, указанным при запуске презентации. Каждый кадр может содержать информацию о временной метке, которую поверхность может использовать для определения того, когда отображать этот кадр.
Список форматов пикселей, которые может отобразить поверхность, предоставляется функцией supportedPixelFormats(), а функция isFormatSupported() проверит, поддерживается ли формат видеоповерхности. Если формат не поддерживается, функция nearestFormat() может предложить похожий формат. Например, если поверхность поддерживает фиксированный набор разрешений, она может предложить наименьшее поддерживаемое разрешение, содержащее предлагаемое разрешение.
Функция start() принимает поддерживаемый формат и активирует поверхность видео. После запуска поверхность начнет отображать кадры, которые она получает в функции present(). Поверхности могут удерживать ссылку на буфер представленного видеокадра до тех пор, пока не будет представлен новый кадр или не будет остановлен поток. Кроме того, поверхность видео может удерживать ссылку на видеокадр до тех пор, пока не пройдет конечная временная метка. Функция stop() деактивирует поверхность и освобождает любые буферы видео, на которые она ссылается.
Реализация подкласса QAbstractVideoSurface
При реализации подкласса этого интерфейса вам нужно реализовать лишь несколько функций, разделенные на два класса:
- Связанные с форматом
- Связанные с представлением
Для функциональности, связанной с форматом, вам просто нужно описать поддерживаемые форматы пикселей (и функцию nearestFormat()). Для функциональности, связанной с представлением, вам нужно реализовать функцию present(), а также функции start() и stop().
Примечание: Вы должны вызвать реализацию базового класса start() и stop() в своей реализации.
Документация по типам членов
перечисление QAbstractVideoSurface::Ошибка
Это перечисление описывает ошибки, которые могут быть возвращены функцией ошибка().
| Константа | Значение | Описание |
|---|---|---|
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.
[signal] void QAbstractVideoSurface::activeChanged(bool active)
Сигнализирует об изменении активного состояния поверхности видео.
См. также isActive(), start() и stop().
[signal] void QAbstractVideoSurface::nativeResolutionChanged(const QSize &resolution)
Сигнализирует о том, что родное разрешение поверхности видео изменилось.
Примечание: Сигнал уведомления для свойства nativeResolution.
[signal] void QAbstractVideoSurface::supportedFormatsChanged()
Сигнализирует, что набор форматов, поддерживаемых поверхностью видео, изменился.
См. также supportedPixelFormats() и isFormatSupported().
[signal] void QAbstractVideoSurface::surfaceFormatChanged(const QVideoSurfaceFormat &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.
Похожий формат поверхности — это такой, у которого одинаковый формат пикселей и тип обработчика, но могут отличаться некоторые другие свойства. Например, если существуют ограничения на размеры кадров, которые может принять поверхность видео, она может предложить формат с большим размером кадра и областью просмотра размером с исходный размер кадра.
Если формат уже поддерживается, он будет возвращён без изменений, или если нет подобного поддерживаемого формата, будет возвращён недействительный формат.
[pure virtual] bool QAbstractVideoSurface::present(const QVideoFrame &frame)
Представляет кадр видео 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)
Устанавливает родное разрешение поверхности видео.
Эта функция может вызываться реализующими этот интерфейс для указания производителям кадров, какое родное разрешение у этой поверхности.
См. также 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.13/qabstractvideosurface.html