diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-01-26 15:02:57 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-01-26 15:02:57 +1100 |
| commit | f6dcd845fc80da4e3043146e4362258dd8e0c0a1 (patch) | |
| tree | 91410899a83fcc2dfb1eb3ab4837a11e401366fc /src/audio/stream_event.cpp | |
| parent | e7f926e2c376ccd4f4a4d6f4b104f3c23b0059dc (diff) | |
| download | tangara-fw-f6dcd845fc80da4e3043146e4362258dd8e0c0a1.tar.gz | |
Switch from MessageBuffer to Queue for pipeline comms
Diffstat (limited to 'src/audio/stream_event.cpp')
| -rw-r--r-- | src/audio/stream_event.cpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/audio/stream_event.cpp b/src/audio/stream_event.cpp new file mode 100644 index 00000000..0a116297 --- /dev/null +++ b/src/audio/stream_event.cpp @@ -0,0 +1,75 @@ +#include "stream_event.hpp" +#include <cstddef> +#include <memory> + +namespace audio { + +auto StreamEvent::CreateStreamInfo(QueueHandle_t source, + std::unique_ptr<StreamInfo> payload) + -> std::unique_ptr<StreamEvent> { + auto event = std::make_unique<StreamEvent>(); + event->tag = StreamEvent::STREAM_INFO; + event->source = source; + event->stream_info = std::move(payload); + return event; +} + +auto StreamEvent::CreateChunkData(QueueHandle_t source, std::size_t chunk_size) + -> std::unique_ptr<StreamEvent> { + auto event = std::make_unique<StreamEvent>(); + event->tag = StreamEvent::CHUNK_DATA; + event->source = source; + + auto raw_bytes = + static_cast<std::byte*>(heap_caps_malloc(chunk_size, MALLOC_CAP_SPIRAM)); + + event->chunk_data.raw_bytes = std::make_unique<std::byte*>(raw_bytes); + event->chunk_data.bytes = cpp::span<std::byte>(raw_bytes, chunk_size); + + return event; +} + +auto StreamEvent::CreateChunkNotification(QueueHandle_t source) + -> std::unique_ptr<StreamEvent> { + auto event = std::make_unique<StreamEvent>(); + event->tag = StreamEvent::CHUNK_NOTIFICATION; + event->source = source; + return event; +} + +StreamEvent::StreamEvent() : tag(StreamEvent::UNINITIALISED) {} + +StreamEvent::~StreamEvent() { + switch (tag) { + case UNINITIALISED: + break; + case STREAM_INFO: + stream_info.reset(); + break; + case CHUNK_DATA: + chunk_data.raw_bytes.reset(); + break; + case CHUNK_NOTIFICATION: + break; + } +} + +StreamEvent::StreamEvent(StreamEvent&& other) { + tag = other.tag; + source = other.source; + switch (tag) { + case UNINITIALISED: + break; + case STREAM_INFO: + stream_info = std::move(other.stream_info); + break; + case CHUNK_DATA: + chunk_data = std::move(other.chunk_data); + break; + case CHUNK_NOTIFICATION: + break; + } + other.tag = StreamEvent::UNINITIALISED; +} + +} // namespace audio |
