diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-02-21 13:16:58 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-02-21 13:19:11 +1100 |
| commit | 941bafca17b13547a88668b787ce4c8e064ef7ff (patch) | |
| tree | b4a0d5528cbd258fedffc041dee837bcaf1f690f /src/audio/stream_event.cpp | |
| parent | 12d2ffdab70df573610b81d8a24545da33bb67e3 (diff) | |
| download | tangara-fw-941bafca17b13547a88668b787ce4c8e064ef7ff.tar.gz | |
Add a memory arena for the audio pipeline
Diffstat (limited to 'src/audio/stream_event.cpp')
| -rw-r--r-- | src/audio/stream_event.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/audio/stream_event.cpp b/src/audio/stream_event.cpp index af470584..e08f26da 100644 --- a/src/audio/stream_event.cpp +++ b/src/audio/stream_event.cpp @@ -1,6 +1,7 @@ #include "stream_event.hpp" #include <cstddef> #include <memory> +#include "arena.hpp" #include "stream_info.hpp" namespace audio { @@ -14,17 +15,12 @@ auto StreamEvent::CreateStreamInfo(QueueHandle_t source, return event; } -auto StreamEvent::CreateChunkData(QueueHandle_t source, std::size_t chunk_size) +auto StreamEvent::CreateArenaChunk(QueueHandle_t source, memory::ArenaPtr ptr) -> StreamEvent* { auto event = new StreamEvent; - event->tag = StreamEvent::CHUNK_DATA; + event->tag = StreamEvent::ARENA_CHUNK; event->source = source; - - auto raw_bytes = - static_cast<std::byte*>(heap_caps_malloc(chunk_size, MALLOC_CAP_SPIRAM)); - - event->chunk_data.raw_bytes = raw_bytes; - event->chunk_data.bytes = cpp::span<std::byte>(raw_bytes, chunk_size); + event->arena_chunk = ptr; return event; } @@ -59,8 +55,8 @@ StreamEvent::~StreamEvent() { case STREAM_INFO: delete stream_info; break; - case CHUNK_DATA: - free(chunk_data.raw_bytes); + case ARENA_CHUNK: + arena_chunk.owner->Return(arena_chunk); break; case CHUNK_NOTIFICATION: break; @@ -81,9 +77,10 @@ StreamEvent::StreamEvent(StreamEvent&& other) { stream_info = other.stream_info; other.stream_info = nullptr; break; - case CHUNK_DATA: - chunk_data = other.chunk_data; - other.chunk_data = {}; + case ARENA_CHUNK: + arena_chunk = other.arena_chunk; + other.arena_chunk = { + .owner = nullptr, .start = nullptr, .size = 0, .used_size = 0}; break; case CHUNK_NOTIFICATION: break; |
