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

◆ execute_frame_streaming()

Vruta::GraphicsRoutine MayaFlux::Kriya::BufferPipeline::execute_frame_streaming ( uint64_t  max_cycles,
uint64_t  frames_per_operation 
)
private

Definition at line 343 of file BufferPipelineExecution.cpp.

344{
345 auto& promise = co_await Kriya::GetGraphicsPromise {};
346
347 if (m_operations.empty()) {
348 co_return;
349 }
350
352 uint32_t cycles_executed = 0;
353
354 while ((max_cycles == 0 || cycles_executed < max_cycles) && (m_continuous_execution || cycles_executed < max_cycles)) {
355
356 if (promise.should_terminate) {
357 break;
358 }
359
360 bool waited = false;
361
362 start_cycle();
363
364 for (size_t i = 0; i < m_operations.size(); ++i) {
365 auto& op = m_operations[i];
366
367 if (!operation_due(op)) {
368 continue;
369 }
370
372 continue;
373 }
374
375 const uint32_t op_iterations = operation_iterations(op);
376 const bool is_capture = op.get_type() == BufferOperation::OpType::CAPTURE;
377
378 for (uint32_t iter = 0; iter < op_iterations; ++iter) {
379
382
383 flow_through(i, m_current_cycle + iter);
384
385 if (is_capture) {
386 waited = true;
387 co_await FrameDelay { .frames_to_wait = 1 };
388 } else if (frames_per_operation > 0) {
389 waited = true;
390 co_await FrameDelay { .frames_to_wait = frames_per_operation };
391 }
392 }
393 }
394
396
397 finish_cycle();
398
400 cycles_executed++;
401
402 if (!waited) {
403 co_await FrameDelay { .frames_to_wait = 1 };
404 }
405 }
406
407 if (m_on_complete)
409}
@ CAPTURE
Capture data from source buffer using BufferCapture strategy.
@ READY
Data ready for processing.
uint32_t operation_iterations(const BufferOperation &op) const
void process_operation(BufferOperation &op, uint64_t cycle)
void flow_through(size_t index, uint64_t cycle)
std::vector< BufferOperation > m_operations
std::vector< DataState > m_data_states
std::function< void()> m_on_complete
bool operation_due(const BufferOperation &op) const
std::vector< std::shared_ptr< Vruta::Routine > > dispatch_cycle_branches(bool frame_rate)
GetPromiseBase< Vruta::graphics_promise > GetGraphicsPromise
Graphics domain promise accessor.

References MayaFlux::Kriya::BufferOperation::CAPTURE, CONSUMED, dispatch_cycle_branches(), EMPTY, finish_cycle(), flow_through(), MayaFlux::Kriya::FrameDelay::frames_to_wait, m_continuous_execution, m_current_cycle, m_data_states, m_on_complete, m_operations, operation_due(), operation_iterations(), process_operation(), READY, and start_cycle().

Referenced by execute_frame_internal().

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