From 7c6fd654f50e6665efa4226c6b927f9762734182 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Sat, 1 Apr 2023 13:22:21 +1100 Subject: New pipeline building, still needs proper control --- src/audio/audio_playback.cpp | 48 +++++++++++--------------------------------- 1 file changed, 12 insertions(+), 36 deletions(-) (limited to 'src/audio/audio_playback.cpp') diff --git a/src/audio/audio_playback.cpp b/src/audio/audio_playback.cpp index 613f629c..89139ec4 100644 --- a/src/audio/audio_playback.cpp +++ b/src/audio/audio_playback.cpp @@ -8,6 +8,7 @@ #include "freertos/portmacro.h" #include "audio_decoder.hpp" +#include "audio_element.hpp" #include "audio_task.hpp" #include "chunk.hpp" #include "fatfs_audio_input.hpp" @@ -23,55 +24,30 @@ namespace audio { auto AudioPlayback::create(drivers::GpioExpander* expander) -> cpp::result, Error> { - // Create everything - auto source = std::make_shared(); - auto codec = std::make_shared(); - auto sink_res = I2SAudioOutput::create(expander); if (sink_res.has_error()) { return cpp::fail(ERR_INIT_ELEMENT); } - auto sink = sink_res.value(); - - auto playback = std::make_unique(); - - Pipeline *pipeline = new Pipeline(sink.get()); - pipeline->AddInput(codec.get())->AddInput(source.get()); - - task::Start(pipeline); - - return playback; + return std::make_unique(std::move(sink_res.value())); } -AudioPlayback::AudioPlayback() { - // Create everything - auto source = std::make_shared(); - auto codec = std::make_shared(); +AudioPlayback::AudioPlayback(std::unique_ptr output) + : file_source_(), i2s_output_(std::move(output)) { + AudioDecoder* codec = new AudioDecoder(); + elements_.emplace_back(codec); - auto sink_res = I2SAudioOutput::create(expander); - if (sink_res.has_error()) { - return cpp::fail(ERR_INIT_ELEMENT); - } - auto sink = sink_res.value(); - - auto playback = std::make_unique(); + Pipeline* pipeline = new Pipeline(elements_.front().get()); + pipeline->AddInput(file_source_.get()); - Pipeline *pipeline = new Pipeline(sink.get()); - pipeline->AddInput(codec.get())->AddInput(source.get()); - - task::Start(pipeline); - - return playback; + task::StartPipeline(pipeline, i2s_output_.get()); + task::StartDrain(i2s_output_.get()); } -AudioPlayback::~AudioPlayback() { - pipeline_->Quit(); -} +AudioPlayback::~AudioPlayback() {} auto AudioPlayback::Play(const std::string& filename) -> void { // TODO: concurrency, yo! - file_source->OpenFile(filename); - pipeline_->Play(); + file_source_->OpenFile(filename); } auto AudioPlayback::LogStatus() -> void { -- cgit v1.2.3