Spec-Zone.ru › Qt 5.13

Класс QVideoFilterRunnable

Класс QVideoFilterRunnable представляет собой реализацию фильтра, владеющего всеми графическими и вычислительными ресурсами и выполняющего фактическое фильтрацию или вычисления. Подробнее...

Заголовок: #include <QVideoFilterRunnable>
qmake: QT += multimedia
С момента: Qt 5.5

Этот класс был представлен в Qt 5.5.

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

Типы публичного доступа

Перечисление RunFlag { LastInChain }
флаги RunFlags

Публичные функции

виртуальный QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, QVideoFilterRunnable::RunFlags flags) = 0

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

Видеофильтры разделены на QAbstractVideoFilter и соответствующие QVideoFilterRunnable, аналогично QQuickItem и QSGNode. Это необходимо для поддержки сценариев рендеринга в отдельных потоках. При использовании потоковой петли рендеринга графического ядра Qt Quick весь рендеринг происходит в отдельном потоке. Экземпляры QVideoFilterRunnable всегда живут в этом потоке, и все его функции, run(), конструктор и деструктор, гарантированно вызываются в этом потоке с привязанным контекстом OpenGL. Экземпляры QAbstractVideoFilter живут в главном (GUI) потоке, как и любые другие QObject и QQuickItem экземпляры, созданные из QML.

После создания экземпляры QVideoFilterRunnable управляются Qt Multimedia и будут автоматически уничтожаться и пересоздаваться при необходимости, например, когда графическое ядро аннулировано или QQuickWindow изменяется или закрывается. Создание происходит через фабричную функцию QAbstractVideoFilter::createFilterRunnable().

См. также QAbstractVideoFilter.

Документация по типу члена

Перечисление QVideoFilterRunnable::RunFlagФлаги QVideoFilterRunnable::RunFlags

Постоянная Значение Описание
QVideoFilterRunnable::LastInChain 0x01 Указывает, что связанный с фильтром QAbstractVideoFilter выполняется последним в списке фильтров соответствующего типа VideoOutput, что означает, что возвращаемый кадр будет представлен графическому ядру без вызова дополнительных фильтров.

Тип RunFlags является типом-псевдонимом для QFlags<RunFlag>. Он хранит логическое ИЛИ сочетание значений RunFlag.

Документация по документации функций члена

[pure virtual] QVideoFrame QVideoFilterRunnable::run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, QVideoFilterRunnable::RunFlags flags)

Переопределите эту функцию, чтобы выполнить фильтрацию или вычисления над входным видеокадром input. Как и конструктор и деструктор, эта функция всегда вызывается в потоке рендеринга с привязанным контекстом OpenGL.

Реализации, которые не изменяют видеокадр, могут просто вернуть input.

Безопасно обращаться к свойствам связанного экземпляра QAbstractVideoFilter из этой функции.

input не будет отображен, эта функция должна вызвать QVideoFrame::map() и QVideoFrame::unmap() по необходимости.

surfaceFormat предоставляет дополнительную информацию, например, может быть использована для определения направления вверх на входном изображении, так как это важно для работы фильтров на различных платформах с различными камерами.

flags содержит дополнительную информацию о вызове фильтра. Например, флаг LastInChain указывает, что фильтр является последним в списке фильтров VideoOutput. Это может быть очень полезно в случаях, когда несколько фильтров объединены в цепочку, и работа выполняется с данными изображения в каком-то пользовательском формате (например, формате, специфичном для некоторой системы компьютерного зрения). Чтобы избежать преобразования в каждом фильтре в цепочке, все промежуточные фильтры могут вернуть QVideoFrame с данными в пользовательском формате. Только последний, где установлен флаг, возвращает QVideoFrame в формате, совместимом с Qt.

Фильтры, которые хотят предоставить результаты своих вычислений коду Javascript в QML, могут объявить свои собственные пользовательские сигналы в подклассе QAbstractVideoFilter, чтобы указать завершение операции. Для фильтров, которые только вычисляют некоторые результаты и не изменяют видеокадр, также возможно асинхронное выполнение. Они могут добавить необходимые операции в очередь, используя API для вычислений, и вернуть из этой функции без отправки каких-либо сигналов. Сигнал, указывающий на завершение, затем отправляется только тогда, когда API для вычислений указывает, что операции выполнены, и результаты доступны. Рекомендуется представлять выходные данные фильтра в виде отдельного экземпляра QJSValue или класса, производного от QObject, который передается в качестве параметра сигналу и становится доступным для движка Javascript. В случае QObject владение этим объектом контролируется стандартными правилами QML: если у него нет родителя, владение передается движку Javascript, в противном случае оно остается у отправителя. Обратите внимание, что подключение сигналов может быть помещено в очередь, например, при использовании потоковой петли рендеринга Qt Quick, и поэтому объект должен оставаться допустимым в течение более длительного времени; уничтожение его сразу после вызова этой функции небезопасно. Использование отдельного объекта результатов гарантированно безопасно даже при использовании многопоточного рендеринга. Это не обязательно верно для свойств самого экземпляра QAbstractVideoFilter: свойства могут безопасно читаться в run(), так как поток GUI заблокирован в это время, но запись может стать проблематичной.

Примечание: Избегайте длительных операций в этой функции, так как они блокируют весь рендеринг приложения.

Примечание: Обработка input полностью зависит от платформы и бэкенда декодирования видео. На некоторых платформах используются различные формы ввода, в зависимости от графического стека. Например, при воспроизведении видео на Windows с бэкендом WMF, QVideoFrame содержит текстуры Direct3D, обернутые OpenGL в случае использования ANGLE, но обычные пиксельные данные при использовании настольного OpenGL (opengl32.dll). Аналогично, формат видеофайла часто определяет, являются ли данные RGB или YUV, но это также может зависеть от декодера и используемой конфигурации. Возвращаемый видеокадр не обязан быть в том же формате, что и входной, например, фильтр с входным QVideoFrame, поддерживаемым системной памятью, может выводить QVideoFrame с дескриптором текстуры OpenGL.

См. также QVideoFrame и QVideoSurfaceFormat.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qvideofilterrunnable.html

Spec-Zone.ru

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