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

◆ process_fuse()

void MayaFlux::Kriya::BufferPipeline::process_fuse ( BufferOperation &  op,
uint64_t  cycle 
)
private

Definition at line 217 of file BufferPipelineOperations.cpp.

218{
219 std::vector<Kakshya::DataVariant> fusion_inputs;
220
221 for (auto& source_buffer : op.m_source_audio_buffers) {
222 bool should_process = op.m_capture.get_processing_control() == BufferCapture::ProcessingControl::ON_CAPTURE;
223 auto buffer_data = detail::extract_buffer_data(source_buffer, should_process);
224 fusion_inputs.push_back(buffer_data);
225 }
226
227 for (auto& source_container : op.m_source_audio_streams) {
228 auto container_data = detail::read_from_container(source_container, 0, 0);
229 fusion_inputs.push_back(container_data);
230 }
231
232 bool graphics_ready = true;
233 for (auto& source_buffer : op.m_source_graphics_buffers) {
234 if (auto buffer_data = read_graphics_buffer(op, source_buffer)) {
235 fusion_inputs.push_back(std::move(*buffer_data));
236 } else {
237 graphics_ready = false;
238 }
239 }
240
241 if (!graphics_ready) {
242 return;
243 }
244
245 for (auto& source_container : op.m_source_graphics_streams) {
246 fusion_inputs.push_back(detail::read_from_container(source_container, 0, 0));
247 }
248
249 if (op.m_fusion_function && !fusion_inputs.empty()) {
250 auto fused_data = op.m_fusion_function(fusion_inputs, cycle);
251
252 if (op.m_target_audio_buffer) {
253 detail::write_to_buffer(op.m_target_audio_buffer, fused_data);
254 } else if (op.m_target_graphics_buffer) {
255 queue_graphics_write(op, op.m_target_graphics_buffer, fused_data);
256 } else if (op.m_target_audio_stream) {
257 detail::write_to_container(op.m_target_audio_stream, fused_data, op.m_target_audio_channel);
258 } else if (op.m_target_graphics_stream) {
259 detail::write_to_container(op.m_target_graphics_stream, fused_data);
260 }
261
262 m_operation_data[&op] = fused_data;
263 }
264}
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::optional< Kakshya::DataVariant > read_graphics_buffer(BufferOperation &op, const std::shared_ptr< Buffers::VKBuffer > &buffer)
Kakshya::DataVariant read_from_container(const std::shared_ptr< Kakshya::DynamicSoundStream > &container, uint64_t, uint32_t length)
void write_to_buffer(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const Kakshya::DataVariant &data)
Kakshya::DataVariant extract_buffer_data(const std::shared_ptr< Buffers::AudioBuffer > &buffer, bool should_process)
void write_to_container(const std::shared_ptr< Kakshya::DynamicSoundStream > &container, const Kakshya::DataVariant &data, uint32_t channel)

References MayaFlux::Kriya::detail::extract_buffer_data(), MayaFlux::Kriya::BufferCapture::get_processing_control(), MayaFlux::Kriya::BufferOperation::m_capture, MayaFlux::Kriya::BufferOperation::m_fusion_function, m_operation_data, MayaFlux::Kriya::BufferOperation::m_source_audio_buffers, MayaFlux::Kriya::BufferOperation::m_source_audio_streams, MayaFlux::Kriya::BufferOperation::m_source_graphics_buffers, MayaFlux::Kriya::BufferOperation::m_source_graphics_streams, 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, MayaFlux::Kriya::BufferCapture::ON_CAPTURE, queue_graphics_write(), MayaFlux::Kriya::detail::read_from_container(), read_graphics_buffer(), MayaFlux::Kriya::detail::write_to_buffer(), 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: