summaryrefslogtreecommitdiff
path: root/src/audio/audio_task.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-04-03 14:06:30 +1000
committerjacqueline <me@jacqueline.id.au>2023-04-19 10:29:40 +1000
commit3836768bb8b95188e6657ab69027d1d9e4b13a77 (patch)
treee4330202da1375a6f49d959a7b839643adccd3ca /src/audio/audio_task.cpp
parent7c6fd654f50e6665efa4226c6b927f9762734182 (diff)
downloadtangara-fw-3836768bb8b95188e6657ab69027d1d9e4b13a77.tar.gz
new pipeline working(?), but the dac eludes me
Diffstat (limited to 'src/audio/audio_task.cpp')
-rw-r--r--src/audio/audio_task.cpp20
1 files changed, 18 insertions, 2 deletions
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 <cstdint>
#include <deque>
#include <memory>
+#include <variant>
#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<std::monostate>(
+ 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();
}
}
}