From 3836768bb8b95188e6657ab69027d1d9e4b13a77 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Mon, 3 Apr 2023 14:06:30 +1000 Subject: new pipeline working(?), but the dac eludes me --- src/audio/audio_task.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/audio/audio_task.cpp') diff --git a/src/audio/audio_task.cpp b/src/audio/audio_task.cpp index e6c7778c..eb33611b 100644 --- a/src/audio/audio_task.cpp +++ b/src/audio/audio_task.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "audio_sink.hpp" #include "cbor.h" @@ -114,16 +115,29 @@ void AudioTaskMain(void* args) { 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.back()->OutStream(&out_region); + RawStream raw_sink_stream = elements.front()->OutStream(&out_region); InputStream sink_stream(&raw_sink_stream); - if (!output_format || output_format != sink_stream.info().format) { + if (sink_stream.data().size_bytes() == 0) { + out_region.Unmap(); + vTaskDelay(pdMS_TO_TICKS(100)); + continue; + } + + if ((!output_format || output_format != sink_stream.info().format) && + !std::holds_alternative( + sink_stream.info().format)) { // The format of the stream within the sink stream has changed. We // need to reconfigure the sink, but shouldn't do so until we've fully // drained the current buffer. if (xStreamBufferIsEmpty(sink->buffer())) { + ESP_LOGI(kTag, "reconfiguring dac"); output_format = sink_stream.info().format; sink->Configure(*output_format); } @@ -140,6 +154,8 @@ void AudioTaskMain(void* args) { sink_stream.data().size_bytes(), pdMS_TO_TICKS(10)); sink_stream.consume(sent); } + + out_region.Unmap(); } } } -- cgit v1.2.3