MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
Domain.hpp
Go to the documentation of this file.
1#pragma once
2
4
5namespace MayaFlux {
6
7namespace Core {
8 struct SubsystemTokens;
9}
10
11/**
12 * @enum Domain
13 * @brief Unified domain enum combining all three ProcessingToken subsystems
14 *
15 * This enum provides a unified interface for defining processing domains by combining
16 * tokens from Nodes, Buffers, and Vruta subsystems. Each domain represents a complete
17 * processing configuration that spans all three subsystems.
18 *
19 * The enum uses bitfield composition to create unified domain identifiers that can
20 * be decomposed back into their constituent subsystem tokens when needed.
21 */
22enum Domain : uint64_t {
23 // ===== CORE AUDIO DOMAINS =====
24
25 /**
26 * @brief Standard real-time audio processing domain
27 *
28 * Combines:
29 * - Nodes::ProcessingToken::AUDIO_RATE
30 * - Buffers::ProcessingToken::AUDIO_BACKEND
31 * - Vruta::ProcessingToken::SAMPLE_ACCURATE
32 */
33 AUDIO = (static_cast<uint64_t>(Nodes::ProcessingToken::AUDIO_RATE) << 32) | (static_cast<uint64_t>(Buffers::ProcessingToken::AUDIO_BACKEND) << 16) | (static_cast<uint64_t>(Vruta::ProcessingToken::SAMPLE_ACCURATE)),
34
35 /**
36 * @brief High-performance parallel audio processing domain
37 *
38 * Combines:
39 * - Nodes::ProcessingToken::AUDIO_RATE
40 * - Buffers::ProcessingToken::AUDIO_PARALLEL
41 * - Vruta::ProcessingToken::SAMPLE_ACCURATE
42 */
43 AUDIO_PARALLEL = (static_cast<uint64_t>(Nodes::ProcessingToken::AUDIO_RATE) << 32) | (static_cast<uint64_t>(Buffers::ProcessingToken::AUDIO_PARALLEL) << 16) | (static_cast<uint64_t>(Vruta::ProcessingToken::SAMPLE_ACCURATE)),
44
45 // ===== VISUAL/GRAPHICS DOMAINS =====
46
47 /**
48 * @brief Standard real-time graphics processing domain
49 *
50 * Combines:
51 * - Nodes::ProcessingToken::VISUAL_RATE
52 * - Buffers::ProcessingToken::GRAPHICS_BACKEND
53 * - Vruta::ProcessingToken::FRAME_ACCURATE
54 */
55 GRAPHICS = (static_cast<uint64_t>(Nodes::ProcessingToken::VISUAL_RATE) << 32) | (static_cast<uint64_t>(Buffers::ProcessingToken::GRAPHICS_BACKEND) << 16) | (static_cast<uint64_t>(Vruta::ProcessingToken::FRAME_ACCURATE)),
56
57 /**
58 * @brief Multi-rate graphics processing for adaptive frame rates
59 *
60 * Combines:
61 * - Nodes::ProcessingToken::VISUAL_RATE
62 * - Buffers::ProcessingToken::GRAPHICS_BACKEND
63 * - Vruta::ProcessingToken::MULTI_RATE
64 */
65 GRAPHICS_ADAPTIVE = (static_cast<uint64_t>(Nodes::ProcessingToken::VISUAL_RATE) << 32) | (static_cast<uint64_t>(Buffers::ProcessingToken::GRAPHICS_BACKEND) << 16) | (static_cast<uint64_t>(Vruta::ProcessingToken::MULTI_RATE)),
66
67 // ===== CUSTOM DOMAINS =====
68
69 /**
70 * @brief Custom processing domain with on-demand scheduling
71 *
72 * Combines:
73 * - Nodes::ProcessingToken::CUSTOM_RATE
74 * - Buffers::ProcessingToken::SAMPLE_RATE | CPU_PROCESS | SEQUENTIAL
75 * - Vruta::ProcessingToken::ON_DEMAND
76 */
78
79 /**
80 * @brief Custom processing domain with flexible scheduling
81 *
82 * Combines:
83 * - Nodes::ProcessingToken::CUSTOM_RATE
84 * - Buffers::ProcessingToken::FRAME_RATE | GPU_PROCESS | PARALLEL
85 * - Vruta::ProcessingToken::CUSTOM
86 */
88
89 // ===== HYBRID DOMAINS =====
90
91 /**
92 * @brief Audio-visual synchronization domain
93 *
94 * Processes audio at sample rate but syncs with frame-accurate scheduling
95 * Useful for multimedia applications requiring tight A/V sync
96 */
98
99 /**
100 * @brief GPU-accelerated audio processing domain
101 *
102 * Routes audio through GPU for compute-intensive processing
103 * while maintaining sample-accurate timing
104 */
106
107 /**
108 * @brief Pure windowing domain (no rendering)
109 *
110 * Handles window lifecycle, input events, and frame timing coordination.
111 * Does not perform any GPU rendering - that's handled by GRAPHICS domain.
112 *
113 * Use case: Headless window manager, input-only applications, or when
114 * separating windowing from rendering into different subsystems.
115 */
116 WINDOWING = (static_cast<uint64_t>(Nodes::ProcessingToken::VISUAL_RATE) << 32)
117 | (static_cast<uint64_t>(Buffers::ProcessingToken::WINDOW_EVENTS) << 16)
118 | (static_cast<uint64_t>(Vruta::ProcessingToken::FRAME_ACCURATE)),
119
120 /**
121 * @brief Input event processing domain
122 *
123 * Handles input events (keyboard, mouse, MIDI) asynchronously without
124 * frame synchronization. Events are processed as they arrive, not locked
125 * to vsync or audio callbacks.
126 *
127 * Use case: Input gesture recognition, MIDI controllers, or when input
128 * latency must be minimized independently of rendering frame rate.
129 */
130 INPUT_EVENTS = (static_cast<uint64_t>(Nodes::ProcessingToken::CUSTOM_RATE) << 32)
131 | (static_cast<uint64_t>(Buffers::ProcessingToken::WINDOW_EVENTS) << 16)
132 | (static_cast<uint64_t>(Vruta::ProcessingToken::EVENT_DRIVEN)),
133};
134
135/**
136 * @brief Decomposes a Domain enum into its constituent ProcessingTokens
137 * @param domain The unified domain to decompose
138 * @return SubsystemTokens struct containing the individual tokens
139 */
140Core::SubsystemTokens decompose_domain(Domain domain);
141
142/**
143 * @brief Composes individual ProcessingTokens into a unified Domain
144 * @param node_token Token for node processing
145 * @param buffer_token Token for buffer processing
146 * @param task_token Token for task scheduling
147 * @return Unified Domain enum value
148 */
150 Buffers::ProcessingToken buffer_token,
151 Vruta::ProcessingToken task_token)
152{
153 return static_cast<Domain>(
154 (static_cast<uint64_t>(node_token) << 32) | (static_cast<uint64_t>(buffer_token) << 16) | (static_cast<uint64_t>(task_token)));
155}
156
157/**
158 * @brief Creates a custom domain from individual tokens with validation
159 * @param node_token Token for node processing
160 * @param buffer_token Token for buffer processing
161 * @param task_token Token for task scheduling
162 * @return Validated unified Domain enum value
163 * @throws std::invalid_argument if tokens are incompatible
164 */
166 Buffers::ProcessingToken buffer_token,
167 Vruta::ProcessingToken task_token);
168
169/**
170 * @brief Extracts node processing token from domain
171 * @param domain The unified domain
172 * @return Node processing token
173 */
175{
176 return static_cast<Nodes::ProcessingToken>((domain >> 32) & 0xFFFF);
177}
178
179/**
180 * @brief Extracts buffer processing token from domain
181 * @param domain The unified domain
182 * @return Buffer processing token
183 */
185{
186 return static_cast<Buffers::ProcessingToken>((domain >> 16) & 0xFFFF);
187}
188
189/**
190 * @brief Extracts task processing token from domain
191 * @param domain The unified domain
192 * @return Task processing token
193 */
195{
196 return static_cast<Vruta::ProcessingToken>(domain & 0xFFFF);
197}
198
199/**
200 * @brief Checks if a domain is valid (all constituent tokens are compatible)
201 * @param domain The domain to validate
202 * @return true if domain is valid, false otherwise
203 */
204MAYAFLUX_API bool is_domain_valid(Domain domain);
205
206/**
207 * @brief Gets a human-readable string representation of a domain
208 * @param domain The domain to stringify
209 * @return String description of the domain
210 */
211MAYAFLUX_API std::string domain_to_string(Domain domain);
212
213} // namespace MayaFlux
static const auto node_token
Definition Chain.cpp:8
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.
@ Core
Core engine, backend, subsystems.
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.
@ 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.
std::string domain_to_string(Domain domain)
Gets a human-readable string representation of a domain.
Definition Domain.cpp:45
MAYAFLUX_API Vruta::ProcessingToken get_task_token(Domain domain)
Extracts task processing token from domain.
Definition Domain.hpp:194
Domain compose_domain(Nodes::ProcessingToken node_token, Buffers::ProcessingToken buffer_token, Vruta::ProcessingToken task_token)
Composes individual ProcessingTokens into a unified Domain.
Definition Domain.hpp:149
MAYAFLUX_API Nodes::ProcessingToken get_node_token(Domain domain)
Extracts node processing token from domain.
Definition Domain.hpp:174
bool is_domain_valid(Domain domain)
Checks if a domain is valid (all constituent tokens are compatible)
Definition Domain.cpp:32
Domain
Unified domain enum combining all three ProcessingToken subsystems.
Definition Domain.hpp:22
@ AUDIO_PARALLEL
High-performance parallel audio processing domain.
Definition Domain.hpp:43
@ CUSTOM_FLEXIBLE
Custom processing domain with flexible scheduling.
Definition Domain.hpp:87
@ AUDIO
Standard real-time audio processing domain.
Definition Domain.hpp:33
@ AUDIO_VISUAL_SYNC
Audio-visual synchronization domain.
Definition Domain.hpp:97
@ INPUT_EVENTS
Input event processing domain.
Definition Domain.hpp:130
@ CUSTOM_ON_DEMAND
Custom processing domain with on-demand scheduling.
Definition Domain.hpp:77
@ GRAPHICS
Standard real-time graphics processing domain.
Definition Domain.hpp:55
@ GRAPHICS_ADAPTIVE
Multi-rate graphics processing for adaptive frame rates.
Definition Domain.hpp:65
@ WINDOWING
Pure windowing domain (no rendering)
Definition Domain.hpp:116
@ AUDIO_GPU
GPU-accelerated audio processing domain.
Definition Domain.hpp:105
Domain create_custom_domain(Nodes::ProcessingToken node_token, Buffers::ProcessingToken buffer_token, Vruta::ProcessingToken task_token)
Creates a custom domain from individual tokens with validation.
Definition Domain.cpp:17
Core::SubsystemTokens decompose_domain(Domain domain)
Decomposes a Domain enum into its constituent ProcessingTokens.
Definition Domain.cpp:8
MAYAFLUX_API Buffers::ProcessingToken get_buffer_token(Domain domain)
Extracts buffer processing token from domain.
Definition Domain.hpp:184
Main namespace for the Maya Flux audio engine.
Definition LiveAid.hpp:6