Spec-Zone.ru › Qt 5.15

Класс QAbstractVideoFilter

Класс QAbstractVideoFilter представляет фильтр, применяемый к кадрам видео, полученным типом VideoOutput. Подробнее...

Заголовок: #include <QAbstractVideoFilter>
qmake: QT += multimedia
С момента: Qt 5.5
Наследует: QObject

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

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

Свойства

  • active : bool

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

QAbstractVideoFilter(QObject *parent = nullptr)
virtual QVideoFilterRunnable * createFilterRunnable() = 0
bool isActive() const
void setActive(bool v)

Сигналы

void activeChanged()

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

QAbstractVideoFilter предоставляет удобный способ для приложений запускать обработку изображений, алгоритмы компьютерного зрения или любые общие преобразования или вычисления на выходе типа VideoOutput, независимо от источника (видео или камера). Предоставляя простой интерфейс, он позволяет приложениям и сторонним разработчикам легко разрабатывать типы QML, которые предоставляют алгоритмы обработки изображений, используя популярные фреймворки, такие как OpenCV. Благодаря тесной интеграции с последними этапами конвейера видео Qt Multimedia, возможны также ускоренные и, возможно, решения без копирования: например, плагин, предоставляющий алгоритмы на основе OpenCL, может использовать межплатформенность OpenCL с OpenGL для использования текстур OpenGL, созданных ускоренным аппаратным декодером видео, без дополнительных считываний и копирования.

Примечание: QAbstractVideoFilter не всегда является лучшим выбором. Для применения эффектов или преобразований с помощью шейдеров OpenGL к изображению, отображаемому на экране, следует использовать стандартный подход Qt Quick с использованием элементов ShaderEffect в сочетании с VideoOutput. VideoFilter не является заменой этому. Он скорее ориентирован на выполнение вычислений (которые не обязательно изменяют отображаемое на экране изображение) и алгоритмов компьютерного зрения, предоставляемых сторонними фреймворками.

QAbstractVideoFilter предназначен для наследования. Затем подклассы регистрируются в движке QML, поэтому они могут использоваться как тип QML. Список фильтров назначается типу VideoOutput через его свойство filters.

Один фильтр представляет одно преобразование или шаг обработки видеокадра. Выходом является изменённый видеокадр, произвольные данные или и то, и другое. Например, преобразования изображения приведут к другому изображению, в то время как алгоритм обнаружения объектов на изображении, вероятно, предоставит список прямоугольников.

Произвольные данные могут быть представлены в виде свойств подкласса QAbstractVideoFilter и в экземплярах QObject или QJSValue, передаваемых в его сигналы. Что именно представляют собой эти свойства и сигналы, зависит от отдельных видеофильтров. Завершение операций может быть указано сигналами. Вычисления, которые не приводят к изменению изображения, передают входное изображение, чтобы последующие фильтры могли быть помещены после них.

Свойства, установленные в QAbstractVideoFilter, служат входом для вычисления, аналогично тому, как задаются унифицированные значения в типах ShaderEffect. Изменённые значения свойств используются при обработке следующего кадра видео.

Типичное использование заключается в наследовании от QAbstractVideoFilter и QVideoFilterRunnable:

class MyFilterRunnable : public QVideoFilterRunnable {
public:
    QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags) { ... }
};

class MyFilter : public QAbstractVideoFilter {
public:
    QVideoFilterRunnable *createFilterRunnable() { return new MyFilterRunnable; }
signals:
    void finished(QObject *result);
};

int main(int argc, char **argv) {
    ...
    qmlRegisterType<MyFilter>("my.uri", 1, 0, "MyFilter");
    ...
}

Таким образом, MyFilter доступен из QML:

import my.uri 1.0

Camera {
    id: camera
}
MyFilter {
    id: filter
    // set properties, they can also be animated
    onFinished: console.log("results of the computation: " + result)
}
VideoOutput {
    source: camera
    filters: [ filter ]
    anchors.fill: parent
}

Это также позволяет предоставлять фильтры в плагинах QML отдельно от приложения.

См. также VideoOutput, Camera, MediaPlayer и QVideoFilterRunnable.

Документация по свойствам

active : bool

Это свойство содержит статус активности фильтра.

Это true, если фильтр активен, и false в противном случае.

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

Функции доступа:

bool isActive() const
void setActive(bool v)

Сигнал уведомления:

void activeChanged()

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

QAbstractVideoFilter::QAbstractVideoFilter(QObject *parent = nullptr)

Создаёт новый экземпляр QAbstractVideoFilter с родительским объектом parent.

[pure virtual] QVideoFilterRunnable *QAbstractVideoFilter::createFilterRunnable()

Функция-фабрика для создания нового экземпляра подкласса QVideoFilterRunnable, соответствующего этому фильтру.

Эта функция вызывается в потоке, в котором графический движок Qt Quick выполняет рендеринг, с привязанным контекстом OpenGL. Владение возвращённым экземпляром передаётся: возвращённый экземпляр будет существовать в потоке рендеринга и будет автоматически уничтожен при необходимости.

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

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

Spec-Zone.ru

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