/* * Copyright 2023 jacqueline * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include #include #include #include "freertos/portmacro.h" #include "audio_element.hpp" #include "stream_info.hpp" namespace audio { static const std::size_t kPipelineBufferSize = 64 * 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*) -> void; auto OutStream() -> RawStream; auto GetIterationOrder() -> std::vector; private: IAudioElement* root_; std::vector> subtrees_; std::array output_buffer_; StreamInfo output_info_; }; } // namespace audio