diff --git a/src/audio/audio_task.cpp b/src/audio/audio_task.cpp index 2309a5e5..390e3d2d 100644 --- a/src/audio/audio_task.cpp +++ b/src/audio/audio_task.cpp @@ -40,34 +40,12 @@ void AudioTaskMain(std::unique_ptr pipeline, IAudioSink* sink) { std::optional output_format; std::vector elements = pipeline->GetIterationOrder(); - std::size_t max_inputs = - (*std::max_element(elements.begin(), elements.end(), - [](Pipeline const* first, Pipeline const* second) { - return first->NumInputs() < second->NumInputs(); - })) - ->NumInputs(); - - // We need to be able to simultaneously map all of an element's inputs, plus - // its output. So preallocate that many ranges. - std::vector> in_regions(max_inputs); - MappableRegion out_region; - std::for_each(in_regions.begin(), in_regions.end(), - [](const auto& region) { assert(region.is_valid); }); - assert(out_region.is_valid); - - // Each element has exactly one output buffer. - std::vector> buffers(elements.size()); - std::vector buffer_infos(buffers.size()); - std::for_each(buffers.begin(), buffers.end(), - [](const HimemAlloc& alloc) { - assert(alloc.is_valid); - }); while (1) { for (int i = 0; i < elements.size(); i++) { std::vector raw_in_streams; - elements.at(i)->InStreams(&in_regions, &raw_in_streams); - RawStream raw_out_stream = elements.at(i)->OutStream(&out_region); + elements.at(i)->InStreams(&raw_in_streams); + RawStream raw_out_stream = elements.at(i)->OutStream(); // Crop the input and output streams to the ranges that are safe to // touch. For the input streams, this is the region that contains @@ -79,17 +57,12 @@ void AudioTaskMain(std::unique_ptr pipeline, IAudioSink* sink) { OutputStream out_stream(&raw_out_stream); elements.at(i)->OutputElement()->Process(in_streams, &out_stream); - - std::for_each(in_regions.begin(), in_regions.end(), - [](auto&& r) { r.Unmap(); }); - out_region.Unmap(); } - RawStream raw_sink_stream = elements.front()->OutStream(&out_region); + RawStream raw_sink_stream = elements.front()->OutStream(); InputStream sink_stream(&raw_sink_stream); if (sink_stream.info().bytes_in_stream == 0) { - out_region.Unmap(); vTaskDelay(pdMS_TO_TICKS(100)); continue; } @@ -121,8 +94,6 @@ void AudioTaskMain(std::unique_ptr pipeline, IAudioSink* sink) { } sink_stream.consume(sent); } - - out_region.Unmap(); } } diff --git a/src/audio/include/pipeline.hpp b/src/audio/include/pipeline.hpp index 7a658a38..1fa7da83 100644 --- a/src/audio/include/pipeline.hpp +++ b/src/audio/include/pipeline.hpp @@ -8,7 +8,6 @@ #include "freertos/portmacro.h" #include "audio_element.hpp" -#include "himem.hpp" #include "stream_info.hpp" namespace audio { @@ -25,10 +24,9 @@ class Pipeline { auto NumInputs() const -> std::size_t; - auto InStreams(std::vector>*, - std::vector*) -> void; + auto InStreams(std::vector*) -> void; - auto OutStream(MappableRegion*) -> RawStream; + auto OutStream() -> RawStream; auto GetIterationOrder() -> std::vector; @@ -36,7 +34,7 @@ class Pipeline { IAudioElement* root_; std::vector> subtrees_; - HimemAlloc output_buffer_; + std::array output_buffer_; StreamInfo output_info_; }; diff --git a/src/audio/pipeline.cpp b/src/audio/pipeline.cpp index bab2f3ff..270622cf 100644 --- a/src/audio/pipeline.cpp +++ b/src/audio/pipeline.cpp @@ -23,18 +23,14 @@ auto Pipeline::NumInputs() const -> std::size_t { return subtrees_.size(); } -auto Pipeline::InStreams( - std::vector>* regions, - std::vector* out) -> void { +auto Pipeline::InStreams(std::vector* out) -> void { for (int i = 0; i < subtrees_.size(); i++) { - RawStream s = subtrees_[i]->OutStream(®ions->at(i)); - out->push_back(s); + out->push_back(subtrees_[i]->OutStream()); } } -auto Pipeline::OutStream(MappableRegion* region) - -> RawStream { - return {&output_info_, region->Map(output_buffer_)}; +auto Pipeline::OutStream() -> RawStream { + return {&output_info_, output_buffer_}; } auto Pipeline::GetIterationOrder() -> std::vector {