Process regions according to their selection pattern.
182{
184 return;
185
188
190
191 bool segment_changed = (selected_segment != current_region.active_segment_index);
193 bool region_completed = (segment_completed && selected_segment == current_region.segments.size() - 1);
194
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) {
214 } else {
216 container, output_data);
217 }
218
222 new_current.active_segment_index = 0;
223
224 } else {
226 container, output_data);
227 current_region.active_segment_index = selected_segment;
228 }
229}
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.