libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
mediapipelinetrigger.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <functional>
14#include <memory>
15
16#include <promeki/function.h>
17#include <promeki/error.h>
18#include <promeki/frame.h>
19#include <promeki/namespace.h>
20#include <promeki/result.h>
21#include <promeki/string.h>
22#include <promeki/uniqueptr.h>
24
25PROMEKI_NAMESPACE_BEGIN
26
52class MediaPipelineTrigger {
53 public:
55 using UPtr = ::promeki::UniquePtr<MediaPipelineTrigger>;
56
57 virtual ~MediaPipelineTrigger() = default;
58
67 virtual bool match(const Frame &frame) = 0;
68};
69
78class MediaPipelineFunctionTrigger : public MediaPipelineTrigger {
79 public:
80 using Predicate = Function<bool(const Frame &)>;
81
86 explicit MediaPipelineFunctionTrigger(Predicate fn) : _fn(std::move(fn)) {}
87
88 bool match(const Frame &frame) override {
89 return _fn ? _fn(frame) : false;
90 }
91
92 private:
93 Predicate _fn;
94};
95
104class MediaPipelineQueryTrigger : public MediaPipelineTrigger {
105 public:
120 static Result<MediaPipelineTrigger::UPtr> parse(const String &expr);
121
129 explicit MediaPipelineQueryTrigger(VariantQuery<Frame> query) : _query(std::move(query)) {}
130
131 bool match(const Frame &frame) override {
132 return _query.isValid() && _query.match(frame);
133 }
134
136 const String &source() const { return _query.source(); }
137
138 private:
139 VariantQuery<Frame> _query;
140};
141
142PROMEKI_NAMESPACE_END
143
144#endif // PROMEKI_ENABLE_PROAV