#pragma once #include #include #include #include #include "freertos/portmacro.h" #include "audio_element.hpp" #include "himem.hpp" #include "stream_info.hpp" namespace audio { static const std::size_t kPipelineBufferSize = 32 * 1024; class Pipeline { public: explicit Pipeline(IAudioElement* output); ~Pipeline(); auto AddInput(IAudioElement* input) -> Pipeline*; auto OutputElement() const -> IAudioElement*; auto NumInputs() const -> std::size_t; auto InStreams(std::vector>*, std::vector*) -> void; auto OutStream(MappableRegion*) -> RawStream; auto GetIterationOrder() -> std::vector; private: IAudioElement* root_; std::vector> subtrees_; HimemAlloc output_buffer_; StreamInfo output_info_; }; } // namespace audio