Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
VirtualPTZ.h
1#pragma once
2
3#include "Module.h"
4#include "declarative/PropertyMacros.h"
5
7{
8public:
10 {
11 roiHeight = roiWidth = 1;
12 roiX = roiY = 0;
13 }
14 VirtualPTZProps(float _roiWidth, float _roiHeight, float _roiX, float _roiY) : roiWidth(_roiWidth), roiHeight(_roiHeight), roiX(_roiX), roiY(_roiY)
15 {
16 }
17
18 float roiX;
19 float roiY;
20 float roiWidth;
21 float roiHeight;
22
24 {
25 return ModuleProps::getSerializeSize() + sizeof(float) * 4;
26 }
27
28 // ============================================================
29 // Property Binding for Declarative Pipeline
30 // ============================================================
31 template<typename PropsT>
32 static void applyProperties(
33 PropsT& props,
34 const std::map<std::string, apra::ScalarPropertyValue>& values,
35 std::vector<std::string>& missingRequired
36 ) {
37 apra::applyProp(props.roiX, "roiX", values, false, missingRequired);
38 apra::applyProp(props.roiY, "roiY", values, false, missingRequired);
39 apra::applyProp(props.roiWidth, "roiWidth", values, false, missingRequired);
40 apra::applyProp(props.roiHeight, "roiHeight", values, false, missingRequired);
41 }
42
43 apra::ScalarPropertyValue getProperty(const std::string& propName) const {
44 if (propName == "roiX") return static_cast<double>(roiX);
45 if (propName == "roiY") return static_cast<double>(roiY);
46 if (propName == "roiWidth") return static_cast<double>(roiWidth);
47 if (propName == "roiHeight") return static_cast<double>(roiHeight);
48 throw std::runtime_error("Unknown property: " + propName);
49 }
50
51 bool setProperty(const std::string& propName, const apra::ScalarPropertyValue& value) {
52 if (propName == "roiX") { roiX = static_cast<float>(std::get<double>(value)); return true; }
53 if (propName == "roiY") { roiY = static_cast<float>(std::get<double>(value)); return true; }
54 if (propName == "roiWidth") { roiWidth = static_cast<float>(std::get<double>(value)); return true; }
55 if (propName == "roiHeight") { roiHeight = static_cast<float>(std::get<double>(value)); return true; }
56 throw std::runtime_error("Unknown property: " + propName);
57 }
58
59 static std::vector<std::string> dynamicPropertyNames() {
60 return {"roiX", "roiY", "roiWidth", "roiHeight"};
61 }
62
63private:
65
66 template <class Archive>
67 void serialize(Archive &ar, const unsigned int version)
68 {
69 ar &boost::serialization::base_object<ModuleProps>(*this);
71 }
72};
73
74class VirtualPTZ : public Module
75{
76
77public:
79 virtual ~VirtualPTZ();
80 bool init();
81 bool term();
82 void setProps(VirtualPTZProps &props);
84
85protected:
86 bool process(frame_container &frames);
87 bool processSOS(frame_sp &frame);
88 bool validateInputPins();
89 bool validateOutputPins();
90 void addInputPin(framemetadata_sp &metadata, string &pinId);
91 bool handlePropsChange(frame_sp &frame);
92
93private:
94 void setMetadata(framemetadata_sp &metadata);
95 class Detail;
96 boost::shared_ptr<Detail> mDetail;
97};
Definition Module.h:33
virtual size_t getSerializeSize()
Definition Module.h:101
Definition Module.h:151
Definition VirtualPTZ.h:7
bool setProperty(const std::string &propName, const apra::ScalarPropertyValue &value)
Definition VirtualPTZ.h:51
float roiY
Definition VirtualPTZ.h:19
float roiWidth
Definition VirtualPTZ.h:20
size_t getSerializeSize()
Definition VirtualPTZ.h:23
apra::ScalarPropertyValue getProperty(const std::string &propName) const
Definition VirtualPTZ.h:43
VirtualPTZProps(float _roiWidth, float _roiHeight, float _roiX, float _roiY)
Definition VirtualPTZ.h:14
void serialize(Archive &ar, const unsigned int version)
Definition VirtualPTZ.h:67
static std::vector< std::string > dynamicPropertyNames()
Definition VirtualPTZ.h:59
float roiHeight
Definition VirtualPTZ.h:21
static void applyProperties(PropsT &props, const std::map< std::string, apra::ScalarPropertyValue > &values, std::vector< std::string > &missingRequired)
Definition VirtualPTZ.h:32
float roiX
Definition VirtualPTZ.h:18
friend class boost::serialization::access
Definition VirtualPTZ.h:64
VirtualPTZProps()
Definition VirtualPTZ.h:9
Definition VirtualPTZ.cpp:12
Definition VirtualPTZ.h:75
boost::shared_ptr< Detail > mDetail
Definition VirtualPTZ.h:96
VirtualPTZ(VirtualPTZProps _props)
Definition VirtualPTZ.cpp:60
void addInputPin(framemetadata_sp &metadata, string &pinId)
Definition VirtualPTZ.cpp:105
bool validateOutputPins()
Definition VirtualPTZ.cpp:86
bool handlePropsChange(frame_sp &frame)
Definition VirtualPTZ.cpp:187
void setMetadata(framemetadata_sp &metadata)
Definition VirtualPTZ.cpp:138
VirtualPTZProps getProps()
Definition VirtualPTZ.cpp:181
bool process(frame_container &frames)
Definition VirtualPTZ.cpp:123
virtual ~VirtualPTZ()
Definition VirtualPTZ.cpp:65
bool term()
Definition VirtualPTZ.cpp:118
void setProps(VirtualPTZProps &props)
Definition VirtualPTZ.cpp:168
bool init()
Definition VirtualPTZ.cpp:113
bool processSOS(frame_sp &frame)
Definition VirtualPTZ.cpp:195
bool validateInputPins()
Definition VirtualPTZ.cpp:67
void applyProp(T &member, const char *propName, const std::map< std::string, ScalarPropertyValue > &values, bool isRequired, std::vector< std::string > &missingRequired)
Definition PropertyMacros.h:36
std::variant< int64_t, double, bool, std::string > ScalarPropertyValue
Definition ModuleRegistry.h:30