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

◆ process()

void MayaFlux::Kakshya::SpatialRegionProcessor::process ( const std::shared_ptr< SignalSourceContainer > &  container)
overridevirtual

Extract all active regions from processed_data[0] in parallel.

   For each OrganizedRegion in m_organized_regions, extracts pixel
   data via extract_nd_region and appends to processed_data.
   Sets OrganizedRegion::state to ACTIVE during extraction and
   PROCESSED on completion.  Failed extractions are logged and
   skipped without aborting the frame.
Parameters
containerSource container; processed_data[0] must hold the full-surface buffer.

Implements MayaFlux::Kakshya::DataProcessor.

Definition at line 84 of file SpatialRegionProcessor.cpp.

85{
86 if (!container) {
88 "SpatialRegionProcessor::process — null container");
89 return;
90 }
91
92 auto& processed = container->get_processed_data();
93
94 if (processed.empty()) {
96 "SpatialRegionProcessor: processed_data empty, no readback available");
97 container->update_processing_state(ProcessingState::IDLE);
98 return;
99 }
100
101 const auto* full_surface = std::get_if<std::vector<uint8_t>>(&processed[0]);
102 if (!full_surface || full_surface->empty()) {
104 "SpatialRegionProcessor: processed_data[0] empty, skipping extraction");
105 container->update_processing_state(ProcessingState::IDLE);
106 return;
107 }
108
109 if (m_organized_regions.empty()) {
110 container->update_processing_state(ProcessingState::IDLE);
111 return;
112 }
113
114 m_is_processing.store(true, std::memory_order_release);
115 container->update_processing_state(ProcessingState::PROCESSING);
116
117 const auto& dims = container->get_structure().dimensions;
118 const std::span<const uint8_t> src { full_surface->data(), full_surface->size() };
119
120 std::vector<DataVariant> extracts;
121 extracts.reserve(m_organized_regions.size());
122
123 for (auto& org : m_organized_regions) {
124 if (org.segments.empty()) {
126 "SpatialRegionProcessor: OrganizedRegion '{}[{}]' has no segments, skipping",
127 org.group_name, org.region_index);
128 continue;
129 }
130
131 org.state = RegionState::ACTIVE;
132
133 try {
134 extracts.emplace_back(
135 extract_nd_region<uint8_t>(src, org.segments[0].source_region, dims));
136 org.state = RegionState::READY;
137 } catch (const std::exception& e) {
139 "SpatialRegionProcessor: extraction failed for '{}[{}]' — {}",
140 org.group_name, org.region_index, e.what());
141 org.state = RegionState::IDLE;
142 }
143 }
144
145 processed = std::move(extracts);
146
147 m_is_processing.store(false, std::memory_order_release);
148 container->update_processing_state(ProcessingState::PROCESSED);
149}
#define MF_RT_WARN(comp, ctx,...)
#define MF_RT_ERROR(comp, ctx,...)
#define MF_RT_TRACE(comp, ctx,...)
std::vector< OrganizedRegion > m_organized_regions
@ ContainerProcessing
Container operations (Kakshya - file/stream/region processing)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
@ IDLE
Container is inactive with no data or not ready for processing.
@ PROCESSING
Container is actively being processed.
@ PROCESSED
Container has completed processing and results are available.
@ ACTIVE
Currently being processed.
@ READY
Ready for processing.
@ IDLE
Not being processed.

References MayaFlux::Kakshya::ACTIVE, MayaFlux::Journal::ContainerProcessing, MayaFlux::Kakshya::IDLE, MayaFlux::Journal::Kakshya, MayaFlux::Kakshya::RegionProcessorBase::m_is_processing, MayaFlux::Kakshya::RegionProcessorBase::m_organized_regions, MF_RT_ERROR, MF_RT_TRACE, MF_RT_WARN, MayaFlux::Kakshya::PROCESSED, MayaFlux::Kakshya::PROCESSING, and MayaFlux::Kakshya::READY.