summaryrefslogtreecommitdiff
path: root/src/audio/include/i2s_audio_output.hpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-02-10 15:32:21 +1100
committerjacqueline <me@jacqueline.id.au>2023-02-10 15:32:21 +1100
commit61c91b3cdb2c9dd655f3adf0f461f5cefb3b2e9b (patch)
tree8d0bb288781f86455f02219d0b7ac8cee493eeb3 /src/audio/include/i2s_audio_output.hpp
parentcabfd4b75ecc733bdf36997606a686c4d2bc277d (diff)
downloadtangara-fw-61c91b3cdb2c9dd655f3adf0f461f5cefb3b2e9b.tar.gz
Mostly working pipeline, including proper EOF signalling
Diffstat (limited to 'src/audio/include/i2s_audio_output.hpp')
-rw-r--r--src/audio/include/i2s_audio_output.hpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/audio/include/i2s_audio_output.hpp b/src/audio/include/i2s_audio_output.hpp
index 02ac7a16..b4fd4c59 100644
--- a/src/audio/include/i2s_audio_output.hpp
+++ b/src/audio/include/i2s_audio_output.hpp
@@ -4,6 +4,7 @@
#include <memory>
#include "audio_element.hpp"
+#include "chunk.hpp"
#include "result.hpp"
#include "dac.hpp"
@@ -21,13 +22,13 @@ class I2SAudioOutput : public IAudioElement {
std::unique_ptr<drivers::AudioDac> dac);
~I2SAudioOutput();
- // TODO.
- auto HasUnprocessedInput() -> bool override { return false; }
+ auto HasUnprocessedInput() -> bool override;
auto ProcessStreamInfo(const StreamInfo& info)
-> cpp::result<void, AudioProcessingError> override;
auto ProcessChunk(const cpp::span<std::byte>& chunk)
-> cpp::result<std::size_t, AudioProcessingError> override;
+ auto ProcessEndOfStream() -> void override;
auto Process() -> cpp::result<void, AudioProcessingError> override;
I2SAudioOutput(const I2SAudioOutput&) = delete;
@@ -37,11 +38,18 @@ class I2SAudioOutput : public IAudioElement {
auto SetVolume(uint8_t volume) -> void;
auto SetSoftMute(bool enabled) -> void;
+ auto ClearDmaQueue() -> void;
+
drivers::GpioExpander* expander_;
std::unique_ptr<drivers::AudioDac> dac_;
uint8_t volume_;
bool is_soft_muted_;
+
+ std::optional<ChunkReader> chunk_reader_;
+ cpp::span<std::byte> latest_chunk_;
+ std::optional<std::size_t> dma_size_;
+ QueueHandle_t dma_queue_;
};
} // namespace audio