Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
ColorConversionXForm.h
1#pragma once
2#include "FrameMetadata.h"
3#include "Module.h"
4#include "declarative/PropertyMacros.h"
5
8{
9public:
25 {
26 type = _type;
27 }
31
32 // ============================================================
33 // Property Binding for Declarative Pipeline
34 // ============================================================
35 template<typename PropsT>
36 static void applyProperties(
37 PropsT& props,
38 const std::map<std::string, apra::ScalarPropertyValue>& values,
39 std::vector<std::string>& missingRequired
40 ) {
41 // Map string to enum
42 auto it = values.find("conversionType");
43 if (it != values.end()) {
44 if (auto* strVal = std::get_if<std::string>(&it->second)) {
45 static const std::map<std::string, ConversionType> enumMap = {
46 {"RGB_TO_MONO", RGB_TO_MONO},
47 {"BGR_TO_MONO", BGR_TO_MONO},
48 {"BGR_TO_RGB", BGR_TO_RGB},
49 {"RGB_TO_BGR", RGB_TO_BGR},
50 {"RGB_TO_YUV420PLANAR", RGB_TO_YUV420PLANAR},
51 {"YUV420PLANAR_TO_RGB", YUV420PLANAR_TO_RGB},
52 {"BAYERBG8_TO_MONO", BAYERBG8_TO_MONO},
53 {"BAYERBG8_TO_RGB", BAYERBG8_TO_RGB},
54 {"BAYERGB8_TO_RGB", BAYERGB8_TO_RGB},
55 {"BAYERRG8_TO_RGB", BAYERRG8_TO_RGB},
56 {"BAYERGR8_TO_RGB", BAYERGR8_TO_RGB}
57 };
58 auto enumIt = enumMap.find(*strVal);
59 if (enumIt != enumMap.end()) {
60 props.type = enumIt->second;
61 }
62 }
63 } else {
64 missingRequired.push_back("conversionType");
65 }
66 }
67
68 apra::ScalarPropertyValue getProperty(const std::string& propName) const {
69 if (propName == "conversionType") {
70 static const char* enumNames[] = {
71 "RGB_TO_MONO", "BGR_TO_MONO", "BGR_TO_RGB", "RGB_TO_BGR",
72 "RGB_TO_YUV420PLANAR", "YUV420PLANAR_TO_RGB",
73 "BAYERBG8_TO_MONO", "BAYERBG8_TO_RGB", "BAYERGB8_TO_RGB",
74 "BAYERRG8_TO_RGB", "BAYERGR8_TO_RGB"
75 };
76 return std::string(enumNames[type]);
77 }
78 throw std::runtime_error("Unknown property: " + propName);
79 }
80
81 bool setProperty(const std::string& propName, const apra::ScalarPropertyValue& value) {
82 throw std::runtime_error("Cannot modify static property '" + propName + "' after initialization");
83 }
84
85 static std::vector<std::string> dynamicPropertyNames() {
86 return {};
87 }
88};
89
90class ColorConversion : public Module
91{
92
93public:
95 virtual ~ColorConversion();
96 bool init();
97 bool term();
98
99protected:
100 bool process(frame_container& frames);
101 bool processSOS(frame_sp& frame);
102 bool shouldTriggerSOS();
103 bool validateInputPins();
104 bool validateOutputPins();
105 void setConversionStrategy(framemetadata_sp inputMetadata, framemetadata_sp outputMetadata);
106 void addInputPin(framemetadata_sp& metadata, string& pinId);
107 std::string addOutputPin(framemetadata_sp& metadata);
108
109private:
111 boost::shared_ptr<DetailAbstract> mDetail;
112 std::string mOutputPinId;
113 framemetadata_sp mOutputMetadata;
114 framemetadata_sp mInputMetadata;
115 bool mShouldTriggerSos = true;
116 bool setMetadata(framemetadata_sp& metadata);
117};
118
Definition ColorConversionXForm.h:8
apra::ScalarPropertyValue getProperty(const std::string &propName) const
Definition ColorConversionXForm.h:68
ConversionType type
Definition ColorConversionXForm.h:30
ConversionType
Definition ColorConversionXForm.h:11
@ RGB_TO_YUV420PLANAR
Definition ColorConversionXForm.h:16
@ BGR_TO_RGB
Definition ColorConversionXForm.h:14
@ BAYERBG8_TO_RGB
Definition ColorConversionXForm.h:19
@ YUV420PLANAR_TO_RGB
Definition ColorConversionXForm.h:17
@ BAYERRG8_TO_RGB
Definition ColorConversionXForm.h:21
@ RGB_TO_MONO
Definition ColorConversionXForm.h:12
@ BAYERGB8_TO_RGB
Definition ColorConversionXForm.h:20
@ BAYERBG8_TO_MONO
Definition ColorConversionXForm.h:18
@ RGB_TO_BGR
Definition ColorConversionXForm.h:15
@ BGR_TO_MONO
Definition ColorConversionXForm.h:13
@ BAYERGR8_TO_RGB
Definition ColorConversionXForm.h:22
bool setProperty(const std::string &propName, const apra::ScalarPropertyValue &value)
Definition ColorConversionXForm.h:81
ColorConversionProps(ConversionType _type)
Definition ColorConversionXForm.h:24
static void applyProperties(PropsT &props, const std::map< std::string, apra::ScalarPropertyValue > &values, std::vector< std::string > &missingRequired)
Definition ColorConversionXForm.h:36
static std::vector< std::string > dynamicPropertyNames()
Definition ColorConversionXForm.h:85
ColorConversionProps()
Definition ColorConversionXForm.h:28
Definition ColorConversionXForm.h:91
bool validateInputPins()
Definition ColorConversionXForm.cpp:16
std::string addOutputPin(framemetadata_sp &metadata)
Definition ColorConversionXForm.cpp:73
bool process(frame_container &frames)
Definition ColorConversionXForm.cpp:89
void addInputPin(framemetadata_sp &metadata, string &pinId)
Definition ColorConversionXForm.cpp:56
boost::shared_ptr< DetailAbstract > mDetail
Definition ColorConversionXForm.h:111
std::string mOutputPinId
Definition ColorConversionXForm.h:112
ColorConversion(ColorConversionProps _props)
Definition ColorConversionXForm.cpp:7
virtual ~ColorConversion()
Definition ColorConversionXForm.cpp:12
bool init()
Definition ColorConversionXForm.cpp:78
bool processSOS(frame_sp &frame)
Definition ColorConversionXForm.cpp:156
bool shouldTriggerSOS()
Definition ColorConversionXForm.cpp:166
bool validateOutputPins()
Definition ColorConversionXForm.cpp:33
bool setMetadata(framemetadata_sp &metadata)
Definition ColorConversionXForm.cpp:98
framemetadata_sp mInputMetadata
Definition ColorConversionXForm.h:114
void setConversionStrategy(framemetadata_sp inputMetadata, framemetadata_sp outputMetadata)
Definition ColorConversionXForm.cpp:51
bool mShouldTriggerSos
Definition ColorConversionXForm.h:115
bool term()
Definition ColorConversionXForm.cpp:84
ColorConversionProps mProps
Definition ColorConversionXForm.h:110
framemetadata_sp mOutputMetadata
Definition ColorConversionXForm.h:113
Definition ColorConversionStrategy.h:4
Definition Module.h:33
Definition Module.h:151
std::variant< int64_t, double, bool, std::string > ScalarPropertyValue
Definition ModuleRegistry.h:30