diff options
| author | jacqueline <me@jacqueline.id.au> | 2022-11-22 17:05:02 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2022-11-22 17:05:02 +1100 |
| commit | 9176ef187227ffb56c249c5f321cd1bf50d4cfcc (patch) | |
| tree | a846c8fc4e5788e97d6fca43c2807c4bf0ae0214 /src/audio/include/stream_info.hpp | |
| parent | 9f8cfaa7a8abd885785830e03d7c417e856b8a22 (diff) | |
| download | tangara-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.hpp | 44 |
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 |
