MayaFlux 0.4.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 187 of file RegionProcessors.cpp.

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