11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
25PROMEKI_NAMESPACE_BEGIN
52class MediaPipelineTrigger {
55 using UPtr = ::promeki::UniquePtr<MediaPipelineTrigger>;
57 virtual ~MediaPipelineTrigger() =
default;
67 virtual bool match(
const Frame &frame) = 0;
78class MediaPipelineFunctionTrigger :
public MediaPipelineTrigger {
80 using Predicate = Function<bool(
const Frame &)>;
86 explicit MediaPipelineFunctionTrigger(Predicate fn) : _fn(std::move(fn)) {}
88 bool match(
const Frame &frame)
override {
89 return _fn ? _fn(frame) : false;
104class MediaPipelineQueryTrigger :
public MediaPipelineTrigger {
120 static Result<MediaPipelineTrigger::UPtr> parse(
const String &expr);
129 explicit MediaPipelineQueryTrigger(VariantQuery<Frame> query) : _query(std::move(query)) {}
131 bool match(
const Frame &frame)
override {
132 return _query.isValid() && _query.match(frame);
136 const String &source()
const {
return _query.source(); }
139 VariantQuery<Frame> _query;