Класс QAbstractVideoFilter
Класс QAbstractVideoFilter представляет собой фильтр, который применяется к кадрам видео, получаемым типом VideoOutput. Подробнее...
| Заголовок: | #include <QAbstractVideoFilter> |
| qmake: | QT += multimedia |
| С: | Qt 5.5 |
| Наследует: | QObject |
Свойства
- active : bool
- 1 свойство унаследовано от QObject
Открытые функции
| QAbstractVideoFilter(QObject *parent = nullptr) | |
| virtual QVideoFilterRunnable * | createFilterRunnable() = 0 |
| bool | isActive() const |
| void | setActive(bool v) |
- 34 открытых функции унаследованы от QObject
Сигналы
| void | activeChanged() |
- 2 сигнала унаследованы от QObject
Дополнительные унаследованные члены
- 1 открытый слот унаследован от QObject
- 1 открытая переменная унаследована от QObject
- 10 статические открытые члены унаследованы от QObject
- 9 защищенные функции унаследованы от QObject
- 2 защищенные переменные унаследованы от 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, служат входом в вычисления, аналогично тому, как задаются значения uniform в типах 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 = 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.11/qabstractvideofilter.html