MayaFlux 0.2.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 188 of file RegionProcessors.cpp.

190{
191 if (m_organized_regions.empty())
192 return;
193
194 auto& current_region = m_organized_regions[m_current_region_index];
195 current_region.state = RegionState::ACTIVE;
196
197 size_t selected_segment = select_next_segment(current_region);
198
199 bool segment_changed = (selected_segment != current_region.active_segment_index);
200 bool segment_completed = is_segment_complete(current_region, selected_segment);
201 bool region_completed = (segment_completed && selected_segment == current_region.segments.size() - 1);
202
203 if (region_completed && m_current_region_index < m_organized_regions.size() - 1) {
204 auto& next_region = m_organized_regions[m_current_region_index + 1];
205
206 bool should_transition = false;
207 switch (current_region.transition_type) {
209 should_transition = false;
210 break;
213 should_transition = (current_region.transition_duration_ms > 0);
214 break;
215 default:
216 should_transition = false;
217 break;
218 }
219
220 if (should_transition) {
221 apply_region_transition(current_region, next_region, container, output_data);
222 } else {
223 process_region_segment(current_region, current_region.segments[selected_segment],
224 container, output_data);
225 }
226
228 auto& new_current = m_organized_regions[m_current_region_index];
229 new_current.state = RegionState::READY;
230 new_current.active_segment_index = 0;
231
232 } else {
233 process_region_segment(current_region, current_region.segments[selected_segment],
234 container, output_data);
235 current_region.active_segment_index = selected_segment;
236 }
237}
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: