diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-05-23 09:12:26 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-05-23 09:13:22 +1000 |
| commit | 4bff06c76c223a156a14adc478ab1a9b083fd7b2 (patch) | |
| tree | 107eec046f70ecbdc6a942fc714b9f68f0b0b23d /src/audio/audio_task.cpp | |
| parent | ecee01fe97422c65e2b01979742d01ece31bc28d (diff) | |
| download | tangara-fw-4bff06c76c223a156a14adc478ab1a9b083fd7b2.tar.gz | |
Drop himem audio buffers (for now?)
For some reason the spinlocks required now block forever? Very odd.
On the plus side, this turned out to be the issue that was stopping the
audio pipeline from running on the app core.
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(); } } |
