summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-04-20 11:25:43 +1000
committerjacqueline <me@jacqueline.id.au>2023-04-20 11:25:43 +1000
commit731b2cfa77a063e98da8fa26acc1e7ed1de8c169 (patch)
tree13a8cca13f2e6ea665a87cc0f1c036de7c326d60 /src/audio/include
parent4c77950e702a329f3136456a932efbea36e03d42 (diff)
downloadtangara-fw-731b2cfa77a063e98da8fa26acc1e7ed1de8c169.tar.gz
working isr-based sink, but still grainy
Diffstat (limited to 'src/audio/include')
-rw-r--r--src/audio/include/audio_sink.hpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/audio/include/audio_sink.hpp b/src/audio/include/audio_sink.hpp
index a11a9c92..eaed04ec 100644
--- a/src/audio/include/audio_sink.hpp
+++ b/src/audio/include/audio_sink.hpp
@@ -11,22 +11,26 @@ class IAudioSink {
private:
// TODO: tune. at least about 12KiB seems right for mp3
static const std::size_t kDrainBufferSize = 24 * 1024;
- uint8_t *buffer_;
- StaticStreamBuffer_t *metadata_;
- StreamBufferHandle_t *handle_;
+ uint8_t* buffer_;
+ StaticStreamBuffer_t* metadata_;
+ StreamBufferHandle_t handle_;
public:
- IAudioSink() :
- buffer_(reinterpret_cast<uint8_t*>(heap_caps_malloc(kDrainBufferSize, MALLOC_CAP_DMA))),
- metadata_(reinterpret_cast<StaticStreamBuffer_t*>(heap_caps_malloc(sizeof(StaticStreamBuffer_t), MALLOC_CAP_DMA))),
- handle_(reinterpret_cast<StreamBufferHandle_t*>(heap_caps_malloc(sizeof(StreamBufferHandle_t), MALLOC_CAP_DMA))) {
- *handle_ = xStreamBufferCreateStatic(kDrainBufferSize, 1, buffer_, metadata_);
- }
+ IAudioSink()
+ : buffer_(reinterpret_cast<uint8_t*>(
+ heap_caps_malloc(kDrainBufferSize,
+ MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT))),
+ metadata_(reinterpret_cast<StaticStreamBuffer_t*>(
+ heap_caps_malloc(sizeof(StaticStreamBuffer_t),
+ MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT))),
+ handle_(xStreamBufferCreateStatic(kDrainBufferSize,
+ 1,
+ buffer_,
+ metadata_)) {}
virtual ~IAudioSink() {
- vStreamBufferDelete(*handle_);
+ vStreamBufferDelete(handle_);
free(buffer_);
- free(handle_);
free(metadata_);
}
@@ -34,7 +38,7 @@ class IAudioSink {
virtual auto Send(const cpp::span<std::byte>& data) -> void = 0;
virtual auto Log() -> void {}
- auto buffer() -> StreamBufferHandle_t* { return handle_; }
+ auto buffer() -> StreamBufferHandle_t { return handle_; }
};
} // namespace audio