MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
ProcessingArchitecture.cpp
Go to the documentation of this file.
2
5
8
10
11namespace MayaFlux::Core {
12
14 std::shared_ptr<Buffers::BufferManager> manager,
16 : m_manager(std::move(manager))
17 , m_token(token)
18 , m_locked(false)
19{
20}
21
23{
24 if (!m_manager) {
26 std::source_location::current(),
27 "Invalid buffer processing handle: BufferManager is null");
28 }
29}
30
32{
33 if (!m_locked) {
34 m_locked = true;
35 }
36}
37
38void BufferProcessingHandle::process(uint32_t processing_units)
39{
41 m_manager->process_token(m_token, processing_units);
42}
43
44void BufferProcessingHandle::process_channel(uint32_t channel, uint32_t processing_units)
45{
47 m_manager->process_channel(m_token, channel, processing_units);
48}
49
51 uint32_t channel,
52 uint32_t processing_units,
53 const std::vector<double>& node_data)
54{
56 m_manager->process_channel(m_token, channel, processing_units, node_data);
57}
58
59void BufferProcessingHandle::process_input(double* input_data, uint32_t num_channels, uint32_t num_frames)
60{
61 m_manager->process_input(input_data, num_channels, num_frames);
62}
63
64std::span<const double> BufferProcessingHandle::read_channel_data(uint32_t channel) const
65{
67 return m_manager->get_buffer_data(m_token, channel);
68}
69
70std::span<double> BufferProcessingHandle::write_channel_data(uint32_t channel)
71{
74 return m_manager->get_buffer_data(m_token, channel);
75}
76
77void BufferProcessingHandle::setup_channels(uint32_t num_channels, uint32_t buffer_size)
78{
80 m_manager->validate_num_channels(m_token, num_channels, buffer_size);
81}
82
84 std::shared_ptr<Nodes::NodeGraphManager> manager,
86 : m_manager(std::move(manager))
87 , m_token(token)
88{
89}
90
91void NodeProcessingHandle::process(uint32_t num_samples)
92{
93 m_manager->process_token(m_token, num_samples);
94}
95
96std::vector<double> NodeProcessingHandle::process_channel(uint32_t channel, uint32_t num_samples)
97{
98 return m_manager->process_channel(m_token, channel, num_samples);
99}
100
102{
103 return m_manager->process_sample(m_token, channel);
104}
105
106std::vector<std::vector<double>> NodeProcessingHandle::process_audio_networks(uint32_t num_samples, uint32_t channel)
107{
108 return m_manager->process_audio_networks(m_token, num_samples, channel);
109}
110
112 std::shared_ptr<Vruta::TaskScheduler> task_manager,
114 : m_scheduler(std::move(task_manager))
115 , m_token(token)
116{
117 if (!m_scheduler) {
119 std::source_location::current(),
120 "TaskSchedulerHandle requires valid TaskScheduler");
121 }
122}
123
125{
126 m_scheduler->register_token_processor(m_token, std::move(processor));
127}
128
129void TaskSchedulerHandle::process(uint64_t processing_units)
130{
131 m_scheduler->process_token(m_token, processing_units);
132}
133
135{
136 m_scheduler->process_buffer_cycle_tasks();
137}
138
139WindowManagerHandle::WindowManagerHandle(std::shared_ptr<Core::WindowManager> window_manager)
140 : m_window_manager(std::move(window_manager))
141{
142}
143
145{
146 if (m_window_manager) {
147 m_window_manager->process();
148 }
149}
150
151std::vector<std::shared_ptr<Core::Window>> WindowManagerHandle::get_processing_windows() const
152{
153 if (m_window_manager) {
154 return m_window_manager->get_processing_windows();
155 }
156 return {};
157}
158
160 std::shared_ptr<Buffers::BufferManager> buffer_manager,
161 std::shared_ptr<Nodes::NodeGraphManager> node_manager,
162 std::shared_ptr<Vruta::TaskScheduler> task_scheduler,
163 SubsystemTokens tokens)
164 : buffers(std::move(buffer_manager), tokens.Buffer)
165 , nodes(std::move(node_manager), tokens.Node)
166 , tasks(std::move(task_scheduler), tokens.Task)
167 , windows(nullptr)
168 , m_tokens(tokens)
169{
170}
171
173 std::shared_ptr<Buffers::BufferManager> buffer_manager,
174 std::shared_ptr<Nodes::NodeGraphManager> node_manager,
175 std::shared_ptr<Vruta::TaskScheduler> task_scheduler,
176 std::shared_ptr<Core::WindowManager> window_manager,
177 SubsystemTokens tokens)
178 : buffers(std::move(buffer_manager), tokens.Buffer)
179 , nodes(std::move(node_manager), tokens.Node)
180 , tasks(std::move(task_scheduler), tokens.Task)
181 , windows(std::move(window_manager))
182 , m_tokens(tokens)
183{
184}
185
186}
Unified processing architecture for multimodal subsystem coordination.
static MayaFlux::Nodes::ProcessingToken token
Definition Timers.cpp:8
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
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, SubsystemTokens tokens)
Constructs unified handle with buffer and node managers.
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.
Processing token configuration for subsystem operation.