summaryrefslogtreecommitdiff
path: root/src/audio/audio_task.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-05-23 09:12:26 +1000
committerjacqueline <me@jacqueline.id.au>2023-05-23 09:13:22 +1000
commit4bff06c76c223a156a14adc478ab1a9b083fd7b2 (patch)
tree107eec046f70ecbdc6a942fc714b9f68f0b0b23d /src/audio/audio_task.cpp
parentecee01fe97422c65e2b01979742d01ece31bc28d (diff)
downloadtangara-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.cpp35
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();
}
}