From f6dcd845fc80da4e3043146e4362258dd8e0c0a1 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 26 Jan 2023 15:02:57 +1100 Subject: Switch from MessageBuffer to Queue for pipeline comms --- src/audio/include/stream_event.hpp | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/audio/include/stream_event.hpp (limited to 'src/audio/include/stream_event.hpp') diff --git a/src/audio/include/stream_event.hpp b/src/audio/include/stream_event.hpp new file mode 100644 index 00000000..4dfdab41 --- /dev/null +++ b/src/audio/include/stream_event.hpp @@ -0,0 +1,57 @@ +#pragma once + +#include + +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" + +#include "span.hpp" +#include "stream_info.hpp" + +namespace audio { + +struct StreamEvent { + static auto CreateStreamInfo(QueueHandle_t source, + std::unique_ptr payload) + -> std::unique_ptr; + static auto CreateChunkData(QueueHandle_t source, std::size_t chunk_size) + -> std::unique_ptr; + static auto CreateChunkNotification(QueueHandle_t source) + -> std::unique_ptr; + + StreamEvent(); + ~StreamEvent(); + StreamEvent(StreamEvent&&); + + QueueHandle_t source; + + enum { + UNINITIALISED, + STREAM_INFO, + CHUNK_DATA, + CHUNK_NOTIFICATION, + } tag; + + union { + std::unique_ptr stream_info; + + // Scott Meyers says: + // `About the only situation I can conceive of when a std::unique_ptr + // would make sense would be when you’re using a C-like API that returns a + // raw pointer to a heap array that you assume ownership of.` + // :-) + + struct { + std::unique_ptr raw_bytes; + cpp::span bytes; + } chunk_data; + + // FIXME: It would be nice to also support a pointer to himem data here, to + // save a little ordinary heap space. + }; + + StreamEvent(const StreamEvent&) = delete; + StreamEvent& operator=(const StreamEvent&) = delete; +}; + +} // namespace audio -- cgit v1.2.3