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

◆ process()

void ContiguousAccessProcessor::process ( const std::shared_ptr< SignalSourceContainer > &  container)
overridevirtual

Process the current region or block of data.

Advances the read position if auto-advance is enabled.

Parameters
containerThe SignalSourceContainer to process.

Implements MayaFlux::Kakshya::DataProcessor.

Definition at line 133 of file ContiguousAccessProcessor.cpp.

134{
135 if (!m_prepared) {
137 "ContiguousAccessProcessor not prepared for processing");
138 return;
139 }
140
141 auto source_container = m_source_container_weak.lock();
142 if (!source_container || source_container.get() != container.get()) {
144 "ContiguousAccessProcessor: Source container mismatch or expired");
145 return;
146 }
147
148 m_is_processing = true;
149 m_last_process_time = std::chrono::steady_clock::now();
150
151 try {
152 uint64_t min_frame = *std::ranges::min_element(m_current_position);
153 std::vector<uint64_t> region_coords = { min_frame, 0 };
154
155 Region output_region = calculate_output_region(region_coords, m_output_shape);
156
157 auto region_data = container->get_region_data(output_region);
158 auto& processed_data_vector = container->get_processed_data();
159
161 processed_data_vector.resize(1);
162 if (!region_data.empty()) {
163 safe_copy_data_variant(region_data[0], processed_data_vector[0]);
164 }
165 } else {
166 uint64_t channels_to_process = std::min(m_output_shape[1], static_cast<uint64_t>(region_data.size()));
167 processed_data_vector.resize(channels_to_process);
168
169 for (size_t ch = 0; ch < channels_to_process; ++ch) {
170 safe_copy_data_variant(region_data[ch], processed_data_vector[ch]);
171 }
172 }
173
174 if (m_auto_advance) {
175 uint64_t frames_to_advance = m_output_shape[0];
176
179 frames_to_advance,
183
184 if (auto stream = std::dynamic_pointer_cast<StreamContainer>(container)) {
185 stream->set_read_position(m_current_position);
186 }
187 }
188
189 container->update_processing_state(ProcessingState::PROCESSED);
190 } catch (const std::exception& e) {
192 "Error during ContiguousAccessProcessor processing: {}",
193 e.what());
194 container->update_processing_state(ProcessingState::ERROR);
195 }
196
197 m_is_processing = false;
198}
#define MF_RT_ERROR(comp, ctx,...)
std::chrono::steady_clock::time_point m_last_process_time
std::weak_ptr< SignalSourceContainer > m_source_container_weak
@ ContainerProcessing
Container operations (Kakshya - file/stream/region processing)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
@ ERROR
Container is in an error state and cannot proceed.
@ PROCESSED
Container has completed processing and results are available.
std::vector< uint64_t > advance_position(const std::vector< uint64_t > &current_positions, uint64_t frames_to_advance, const ContainerDataStructure &structure, bool looping_enabled, const Region &loop_region)
Advance current positions by a number of frames, with optional looping.
@ INTERLEAVED
Single DataVariant with interleaved data (LRLRLR for stereo)
void safe_copy_data_variant(const DataVariant &input, DataVariant &output)
Safely copy data from a DataVariant to another DataVariant, handling type conversion.
Definition DataUtils.cpp:34
Region calculate_output_region(const std::vector< uint64_t > &current_pos, const std::vector< uint64_t > &output_shape)
Calculate output region bounds from current position and shape.

References MayaFlux::Kakshya::advance_position(), MayaFlux::Kakshya::calculate_output_region(), MayaFlux::Journal::ContainerProcessing, MayaFlux::Kakshya::ERROR, MayaFlux::Kakshya::INTERLEAVED, MayaFlux::Journal::Kakshya, m_auto_advance, m_current_position, m_is_processing, m_last_process_time, m_loop_region, m_looping_enabled, m_output_shape, m_prepared, m_source_container_weak, m_structure, MF_RT_ERROR, MayaFlux::Kakshya::ContainerDataStructure::organization, MayaFlux::Kakshya::PROCESSED, and MayaFlux::Kakshya::safe_copy_data_variant().

+ Here is the call graph for this function: