diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-04-26 08:49:02 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-04-26 08:49:02 +1000 |
| commit | 7972bd4567a99179338259e9e6ce19168c2c0db3 (patch) | |
| tree | f46642afd36011d3d064e022232e77744b82c6ae /src/audio/pipeline.cpp | |
| parent | 4887f3789817f87bf1272af0b52684e3364270c2 (diff) | |
| parent | 5575378c1c8171cd716b79d3ab89df1e56ceb9d3 (diff) | |
| download | tangara-fw-7972bd4567a99179338259e9e6ce19168c2c0db3.tar.gz | |
Merge branch 'main' into leveldb
Diffstat (limited to 'src/audio/pipeline.cpp')
| -rw-r--r-- | src/audio/pipeline.cpp | 57 |
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(®ions->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 |
