diff options
Diffstat (limited to 'src/audio/audio_task.cpp')
| -rw-r--r-- | src/audio/audio_task.cpp | 35 |
1 files changed, 3 insertions, 32 deletions
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> pipeline, IAudioSink* sink) { std::optional<StreamInfo::Format> output_format; std::vector<Pipeline*> 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<MappableRegion<kPipelineBufferSize>> in_regions(max_inputs); - MappableRegion<kPipelineBufferSize> 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<HimemAlloc<kPipelineBufferSize>> buffers(elements.size()); - std::vector<StreamInfo> buffer_infos(buffers.size()); - std::for_each(buffers.begin(), buffers.end(), - [](const HimemAlloc<kPipelineBufferSize>& alloc) { - assert(alloc.is_valid); - }); while (1) { for (int i = 0; i < elements.size(); i++) { std::vector<RawStream> 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> 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> pipeline, IAudioSink* sink) { } sink_stream.consume(sent); } - - out_region.Unmap(); } } |
