summaryrefslogtreecommitdiff
path: root/src/audio/stream_event.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-02-21 13:16:58 +1100
committerjacqueline <me@jacqueline.id.au>2023-02-21 13:19:11 +1100
commit941bafca17b13547a88668b787ce4c8e064ef7ff (patch)
treeb4a0d5528cbd258fedffc041dee837bcaf1f690f /src/audio/stream_event.cpp
parent12d2ffdab70df573610b81d8a24545da33bb67e3 (diff)
downloadtangara-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.cpp23
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;