Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
TestSignalGeneratorSrc.h
1#pragma once
2#include "Module.h"
3#include <map>
4#include <vector>
5#include "declarative/PropertyMacros.h"
6
7// Pattern types for test signal generation
8enum class TestPatternType {
9 GRADIENT = 0, // Horizontal gradient bands (default)
10 CHECKERBOARD = 1, // Black/white checkerboard
11 COLOR_BARS = 2, // Vertical color bars
12 GRID = 3 // Numbered grid cells
13};
14
16{
17public:
19 TestSignalGeneratorProps(int _width, int _height, TestPatternType _pattern = TestPatternType::GRADIENT, int _maxFrames = 0)
20 : width(_width), height(_height), pattern(_pattern), maxFrames(_maxFrames) {}
21
23
24 int width = 0;
25 int height = 0;
26 TestPatternType pattern = TestPatternType::GRADIENT;
27 int maxFrames = 0; // 0 = unlimited, >0 = stop after N frames
28
29 // ============================================================
30 // Property Binding for Declarative Pipeline
31 // ============================================================
32 template<typename PropsT>
33 static void applyProperties(
34 PropsT& props,
35 const std::map<std::string, apra::ScalarPropertyValue>& values,
36 std::vector<std::string>& missingRequired
37 ) {
38 apra::applyProp(props.width, "width", values, true, missingRequired);
39 apra::applyProp(props.height, "height", values, true, missingRequired);
40 apra::applyProp(props.maxFrames, "maxFrames", values, false, missingRequired);
41
42 // Handle pattern property (optional, default GRADIENT)
43 auto patternIt = values.find("pattern");
44 if (patternIt != values.end()) {
45 if (std::holds_alternative<std::string>(patternIt->second)) {
46 std::string patternStr = std::get<std::string>(patternIt->second);
47 if (patternStr == "GRADIENT") props.pattern = TestPatternType::GRADIENT;
48 else if (patternStr == "CHECKERBOARD") props.pattern = TestPatternType::CHECKERBOARD;
49 else if (patternStr == "COLOR_BARS") props.pattern = TestPatternType::COLOR_BARS;
50 else if (patternStr == "GRID") props.pattern = TestPatternType::GRID;
51 } else if (std::holds_alternative<int64_t>(patternIt->second)) {
52 props.pattern = static_cast<TestPatternType>(std::get<int64_t>(patternIt->second));
53 }
54 }
55 }
56
57 apra::ScalarPropertyValue getProperty(const std::string& propName) const {
58 if (propName == "width") return static_cast<int64_t>(width);
59 if (propName == "height") return static_cast<int64_t>(height);
60 if (propName == "maxFrames") return static_cast<int64_t>(maxFrames);
61 if (propName == "pattern") {
62 switch (pattern) {
63 case TestPatternType::GRADIENT: return std::string("GRADIENT");
64 case TestPatternType::CHECKERBOARD: return std::string("CHECKERBOARD");
65 case TestPatternType::COLOR_BARS: return std::string("COLOR_BARS");
66 case TestPatternType::GRID: return std::string("GRID");
67 }
68 }
69 throw std::runtime_error("Unknown property: " + propName);
70 }
71
72 bool setProperty(const std::string& propName, const apra::ScalarPropertyValue& value) {
73 throw std::runtime_error("Cannot modify static property '" + propName + "' after initialization");
74 }
75
76 static std::vector<std::string> dynamicPropertyNames() {
77 return {};
78 }
79
80private:
82
83 template <class Archive>
84 void serialize(Archive &ar, const unsigned int version)
85 {
86 ar &boost::serialization::base_object<ModuleProps>(*this);
87 ar &width;
88 ar &height;
89 ar &pattern;
90 ar &maxFrames;
91 }
92};
93
95{
96public:
99
100 bool init();
101 bool term();
104
105protected:
106 bool produce();
107 bool validateOutputPins();
108 void setMetadata(framemetadata_sp &metadata);
109 bool handlePropsChange(frame_sp &frame);
110
111
112private:
113 class Detail;
114 boost::shared_ptr<Detail> mDetail;
116 framemetadata_sp mOutputMetadata;
117 std::string mOutputPinId;
118};
Definition Module.h:33
Definition Module.h:151
Definition TestSignalGeneratorSrc.h:16
int maxFrames
Definition TestSignalGeneratorSrc.h:27
int width
Definition TestSignalGeneratorSrc.h:24
~TestSignalGeneratorProps()
Definition TestSignalGeneratorSrc.h:22
static std::vector< std::string > dynamicPropertyNames()
Definition TestSignalGeneratorSrc.h:76
apra::ScalarPropertyValue getProperty(const std::string &propName) const
Definition TestSignalGeneratorSrc.h:57
void serialize(Archive &ar, const unsigned int version)
Definition TestSignalGeneratorSrc.h:84
int height
Definition TestSignalGeneratorSrc.h:25
bool setProperty(const std::string &propName, const apra::ScalarPropertyValue &value)
Definition TestSignalGeneratorSrc.h:72
TestPatternType pattern
Definition TestSignalGeneratorSrc.h:26
friend class boost::serialization::access
Definition TestSignalGeneratorSrc.h:81
static void applyProperties(PropsT &props, const std::map< std::string, apra::ScalarPropertyValue > &values, std::vector< std::string > &missingRequired)
Definition TestSignalGeneratorSrc.h:33
TestSignalGeneratorProps(int _width, int _height, TestPatternType _pattern=TestPatternType::GRADIENT, int _maxFrames=0)
Definition TestSignalGeneratorSrc.h:19
TestSignalGeneratorProps()
Definition TestSignalGeneratorSrc.h:18
Definition TestSignalGeneratorSrc.cpp:7
Definition TestSignalGeneratorSrc.h:95
bool produce()
Definition TestSignalGeneratorSrc.cpp:238
boost::shared_ptr< Detail > mDetail
Definition TestSignalGeneratorSrc.h:114
void setProps(TestSignalGeneratorProps &props)
Definition TestSignalGeneratorSrc.cpp:278
std::string mOutputPinId
Definition TestSignalGeneratorSrc.h:117
void setMetadata(framemetadata_sp &metadata)
Definition TestSignalGeneratorSrc.cpp:261
~TestSignalGenerator()
Definition TestSignalGeneratorSrc.cpp:204
bool validateOutputPins()
Definition TestSignalGeneratorSrc.cpp:209
TestSignalGenerator(TestSignalGeneratorProps _props)
Definition TestSignalGeneratorSrc.cpp:196
framemetadata_sp mOutputMetadata
Definition TestSignalGeneratorSrc.h:116
size_t outputFrameSize
Definition TestSignalGeneratorSrc.h:115
bool init()
Definition TestSignalGeneratorSrc.cpp:227
TestSignalGeneratorProps getProps()
Definition TestSignalGeneratorSrc.cpp:283
bool term()
Definition TestSignalGeneratorSrc.cpp:256
bool handlePropsChange(frame_sp &frame)
Definition TestSignalGeneratorSrc.cpp:269
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