Класс 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
Это свойство содержит статус активности фильтра.
Истинно, если фильтр активен, ложно в противном случае.
По умолчанию фильтры активны. Если значение установлено в 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/qt-5.14/qabstractvideofilter.html