summaryrefslogtreecommitdiff
path: root/src/audio/pipeline.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-04-26 08:49:02 +1000
committerjacqueline <me@jacqueline.id.au>2023-04-26 08:49:02 +1000
commit7972bd4567a99179338259e9e6ce19168c2c0db3 (patch)
treef46642afd36011d3d064e022232e77744b82c6ae /src/audio/pipeline.cpp
parent4887f3789817f87bf1272af0b52684e3364270c2 (diff)
parent5575378c1c8171cd716b79d3ab89df1e56ceb9d3 (diff)
downloadtangara-fw-7972bd4567a99179338259e9e6ce19168c2c0db3.tar.gz
Merge branch 'main' into leveldb
Diffstat (limited to 'src/audio/pipeline.cpp')
-rw-r--r--src/audio/pipeline.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/audio/pipeline.cpp b/src/audio/pipeline.cpp
new file mode 100644
index 00000000..bab2f3ff
--- /dev/null
+++ b/src/audio/pipeline.cpp
@@ -0,0 +1,57 @@
+#include "pipeline.hpp"
+#include <memory>
+#include "stream_info.hpp"
+
+namespace audio {
+
+Pipeline::Pipeline(IAudioElement* output) : root_(output), subtrees_() {
+ assert(output != nullptr);
+}
+
+Pipeline::~Pipeline() {}
+
+auto Pipeline::AddInput(IAudioElement* input) -> Pipeline* {
+ subtrees_.push_back(std::make_unique<Pipeline>(input));
+ return subtrees_.back().get();
+}
+
+auto Pipeline::OutputElement() const -> IAudioElement* {
+ return root_;
+}
+
+auto Pipeline::NumInputs() const -> std::size_t {
+ return subtrees_.size();
+}
+
+auto Pipeline::InStreams(
+ std::vector<MappableRegion<kPipelineBufferSize>>* regions,
+ std::vector<RawStream>* out) -> void {
+ for (int i = 0; i < subtrees_.size(); i++) {
+ RawStream s = subtrees_[i]->OutStream(&regions->at(i));
+ out->push_back(s);
+ }
+}
+
+auto Pipeline::OutStream(MappableRegion<kPipelineBufferSize>* region)
+ -> RawStream {
+ return {&output_info_, region->Map(output_buffer_)};
+}
+
+auto Pipeline::GetIterationOrder() -> std::vector<Pipeline*> {
+ std::vector<Pipeline*> to_search{this};
+ std::vector<Pipeline*> found;
+
+ while (!to_search.empty()) {
+ Pipeline* current = to_search.back();
+ to_search.pop_back();
+ found.push_back(current);
+
+ for (const auto& i : current->subtrees_) {
+ to_search.push_back(i.get());
+ }
+ }
+
+ return found;
+}
+
+} // namespace audio