diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-04-19 16:45:50 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-04-19 16:45:50 +1000 |
| commit | 4c77950e702a329f3136456a932efbea36e03d42 (patch) | |
| tree | 5df7e8717b751846655c16b50c352712b642658b /src/audio/include | |
| parent | 561f9d2a07ee6ee1c2f18dc375125f87ea7b0d55 (diff) | |
| download | tangara-fw-4c77950e702a329f3136456a932efbea36e03d42.tar.gz | |
Pipeline working and outputting correctly, but noisy
Diffstat (limited to 'src/audio/include')
| -rw-r--r-- | src/audio/include/audio_sink.hpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/audio/include/audio_sink.hpp b/src/audio/include/audio_sink.hpp index 03a4690d..a11a9c92 100644 --- a/src/audio/include/audio_sink.hpp +++ b/src/audio/include/audio_sink.hpp @@ -1,6 +1,9 @@ #pragma once +#include <stdint.h> #include "audio_element.hpp" +#include "esp_heap_caps.h" +#include "freertos/FreeRTOS.h" #include "stream_info.hpp" namespace audio { @@ -8,17 +11,30 @@ class IAudioSink { private: // TODO: tune. at least about 12KiB seems right for mp3 static const std::size_t kDrainBufferSize = 24 * 1024; - StreamBufferHandle_t buffer_; + uint8_t *buffer_; + StaticStreamBuffer_t *metadata_; + StreamBufferHandle_t *handle_; public: - IAudioSink() : buffer_(xStreamBufferCreate(kDrainBufferSize, 1)) {} - virtual ~IAudioSink() { vStreamBufferDelete(buffer_); } + 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_); + } + + virtual ~IAudioSink() { + vStreamBufferDelete(*handle_); + free(buffer_); + free(handle_); + free(metadata_); + } 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_; } + auto buffer() -> StreamBufferHandle_t* { return handle_; } }; } // namespace audio |
