Класс QAbstractVideoFilter
Класс QAbstractVideoFilter представляет собой фильтр, который применяется к кадрам видео, получаемым типом VideoOutput. Подробнее...
| Заголовок: | #include <QAbstractVideoFilter> |
| qmake: | QT += multimedia |
| С момента: | Qt 5.5 |
| Наследуется от: | QObject |
Свойства
- active : bool
- 1 свойство унаследовано от QObject
Открытые функции
| QAbstractVideoFilter(QObject *parent = Q_NULLPTR) | |
| virtual QVideoFilterRunnable * | createFilterRunnable() = 0 |
| bool | isActive() const |
| void | setActive(bool v) |
- 31 открытая функция унаследована от QObject
Сигналы
| void | activeChanged() |
- 2 сигнала унаследованы от QObject
Дополнительные унаследованные члены
- 1 открытый слот унаследован от QObject
- 11 статические открытые члены унаследованы от QObject
- 9 защищённые функции унаследованы от QObject
Подробное описание
Класс QAbstractVideoFilter представляет собой фильтр, который применяется к кадрам видео, получаемым типом VideoOutput.
QAbstractVideoFilter предоставляет удобный способ для приложений запускать обработку изображений, алгоритмы компьютерного зрения или любые общие преобразования или вычисления на выходе типа VideoOutput, независимо от источника (видео или камера). Предоставляя простой интерфейс, он позволяет приложениям и сторонним разработчикам легко разрабатывать типы QML, предоставляющие алгоритмы обработки изображений с использованием популярных фреймворков, таких как OpenCV. Благодаря тесной интеграции с последними этапами конвейера видео Qt Multimedia, возможны также ускоренные и, возможно, бескропочные решения: например, плагин, предоставляющий алгоритмы на основе OpenCL, может использовать OpenGL-совместимость OpenCL для использования текстур 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 = Q_NULLPTR)
Создаёт новый экземпляр QAbstractVideoFilter с родительским объектом parent.
[pure virtual] QVideoFilterRunnable *QAbstractVideoFilter::createFilterRunnable()
Функция-фабрика для создания нового экземпляра подкласса QVideoFilterRunnable, соответствующего этому фильтру.
Эта функция вызывается в потоке, в котором графический фреймворк Qt Quick выполняет рендеринг, с привязанным контекстом OpenGL. Владение возвращённым экземпляром передаётся: возвращённый экземпляр будет жить в потоке рендеринга и будет уничтожен автоматически при необходимости.
Обычно реализации функции просто создают новый экземпляр QVideoFilterRunnable, передавая this в конструктор, поскольку исполняемым экземплярам фильтров необходимо знать их связанный экземпляр QAbstractVideoFilter для доступа к динамическим свойствам и, при необходимости, для излучения сигналов.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qabstractvideofilter.html