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

◆ process_transform()

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

Definition at line 98 of file BufferPipelineOperations.cpp.

99{
100 auto selected = select_operation_data(m_operation_data, op, !m_readers.empty());
101 if (!selected) {
102 return;
103 }
104 auto input_data = std::move(*selected);
105
106 if (op.m_transformer) {
107 auto transformed = op.m_transformer(input_data, cycle);
108 m_operation_data[&op] = transformed;
109
110 const bool has_downstream_route = std::ranges::any_of(
112 [](const BufferOperation& o) {
113 return o.get_type() == BufferOperation::OpType::ROUTE;
114 });
115
116 if (!has_downstream_route) {
117 for (auto& candidate : std::ranges::reverse_view(m_operations)) {
118 if (&candidate == &op)
119 continue;
120 if (candidate.get_type() != BufferOperation::OpType::CAPTURE) {
121 continue;
122 }
123
124 if (const auto buf = candidate.m_capture.get_audio_buffer()) {
125 if (std::holds_alternative<std::vector<double>>(transformed)
126 && std::get<std::vector<double>>(transformed).size() == buf->get_data().size()) {
127 detail::write_to_buffer(buf, transformed);
128 }
129 break;
130 }
131
132 if (const auto target = candidate.m_capture.get_graphics_buffer()) {
133 const auto captured = m_operation_data.find(&candidate);
134 if (captured != m_operation_data.end()
136 && same_extent(captured->second, transformed)) {
137 queue_graphics_write(op, target, transformed);
138 }
139 break;
140 }
141 }
142 }
143 }
144}
bool size
@ ROUTE
Route data to destination (buffer or container)
@ CAPTURE
Capture data from source buffer using BufferCapture strategy.
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::vector< BufferOperation > m_operations
void write_to_buffer(const std::shared_ptr< Buffers::AudioBuffer > &buffer, const Kakshya::DataVariant &data)
bool accepts_raw_write(const std::shared_ptr< Buffers::VKBuffer > &buffer)
Whether a DataVariant can be written to the buffer's primary storage.

References MayaFlux::Kriya::detail::accepts_raw_write(), MayaFlux::Kriya::BufferOperation::CAPTURE, MayaFlux::Kriya::BufferOperation::get_type(), m_operation_data, m_operations, m_readers, MayaFlux::Kriya::BufferOperation::m_transformer, queue_graphics_write(), MayaFlux::Kriya::BufferOperation::ROUTE, size, and MayaFlux::Kriya::detail::write_to_buffer().

Referenced by process_operation().

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