summaryrefslogtreecommitdiff
path: root/src/audio/include/stream_info.hpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2022-11-22 17:05:02 +1100
committerjacqueline <me@jacqueline.id.au>2022-11-22 17:05:02 +1100
commit9176ef187227ffb56c249c5f321cd1bf50d4cfcc (patch)
treea846c8fc4e5788e97d6fca43c2807c4bf0ae0214 /src/audio/include/stream_info.hpp
parent9f8cfaa7a8abd885785830e03d7c417e856b8a22 (diff)
downloadtangara-fw-9176ef187227ffb56c249c5f321cd1bf50d4cfcc.tar.gz
Add cbor wrapper, and chunk streaming util
Diffstat (limited to 'src/audio/include/stream_info.hpp')
-rw-r--r--src/audio/include/stream_info.hpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/audio/include/stream_info.hpp b/src/audio/include/stream_info.hpp
new file mode 100644
index 00000000..2b1429ea
--- /dev/null
+++ b/src/audio/include/stream_info.hpp
@@ -0,0 +1,44 @@
+#pragma once
+
+#include <cstdint>
+#include <optional>
+#include <string>
+#include "esp-idf/components/cbor/tinycbor/src/cbor.h"
+#include "result.hpp"
+
+namespace audio {
+
+class StreamInfo {
+ public:
+ enum ParseError {
+ WRONG_TYPE,
+ MISSING_MAP,
+ };
+
+ static auto Create(const uint8_t *buffer, size_t length) -> cpp::result<StreamInfo, ParseError>;
+ StreamInfo(CborValue& map);
+
+ StreamInfo() = default;
+ StreamInfo(const StreamInfo&) = default;
+
+ ~StreamInfo() = default;
+
+ auto Path() const -> const std::optional<std::string>& { return path_; }
+ auto Channels() const -> const std::optional<uint8_t>& { return channels_; }
+ auto BitsPerSample() const -> const std::optional<uint8_t>& { return bits_per_sample_; }
+ auto SampleRate() const -> const std::optional<uint16_t>& { return sample_rate_; }
+
+ enum EncodeError {
+ OUT_OF_MEMORY,
+ };
+
+ auto WriteToStream(CborEncoder encoder) -> cpp::result<void, EncodeError>;
+ private:
+
+ std::optional<std::string> path_;
+ std::optional<uint8_t> channels_;
+ std::optional<uint8_t> bits_per_sample_;
+ std::optional<uint16_t> sample_rate_;
+};
+
+} // namespace audio