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

◆ transform_fade() [1/2]

template<OperationReadyData DataType>
DataType MayaFlux::Yantra::transform_fade ( DataType &  input,
double  fade_in_duration_ratio,
double  fade_out_duration_ratio,
std::vector< std::vector< double > > &  working_buffer 
)

Fade transformation (linear fade-in and fade-out) using C++20 ranges (OUT-OF-PLACE)

Template Parameters
DataTypeOperationReadyData type
Parameters
inputInput data - will NOT be modified
fade_in_duration_ratioFade-in duration as a ratio of total length (0.0 to 1.0)
fade_out_duration_ratioFade-out duration as a ratio of total length (0.0 to 1.0)
working_bufferBuffer for operations (will be resized if needed)
Returns
Faded data

Definition at line 247 of file TemporalHelper.hpp.

248{
249 auto [target_data, structure_info] = OperationHelper::setup_operation_buffer(input, working_buffer);
250
251 for (size_t i = 0; i < target_data.size(); ++i) {
252 auto& span = target_data[i];
253 working_buffer[i].assign(span.begin(), span.end());
254
255 auto fade_in_samples = static_cast<size_t>(span.size() * fade_in_duration_ratio);
256 auto fade_out_samples = static_cast<size_t>(span.size() * fade_out_duration_ratio);
257 size_t fade_out_start = span.size() - fade_out_samples;
258
259 for (size_t j = 0; j < fade_in_samples && fade_in_samples > 1; ++j) {
260 double fade_factor = static_cast<double>(j) / static_cast<double>(fade_in_samples - 1);
261 working_buffer[i][j] *= fade_factor;
262 }
263
264 for (size_t j = 0; j < fade_out_samples && fade_out_samples > 1 && fade_out_start + j < span.size(); ++j) {
265 double fade_factor = 1.0 - (static_cast<double>(j) / static_cast<double>(fade_out_samples - 1));
266 working_buffer[i][fade_out_start + j] *= fade_factor;
267 }
268 }
269
270 return OperationHelper::reconstruct_from_double<DataType>(working_buffer, structure_info);
271}

References MayaFlux::Yantra::OperationHelper::setup_operation_buffer().

+ Here is the call graph for this function: