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

◆ process_route()

void MayaFlux::Kriya::BufferPipeline::process_route ( BufferOperation &  op)
private

Definition at line 146 of file BufferPipelineOperations.cpp.

147{
148 if (!op.m_source_images.empty()) {
149 uint32_t layer = 0;
150 for (const auto& image : op.m_source_images) {
151 detail::write_layer(op.m_target_graphics_buffer, layer++, image);
152 }
153 return;
154 }
155
156 if (op.m_source_graphics_buffer) {
157 auto frame = read_graphics_buffer(op, op.m_source_graphics_buffer);
158 if (!frame) {
159 return;
160 }
161
162 detail::write_to_container(op.m_target_graphics_stream, *frame);
163 m_operation_data[&op] = std::move(*frame);
164 return;
165 }
166
167 const auto selected = select_operation_data(m_operation_data, op, !m_readers.empty());
168 if (!selected) {
169 return;
170 }
171 const auto& data_to_route = *selected;
172
173 if (op.m_target_audio_buffer) {
174 if (!m_buffer_manager) {
175 error<std::invalid_argument>(Journal::Component::Kriya,
177 std::source_location::current(),
178 "BufferPipeline has no BufferManager for ROUTE-to-buffer operation");
179 }
180
181 if (!op.m_attached_processor) {
182 auto writer = std::make_shared<Buffers::AudioWriteProcessor>();
183 m_buffer_manager->add_processor(writer, op.m_target_audio_buffer,
185 op.m_attached_processor = writer;
186 }
187
188 std::static_pointer_cast<Buffers::AudioWriteProcessor>(op.m_attached_processor)
189 ->set_data(data_to_route);
190
191 } else if (op.m_target_graphics_buffer) {
192 queue_graphics_write(op, op.m_target_graphics_buffer, data_to_route);
193
194 } else if (op.m_target_audio_stream) {
195 detail::write_to_container(op.m_target_audio_stream, data_to_route, op.m_target_audio_channel);
196
197 } else if (op.m_target_graphics_stream) {
198 detail::write_to_container(op.m_target_graphics_stream, data_to_route);
199 }
200}
IO::ImageData image
Definition Decoder.cpp:47
std::unordered_map< BufferOperation *, Kakshya::DataVariant > m_operation_data
void queue_graphics_write(BufferOperation &op, const std::shared_ptr< Buffers::VKBuffer > &target, const Kakshya::DataVariant &data)
std::map< std::pair< const BufferOperation *, const Buffers::VKBuffer * >, GraphicsReader > m_readers
std::optional< Kakshya::DataVariant > read_graphics_buffer(BufferOperation &op, const std::shared_ptr< Buffers::VKBuffer > &buffer)
std::shared_ptr< Buffers::BufferManager > m_buffer_manager
@ AUDIO_BACKEND
Standard audio processing backend configuration.
@ CoroutineScheduling
Coroutine scheduling and temporal coordination (Vruta::TaskScheduler)
@ Kriya
Automatable tasks and fluent scheduling api for Nodes and Buffers.
void write_layer(const std::shared_ptr< Buffers::VKBuffer > &target, uint32_t layer, const Kakshya::DataVariant &data)
Write a DataVariant into one layer of a layered buffer.
void write_to_container(const std::shared_ptr< Kakshya::DynamicSoundStream > &container, const Kakshya::DataVariant &data, uint32_t channel)

References MayaFlux::Buffers::AUDIO_BACKEND, MayaFlux::Journal::CoroutineScheduling, image, MayaFlux::Journal::Kriya, MayaFlux::Kriya::BufferOperation::m_attached_processor, m_buffer_manager, m_operation_data, m_readers, MayaFlux::Kriya::BufferOperation::m_source_graphics_buffer, MayaFlux::Kriya::BufferOperation::m_source_images, MayaFlux::Kriya::BufferOperation::m_target_audio_buffer, MayaFlux::Kriya::BufferOperation::m_target_audio_channel, MayaFlux::Kriya::BufferOperation::m_target_audio_stream, MayaFlux::Kriya::BufferOperation::m_target_graphics_buffer, MayaFlux::Kriya::BufferOperation::m_target_graphics_stream, queue_graphics_write(), read_graphics_buffer(), MayaFlux::Kriya::detail::write_layer(), and MayaFlux::Kriya::detail::write_to_container().

Referenced by process_operation().

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