Spec-Zone.ru › Qt 5.6

Класс QVideoFilterRunnable

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

Заголовок: #include <QVideoFilterRunnable>
qmake: QT += multimedia
С момента: Qt 5.5
  • Список всех членов, включая унаследованные

Открытые типы

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

Открытые функции

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

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

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

Видеофильтры разделены на экземпляры 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 экземпляр QVideoFilterRunnable является последним в списке фильтров соответствующего типа VideoOutput, что означает, что возвращаемый кадр является тем, который будет представлен графу сцен без вызова дополнительных фильтров.

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

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

[pure virtual] QVideoFrame QVideoFilterRunnable::run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, 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/archives/qt-5.6/qvideofilterrunnable.html

Spec-Zone.ru

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