Класс 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) |
- 32 открытые функции унаследованы от QObject
Сигналы
| void | activeChanged() |
- 2 сигнала унаследованы от QObject
Дополнительные унаследованные члены
- 1 открытый слот унаследован от QObject
- 11 статические открытые члены унаследованы от QObject
- 9 защищённые функции унаследованы от QObject
Подробное описание
Класс QAbstractVideoFilter представляет собой фильтр, применяемый к кадрам видео, получаемым типом VideoOutput.
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
Это свойство содержит активный статус фильтра.
Истинно, если фильтр активен, ложно в противном случае.
По умолчанию фильтры активны. При установке в 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/qt-5.9/qabstractvideofilter.html