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

◆ transform_window() [1/2]

template<OperationReadyData DataType>
DataType MayaFlux::Yantra::transform_window ( DataType &  input,
Nodes::Generator::WindowType  window_type,
uint32_t  window_size,
std::vector< std::vector< double > > &  working_buffer 
)

Windowing transformation using C++20 ranges (OUT-OF-PLACE)

Template Parameters
DataTypeOperationReadyData type
Parameters
inputInput data - will NOT be modified
window_typeType of window to apply
window_sizeSize of window (0 = full data size)
working_bufferBuffer for operations (will be resized if needed)
Returns
Windowed data

Definition at line 138 of file SpectralHelper.hpp.

142{
143 auto [target_data, structure_info] = OperationHelper::setup_operation_buffer(input, working_buffer);
144
145 uint32_t size = window_size > 0 ? window_size : smallest_size(working_buffer);
146
147 auto window = Nodes::Generator::generate_window(size, window_type);
148
149 working_buffer.resize(target_data.size());
150 for (size_t i = 0; i < target_data.size(); ++i) {
151 auto& span = target_data[i];
152 auto& buffer = working_buffer[i];
153 buffer.resize(span.size());
154
155 auto data_view = span | std::views::take(std::min(size, static_cast<uint32_t>(span.size())));
156 auto window_view = window | std::views::take(data_view.size());
157
158 std::ranges::transform(data_view, window_view, buffer.begin(),
159 [](double sample, double win) { return sample * win; });
160
161 if (span.size() > size) {
162 std::copy(span.begin() + size, span.end(), buffer.begin() + size);
163 }
164 }
165
166 return OperationHelper::reconstruct_from_double<DataType>(working_buffer, structure_info);
167}
uint64_t smallest_size(std::vector< std::vector< double > > &data)

References MayaFlux::Nodes::Generator::generate_window(), MayaFlux::Yantra::OperationHelper::setup_operation_buffer(), and smallest_size().

+ Here is the call graph for this function: