MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ transform_implementation()

template<ComputeData InputType = std::vector<Kakshya::DataVariant>, ComputeData OutputType = InputType>
output_type MayaFlux::Yantra::MathematicalTransformer< InputType, OutputType >::transform_implementation ( input_type input)
inlineoverrideprotectedvirtual

Core transformation implementation.

Parameters
inputInput data to transform
Returns
Transformed output data

Performs the mathematical operation specified by m_operation on the input data. Supports both in-place and out-of-place transformations based on transformer settings.

Implements MayaFlux::Yantra::UniversalTransformer< InputType, OutputType >.

Definition at line 78 of file MathematicalTransformer.hpp.

79 {
80 switch (m_operation) {
82 auto gain_factor = get_parameter_or<double>("gain_factor", 1.0);
83 if (this->is_in_place()) {
84 return create_output(transform_linear(input, gain_factor, 0.0));
85 }
86 return create_output(transform_linear(input, gain_factor, 0.0, m_working_buffer));
87 }
88
90 auto offset_value = get_parameter_or<double>("offset_value", 0.0);
91 if (this->is_in_place()) {
92 return create_output(transform_linear(input, 1.0, offset_value));
93 }
94 return create_output(transform_linear(input, 1.0, offset_value, m_working_buffer));
95 }
96
98 auto exponent = get_parameter_or<double>("exponent", 2.0);
99
100 if (this->is_in_place()) {
101 return create_output(transform_power(input, exponent));
102 }
103 return create_output(transform_power(input, exponent, m_working_buffer));
104 }
105
107 auto scale = get_parameter_or<double>("scale", 1.0);
108 auto input_scale = get_parameter_or<double>("input_scale", 1.0);
109 auto offset = get_parameter_or<double>("offset", 1.0);
110 auto base = get_parameter_or<double>("base", std::numbers::e);
111
112 if (this->is_in_place()) {
113 return create_output(transform_logarithmic(input, scale, input_scale, offset, base));
114 }
115 return create_output(transform_logarithmic(input, scale, input_scale, offset, m_working_buffer, base));
116 }
117
119 auto scale = get_parameter_or<double>("scale", 1.0);
120 auto rate = get_parameter_or<double>("rate", 1.0);
121 auto base = get_parameter_or<double>("base", std::numbers::e);
122
123 if (this->is_in_place()) {
124 return create_output(transform_exponential(input, scale, rate, base));
125 }
126 return create_output(transform_exponential(input, scale, rate, m_working_buffer, base));
127 }
128
130 auto trig_function = get_parameter_or<std::string>("trig_function", "sin");
131 auto frequency = get_parameter_or<double>("frequency", 1.0);
132 auto amplitude = get_parameter_or<double>("amplitude", 1.0);
133 auto phase = get_parameter_or<double>("phase", 0.0);
134
135 if (trig_function == "sin") {
136 if (this->is_in_place()) {
137 return create_output(transform_trigonometric(input, [](double x) { return std::sin(x); }, frequency, amplitude, phase));
138 }
139 return create_output(transform_trigonometric(input, [](double x) { return std::sin(x); }, frequency, amplitude, phase, m_working_buffer));
140 }
141 if (trig_function == "cos") {
142 if (this->is_in_place()) {
143 return create_output(transform_trigonometric(input, [](double x) { return std::cos(x); }, frequency, amplitude, phase));
144 }
145 return create_output(transform_trigonometric(input, [](double x) { return std::cos(x); }, frequency, amplitude, phase, m_working_buffer));
146 }
147 if (trig_function == "tan") {
148 if (this->is_in_place()) {
149 return create_output(transform_trigonometric(input, [](double x) { return std::tan(x); }, frequency, amplitude, phase));
150 }
151 return create_output(transform_trigonometric(input, [](double x) { return std::tan(x); }, frequency, amplitude, phase, m_working_buffer));
152 }
153 return create_output(input);
154 }
155
157 auto bits = get_parameter_or<uint8_t>("bits", 16);
158 if (this->is_in_place()) {
159 return create_output(transform_quantize(input, bits));
160 }
162 }
163
165 auto target_peak = get_parameter_or<double>("target_peak", 1.0);
166 std::pair<double, double> target_range = { -target_peak, target_peak };
167 if (this->is_in_place()) {
168 return create_output(transform_normalize(input, target_range));
169 }
170 return create_output(transform_normalize(input, target_range, m_working_buffer));
171 }
172
174 auto coefficients = get_parameter_or<std::vector<double>>("coefficients", std::vector<double> { 0.0, 1.0 });
175 if (this->is_in_place()) {
176 return create_output(transform_polynomial(input, coefficients));
177 }
178 return create_output(transform_polynomial(input, coefficients, m_working_buffer));
179 }
180
181 default:
182 return create_output(input);
183 }
184 }
output_type create_output(const input_type &input)
Creates output with proper type conversion.
MathematicalOperation m_operation
Current mathematical operation.
std::vector< std::vector< double > > m_working_buffer
Buffer for out-of-place operations.
virtual bool is_in_place() const
Indicates whether the transformation modifies the input data directly.
DataType transform_polynomial(DataType &input, const std::vector< double > &coefficients)
Polynomial transformation using existing Generator::Polynomial (IN-PLACE)
DataType transform_linear(DataType &input, double a, double b)
Linear transformation y = ax + b using C++20 ranges (IN-PLACE)
@ GAIN
Linear gain/attenuation.
@ QUANTIZE
Quantization/bit reduction.
@ TRIGONOMETRIC
Trigonometric functions.
@ LOGARITHMIC
Logarithmic transform.
@ EXPONENTIAL
Exponential transform.
DataType transform_logarithmic(DataType &input, double a, double b, double c=1.0, double base=std::numbers::e)
Logarithmic transformation y = a * log_base(b * x + c) (IN-PLACE)
DataType transform_normalize(DataType &input, const std::pair< double, double > &target_range={ -1.0, 1.0 })
Normalize transformation using existing infrastructure (IN-PLACE)
DataType transform_exponential(DataType &input, double a, double b, double base=std::numbers::e)
Exponential transformation y = a * base^(b * x) (IN-PLACE)
DataType transform_power(DataType &input, double exponent)
Power transformation y = x^exponent (IN-PLACE)
DataType transform_quantize(DataType &input, uint8_t bits)
Quantization transformation (bit reduction) using C++20 features (IN-PLACE)
DataType transform_trigonometric(DataType &input, TrigFunc trig_func, double frequency=1.0, double amplitude=1.0, double phase=0.0)
Trigonometric transformation using specified function (IN-PLACE)

References MayaFlux::Yantra::transform_exponential(), MayaFlux::Yantra::transform_linear(), MayaFlux::Yantra::transform_logarithmic(), MayaFlux::Yantra::transform_normalize(), MayaFlux::Yantra::transform_polynomial(), MayaFlux::Yantra::transform_power(), MayaFlux::Yantra::transform_quantize(), and MayaFlux::Yantra::transform_trigonometric().

+ Here is the call graph for this function: