MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
ProcessingArchitecture.cpp
Go to the documentation of this file.
2
5
8
10
12
13namespace MayaFlux::Core {
14
16 std::shared_ptr<Buffers::BufferManager> manager,
18 : m_manager(std::move(manager))
19 , m_token(token)
20 , m_locked(false)
21{
22}
23
25{
26 if (!m_manager) {
28 std::source_location::current(),
29 "Invalid buffer processing handle: BufferManager is null");
30 }
31}
32
34{
35 if (!m_locked) {
36 m_locked = true;
37 }
38}
39
40void BufferProcessingHandle::process(uint32_t processing_units)
41{
43 m_manager->process_token(m_token, processing_units);
44}
45
46void BufferProcessingHandle::process_channel(uint32_t channel, uint32_t processing_units)
47{
49 m_manager->process_channel(m_token, channel, processing_units);
50}
51
53 uint32_t channel,
54 uint32_t processing_units,
55 const std::vector<double>& node_data)
56{
58 m_manager->process_channel(m_token, channel, processing_units, node_data);
59}
60
61void BufferProcessingHandle::process_input(double* input_data, uint32_t num_channels, uint32_t num_frames)
62{
63 m_manager->process_input(input_data, num_channels, num_frames);
64}
65
66std::span<const double> BufferProcessingHandle::read_channel_data(uint32_t channel) const
67{
69 return m_manager->get_buffer_data(m_token, channel);
70}
71
72std::span<double> BufferProcessingHandle::write_channel_data(uint32_t channel)
73{
76 return m_manager->get_buffer_data(m_token, channel);
77}
78
80{
82 m_manager->update_routing_states(m_token);
83}
84
86{
88 m_manager->cleanup_completed_routing(m_token);
89}
90
91void BufferProcessingHandle::setup_channels(uint32_t num_channels, uint32_t buffer_size)
92{
94 m_manager->validate_num_channels(m_token, num_channels, buffer_size);
95}
96
98 std::shared_ptr<Nodes::NodeGraphManager> manager,
100 : m_manager(std::move(manager))
101 , m_token(token)
102{
103}
104
105void NodeProcessingHandle::process(uint32_t num_samples)
106{
107 m_manager->process_token(m_token, num_samples);
108}
109
110std::vector<double> NodeProcessingHandle::process_channel(uint32_t channel, uint32_t num_samples)
111{
112 return m_manager->process_channel(m_token, channel, num_samples);
113}
114
116{
117 return m_manager->process_sample(m_token, channel);
118}
119
120std::vector<std::vector<double>> NodeProcessingHandle::process_audio_networks(uint32_t num_samples, uint32_t channel)
121{
122 return m_manager->process_audio_networks(m_token, num_samples, channel);
123}
124
126{
127 m_manager->update_routing_states_for_cycle(m_token);
128}
129
131{
132 m_manager->cleanup_completed_routing(m_token);
133}
134
136 std::shared_ptr<Vruta::TaskScheduler> task_manager,
138 : m_scheduler(std::move(task_manager))
139 , m_token(token)
140{
141 if (!m_scheduler) {
143 std::source_location::current(),
144 "TaskSchedulerHandle requires valid TaskScheduler");
145 }
146}
147
149{
150 m_scheduler->register_token_processor(m_token, std::move(processor));
151}
152
153void TaskSchedulerHandle::process(uint64_t processing_units)
154{
155 m_scheduler->process_token(m_token, processing_units);
156}
157
159{
160 m_scheduler->process_buffer_cycle_tasks();
161}
162
163WindowManagerHandle::WindowManagerHandle(std::shared_ptr<Core::WindowManager> window_manager)
164 : m_window_manager(std::move(window_manager))
165{
166}
167
169{
170 if (m_window_manager) {
171 m_window_manager->process();
172 }
173}
174
175std::vector<std::shared_ptr<Core::Window>> WindowManagerHandle::get_processing_windows() const
176{
177 if (m_window_manager) {
178 return m_window_manager->get_processing_windows();
179 }
180 return {};
181}
182
183InputManagerHandle::InputManagerHandle(std::shared_ptr<InputManager> input_manager)
184 : m_input_manager(std::move(input_manager))
185{
186}
187
189{
190 if (m_input_manager) {
191 m_input_manager->start();
192 }
193}
194
196{
197 if (m_input_manager) {
198 m_input_manager->stop();
199 }
200}
201
203{
204 if (m_input_manager) {
205 m_input_manager->unregister_all_nodes();
206 }
207}
208
210{
211 if (m_input_manager) {
212 m_input_manager->enqueue(value);
213 }
214}
215
217 std::shared_ptr<Buffers::BufferManager> buffer_manager,
218 std::shared_ptr<Nodes::NodeGraphManager> node_manager,
219 std::shared_ptr<Vruta::TaskScheduler> task_scheduler,
220 std::shared_ptr<WindowManager> window_manager,
221 std::shared_ptr<InputManager> input_manager,
222 SubsystemTokens tokens)
223 : buffers(std::move(buffer_manager), tokens.Buffer)
224 , nodes(std::move(node_manager), tokens.Node)
225 , tasks(std::move(task_scheduler), tokens.Task)
226 , windows(std::move(window_manager))
227 , inputs(std::move(input_manager))
228 , m_tokens(tokens)
229{
230}
231
232}
Unified processing architecture for multimodal subsystem coordination.
std::span< double > write_channel_data(uint32_t channel)
Get write access to channel data with automatic locking.
std::span< const double > read_channel_data(uint32_t channel) const
Get read-only access to channel data.
void process_channel(uint32_t channel, uint32_t processing_units)
Process specific channel.
BufferProcessingHandle(std::shared_ptr< Buffers::BufferManager > manager, Buffers::ProcessingToken token)
Constructs handle for specific buffer manager and token.
void process(uint32_t processing_units)
Process all channels in token domain.
void setup_channels(uint32_t num_channels, uint32_t buffer_size)
Configure channel layout for token domain.
void process_channel_with_node_data(uint32_t channel, uint32_t processing_units, const std::vector< double > &node_data)
Process channel with node output data integration.
std::shared_ptr< Buffers::BufferManager > m_manager
void process_input(double *input_data, uint32_t num_channels, uint32_t num_frames)
@brienf Process Input from backend into buffer manager
InputManagerHandle(std::shared_ptr< InputManager > input_manager)
Constructs handle for specific InputManager.
void unregister()
unregister all nodes from InputManager
void enqueue_input(const InputValue &value)
enqueue input value to InputManager
std::shared_ptr< InputManager > m_input_manager
void process(uint32_t num_samples)
Process all nodes in token domain.
std::vector< double > process_channel(uint32_t channel, uint32_t num_samples)
Process nodes for specific channel and return output.
std::vector< std::vector< double > > process_audio_networks(uint32_t num_samples, uint32_t channel=0)
std::shared_ptr< Nodes::NodeGraphManager > m_manager
NodeProcessingHandle(std::shared_ptr< Nodes::NodeGraphManager > manager, Nodes::ProcessingToken token)
Constructs handle for specific node manager and token.
SubsystemProcessingHandle(std::shared_ptr< Buffers::BufferManager > buffer_manager, std::shared_ptr< Nodes::NodeGraphManager > node_manager, std::shared_ptr< Vruta::TaskScheduler > task_scheduler, std::shared_ptr< WindowManager > window_manager, std::shared_ptr< InputManager > input_manager, SubsystemTokens tokens)
void register_token_processor(Vruta::token_processing_func_t processor)
Register custom processing function for token domain.
void process_buffer_cycle()
Process all tasks scheduled for current buffer cycle.
TaskSchedulerHandle(std::shared_ptr< MayaFlux::Vruta::TaskScheduler > task_manager, MayaFlux::Vruta::ProcessingToken token)
std::shared_ptr< Vruta::TaskScheduler > m_scheduler
void process(uint64_t processing_units)
Process all tasks in token domain.
void process()
Process window events and frame hooks.
std::shared_ptr< Core::WindowManager > m_window_manager
std::vector< std::shared_ptr< Core::Window > > get_processing_windows() const
Get list of windows that are open and not minimized.
WindowManagerHandle(std::shared_ptr< Core::WindowManager > window_manager)
Constructs handle for specific window manager.
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ CoroutineScheduling
Coroutine scheduling and temporal coordination (Vruta::TaskScheduler)
@ Core
Core engine, backend, subsystems.
ProcessingToken
Enumerates the different processing domains for nodes.
std::function< void(const std::vector< std::shared_ptr< Routine > > &, uint64_t)> token_processing_func_t
Function type for processing tasks in a specific token domain.
Generic input value container.
Processing token configuration for subsystem operation.