summaryrefslogtreecommitdiff
path: root/src/audio/include
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/include
parent7c6fd654f50e6665efa4226c6b927f9762734182 (diff)
downloadtangara-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.hpp1
-rw-r--r--src/audio/include/i2s_audio_output.hpp1
-rw-r--r--src/audio/include/stream_info.hpp13
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) {