diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-04-03 14:06:30 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-04-19 10:29:40 +1000 |
| commit | 3836768bb8b95188e6657ab69027d1d9e4b13a77 (patch) | |
| tree | e4330202da1375a6f49d959a7b839643adccd3ca /src/audio/include | |
| parent | 7c6fd654f50e6665efa4226c6b927f9762734182 (diff) | |
| download | tangara-fw-3836768bb8b95188e6657ab69027d1d9e4b13a77.tar.gz | |
new pipeline working(?), but the dac eludes me
Diffstat (limited to 'src/audio/include')
| -rw-r--r-- | src/audio/include/audio_sink.hpp | 1 | ||||
| -rw-r--r-- | src/audio/include/i2s_audio_output.hpp | 1 | ||||
| -rw-r--r-- | src/audio/include/stream_info.hpp | 13 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/audio/include/audio_sink.hpp b/src/audio/include/audio_sink.hpp index ed7eb02b..ad63ec2e 100644 --- a/src/audio/include/audio_sink.hpp +++ b/src/audio/include/audio_sink.hpp @@ -15,6 +15,7 @@ class IAudioSink { virtual auto Configure(const StreamInfo::Format& format) -> bool = 0; virtual auto Send(const cpp::span<std::byte>& data) -> void = 0; + virtual auto Log() -> void {} auto buffer() const -> StreamBufferHandle_t { return buffer_; } }; diff --git a/src/audio/include/i2s_audio_output.hpp b/src/audio/include/i2s_audio_output.hpp index 77019228..31510a91 100644 --- a/src/audio/include/i2s_audio_output.hpp +++ b/src/audio/include/i2s_audio_output.hpp @@ -27,6 +27,7 @@ class I2SAudioOutput : public IAudioSink { auto Configure(const StreamInfo::Format& format) -> bool override; auto Send(const cpp::span<std::byte>& data) -> void override; + auto Log() -> void override; I2SAudioOutput(const I2SAudioOutput&) = delete; I2SAudioOutput& operator=(const I2SAudioOutput&) = delete; diff --git a/src/audio/include/stream_info.hpp b/src/audio/include/stream_info.hpp index 5622517f..5a36384c 100644 --- a/src/audio/include/stream_info.hpp +++ b/src/audio/include/stream_info.hpp @@ -17,12 +17,12 @@ namespace audio { struct StreamInfo { // The number of bytes that are available for consumption within this // stream's buffer. - std::size_t bytes_in_stream; + std::size_t bytes_in_stream{0}; // The total length of this stream, in case its source is finite (e.g. a // file on disk). May be absent for endless streams (internet streams, // generated audio, etc.) - std::optional<std::size_t> length_bytes; + std::optional<std::size_t> length_bytes{}; struct Encoded { // The codec that this stream is associated with. @@ -42,8 +42,8 @@ struct StreamInfo { bool operator==(const Pcm&) const = default; }; - typedef std::variant<Encoded, Pcm> Format; - Format format; + typedef std::variant<std::monostate, Encoded, Pcm> Format; + Format format{}; bool operator==(const StreamInfo&) const = default; }; @@ -91,8 +91,11 @@ class OutputStream { void add(std::size_t bytes) const { raw_->info->bytes_in_stream += bytes; } bool prepare(const StreamInfo::Format& new_format) { - if (new_format == raw_->info->format) { + if (std::holds_alternative<std::monostate>(raw_->info->format)) { raw_->info->format = new_format; + raw_->info->bytes_in_stream = 0; + } + if (new_format == raw_->info->format) { return true; } if (raw_->is_incomplete) { |
