From 941bafca17b13547a88668b787ce4c8e064ef7ff Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 21 Feb 2023 13:16:58 +1100 Subject: Add a memory arena for the audio pipeline --- src/audio/stream_event.cpp | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'src/audio/stream_event.cpp') 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 #include +#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(heap_caps_malloc(chunk_size, MALLOC_CAP_SPIRAM)); - - event->chunk_data.raw_bytes = raw_bytes; - event->chunk_data.bytes = cpp::span(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; -- cgit v1.2.3