MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
ProcessingTokens.hpp
Go to the documentation of this file.
1#pragma once
2
3namespace MayaFlux::Vruta {
4
5enum class ProcessingToken {
6 SAMPLE_ACCURATE, ///< Coroutine is sample-accurate
7 FRAME_ACCURATE, ///< Coroutine is frame-accurate
8 /**
9 * @brief Event-driven execution - process when events arrive
10 *
11 * Unlike FRAME_ACCURATE (which waits for vsync) or SAMPLE_ACCURATE
12 * (which waits for audio callback), EVENT_DRIVEN coroutines resume
13 * whenever their associated events fire. Used for input handling,
14 * UI interactions, or any sporadic/asynchronous processing.
15 */
17 MULTI_RATE, ///< Coroutine can handle multiple sample rates. Picks the frame-accurate processing token by default
18 ON_DEMAND, ///< Coroutine is executed on demand, not scheduled
19 CUSTOM
20};
21
22/**
23 * @enum DelayContext
24 * @brief Discriminator for different temporal delay mechanisms
25 *
26 * Allows routines to specify which timing mechanism should trigger
27 * their resumption, preventing cross-contamination between different
28 * temporal domains within the same processing token.
29 */
30enum class DelayContext : uint8_t {
31 NONE, ///< No active delay, resume immediately
32 SAMPLE_BASED, ///< Sample-accurate delay (audio domain)
33 BUFFER_BASED, ///< Buffer-cycle delay (audio hardware boundary)
34 FRAME_BASED, ///< Frame-rate delay (Graphics domain)
35 EVENT_BASED, ///< Event-driven delay (user events, etc.)
36 AWAIT ///< Awaiter-induced delay (temporary suspension)
37};
38}
39
40namespace MayaFlux::Nodes {
41/**
42 * @enum ProcessingToken
43 * @brief Enumerates the different processing domains for nodes
44 *
45 * This enum defines the various processing rates or domains that nodes can operate in.
46 * Each token represents a specific type of processing, such as audio rate, visual rate,
47 * or custom processing rates. Nodes can be registered under these tokens to indicate
48 * their intended processing behavior within a RootNode.
49 */
50enum class ProcessingToken {
51 AUDIO_RATE, ///< Nodes that process at the audio sample rate
52 VISUAL_RATE, ///< Nodes that process at the visual frame rate
53 CUSTOM_RATE ///< Nodes that process at a custom-defined rate
54};
55}
56
57namespace MayaFlux::Buffers {
58
59/**
60 * @enum ProcessingToken
61 * @brief Bitfield enum defining processing characteristics and backend requirements for buffer operations
62 *
63 * ProcessingToken provides a flexible bitfield system for specifying how buffers and their processors
64 * should be handled within the MayaFlux engine. These tokens enable fine-grained control over processing
65 * rate, execution location, and concurrency patterns, allowing the system to optimize resource allocation
66 * and execution strategies based on specific requirements.
67 *
68 * The token system is designed as a bitfield to allow combination of orthogonal characteristics:
69 * - **Rate Tokens**: Define the temporal processing characteristics (SAMPLE_RATE vs FRAME_RATE)
70 * - **Device Tokens**: Specify execution location (CPU_PROCESS vs GPU_PROCESS)
71 * - **Concurrency Tokens**: Control execution pattern (SEQUENTIAL vs PARALLEL)
72 * - **Backend Tokens**: Predefined combinations optimized for specific use cases
73 *
74 * This architecture enables the buffer system to make intelligent decisions about processor compatibility,
75 * resource allocation, and execution optimization while maintaining flexibility for custom processing
76 * scenarios.
77 */
78enum ProcessingToken : uint32_t {
79 /**
80 * @brief Processes data at audio sample rate with buffer-sized chunks
81 *
82 * Evaluates one audio buffer size (typically 512 samples) at a time, executing at
83 * sample_rate/buffer_size frequency. This is the standard token for audio processing
84 * operations that work with discrete audio blocks in real-time processing scenarios.
85 */
87
88 /**
89 * @brief Processes data at video frame rate
90 *
91 * Evaluates one video frame at a time, typically at 30-120 Hz depending on the
92 * video processing requirements. This token is optimized for video buffer operations
93 * and graphics processing workflows that operate on complete frame data.
94 */
96
97 /**
98 * @brief Executes processing operations on CPU threads
99 *
100 * Specifies that the processing should occur on CPU cores using traditional
101 * threading models. This is optimal for operations that benefit from CPU's
102 * sequential processing capabilities or require complex branching logic.
103 */
105
106 /**
107 * @brief Executes processing operations on GPU hardware
108 *
109 * Specifies that the processing should leverage GPU compute capabilities,
110 * typically through compute shaders, CUDA, or OpenCL. This is optimal for
111 * massively parallel operations that can benefit from GPU's parallel architecture.
112 */
114
115 /**
116 * @brief Processes operations sequentially, one after another
117 *
118 * Ensures that processing operations are executed in a deterministic order
119 * without parallelization. This is essential for operations where execution
120 * order affects the final result or when shared resources require serialized access.
121 */
123
124 /**
125 * @brief Processes operations in parallel when possible
126 *
127 * Enables concurrent execution of processing operations when they can be
128 * safely parallelized. This maximizes throughput for operations that can
129 * benefit from parallel execution without introducing race conditions.
130 */
131 PARALLEL = 0x20,
132
133 /**
134 * @brief Standard audio processing backend configuration
135 *
136 * Combines SAMPLE_RATE | CPU_PROCESS | SEQUENTIAL for traditional audio processing.
137 * This processes audio on the chosen backend (default RtAudio) using CPU threads
138 * in sequential order within the audio callback loop. This is the most common
139 * configuration for real-time audio processing applications.
140 */
142
143 /**
144 * @brief Standard graphics processing backend configuration
145 *
146 * Combines FRAME_RATE | GPU_PROCESS | PARALLEL for graphics processing.
147 * This processes video/graphics data on the chosen backend (default GLFW) using
148 * GPU hardware with parallel execution within the graphics callback loop.
149 * Optimal for real-time graphics processing and video effects.
150 */
152
153 /**
154 * @brief High-performance audio processing with GPU acceleration
155 *
156 * Combines SAMPLE_RATE | GPU_PROCESS | PARALLEL for GPU-accelerated audio processing.
157 * This offloads audio processing to GPU hardware, typically using compute shaders
158 * for parallel execution. Useful for computationally intensive audio operations
159 * like convolution, FFT processing, or complex effects that benefit from GPU parallelization.
160 */
162
163 /**
164 * @brief Window event stream processing
165 *
166 * Processes window lifecycle events (resize, close, focus) and input events
167 * (keyboard, mouse) at frame rate using CPU in sequential order. This is
168 * distinct from graphics rendering - it handles the window container itself,
169 * not its visual content.
170 */
172};
173
174}
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
@ SAMPLE_RATE
Processes data at audio sample rate with buffer-sized chunks.
@ CPU_PROCESS
Executes processing operations on CPU threads.
@ AUDIO_BACKEND
Standard audio processing backend configuration.
@ PARALLEL
Processes operations in parallel when possible.
@ SEQUENTIAL
Processes operations sequentially, one after another.
@ GRAPHICS_BACKEND
Standard graphics processing backend configuration.
@ FRAME_RATE
Processes data at video frame rate.
@ WINDOW_EVENTS
Window event stream processing.
@ GPU_PPOCESS
Executes processing operations on GPU hardware.
@ AUDIO_PARALLEL
High-performance audio processing with GPU acceleration.
ProcessingToken
Enumerates the different processing domains for nodes.
@ AUDIO_RATE
Nodes that process at the audio sample rate.
@ CUSTOM_RATE
Nodes that process at a custom-defined rate.
@ VISUAL_RATE
Nodes that process at the visual frame rate.
Contains the node-based computational processing system components.
Definition Chronie.hpp:5
@ MULTI_RATE
Coroutine can handle multiple sample rates. Picks the frame-accurate processing token by default.
@ EVENT_DRIVEN
Event-driven execution - process when events arrive.
@ FRAME_ACCURATE
Coroutine is frame-accurate.
@ SAMPLE_ACCURATE
Coroutine is sample-accurate.
@ ON_DEMAND
Coroutine is executed on demand, not scheduled.
DelayContext
Discriminator for different temporal delay mechanisms.
@ FRAME_BASED
Frame-rate delay (Graphics domain)
@ NONE
No active delay, resume immediately.
@ SAMPLE_BASED
Sample-accurate delay (audio domain)
@ BUFFER_BASED
Buffer-cycle delay (audio hardware boundary)
@ AWAIT
Awaiter-induced delay (temporary suspension)
@ EVENT_BASED
Event-driven delay (user events, etc.)