Process regions according to their selection pattern.
190{
192 return;
193
196
198
199 bool segment_changed = (selected_segment != current_region.active_segment_index);
201 bool region_completed = (segment_completed && selected_segment == current_region.segments.size() - 1);
202
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) {
222 } else {
224 container, output_data);
225 }
226
230 new_current.active_segment_index = 0;
231
232 } else {
234 container, output_data);
235 current_region.active_segment_index = selected_segment;
236 }
237}
virtual void apply_region_transition(const OrganizedRegion ¤t_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 ®ion) const
Select the next segment to process according to the region's pattern.
virtual void process_region_segment(const OrganizedRegion ®ion, const RegionSegment &segment, const std::shared_ptr< SignalSourceContainer > &container, std::vector< DataVariant > &output_data)
Process a single region segment.
size_t m_current_region_index
std::vector< OrganizedRegion > m_organized_regions
bool is_segment_complete(const OrganizedRegion ®ion, 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.