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

◆ process_organized_regions()

void MayaFlux::Kakshya::RegionOrganizationProcessor::process_organized_regions ( const std::shared_ptr< SignalSourceContainer > &  container,
std::vector< DataVariant > &  output_data 
)
protectedvirtual

Process regions according to their selection pattern.

Parameters
containerThe signal container to process.
output_dataOutput data variant to fill.

Definition at line 180 of file RegionProcessors.cpp.

182{
183 if (m_organized_regions.empty())
184 return;
185
186 auto& current_region = m_organized_regions[m_current_region_index];
187 current_region.state = RegionState::ACTIVE;
188
189 size_t selected_segment = select_next_segment(current_region);
190
191 bool segment_changed = (selected_segment != current_region.active_segment_index);
192 bool segment_completed = is_segment_complete(current_region, selected_segment);
193 bool region_completed = (segment_completed && selected_segment == current_region.segments.size() - 1);
194
195 if (region_completed && m_current_region_index < m_organized_regions.size() - 1) {
196 auto& next_region = m_organized_regions[m_current_region_index + 1];
197
198 bool should_transition = false;
199 switch (current_region.transition_type) {
201 should_transition = false;
202 break;
205 should_transition = (current_region.transition_duration_ms > 0);
206 break;
207 default:
208 should_transition = false;
209 break;
210 }
211
212 if (should_transition) {
213 apply_region_transition(current_region, next_region, container, output_data);
214 } else {
215 process_region_segment(current_region, current_region.segments[selected_segment],
216 container, output_data);
217 }
218
220 auto& new_current = m_organized_regions[m_current_region_index];
221 new_current.state = RegionState::READY;
222 new_current.active_segment_index = 0;
223
224 } else {
225 process_region_segment(current_region, current_region.segments[selected_segment],
226 container, output_data);
227 current_region.active_segment_index = selected_segment;
228 }
229}
virtual void apply_region_transition(const OrganizedRegion &current_region, const OrganizedRegion &next_region, const std::shared_ptr< SignalSourceContainer > &container, std::vector< DataVariant > &output_data)
Apply a transition between two regions.
virtual size_t select_next_segment(const OrganizedRegion &region) const
Select the next segment to process according to the region's pattern.
virtual void process_region_segment(const OrganizedRegion &region, const RegionSegment &segment, const std::shared_ptr< SignalSourceContainer > &container, std::vector< DataVariant > &output_data)
Process a single region segment.
std::vector< OrganizedRegion > m_organized_regions
bool is_segment_complete(const OrganizedRegion &region, size_t segment_index)
@ OVERLAP
Overlap regions during transition.
@ CROSSFADE
Crossfade between regions.
@ IMMEDIATE
No transition, jump directly.
@ ACTIVE
Currently being processed.
@ READY
Ready for processing.

References MayaFlux::Kakshya::ACTIVE, apply_region_transition(), MayaFlux::Kakshya::CROSSFADE, MayaFlux::Kakshya::IMMEDIATE, MayaFlux::Kakshya::is_segment_complete(), MayaFlux::Kakshya::RegionProcessorBase::m_current_region_index, MayaFlux::Kakshya::RegionProcessorBase::m_organized_regions, MayaFlux::Kakshya::OVERLAP, process_region_segment(), MayaFlux::Kakshya::READY, and select_next_segment().

Referenced by process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: