From 60169cdd91c46fb9c5cd22c2864e47b8e2dc413e Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 17 Nov 2022 13:30:16 +1100 Subject: WIP on our own pipeline --- src/audio/include/audio_element.hpp | 73 +++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/audio/include/audio_element.hpp (limited to 'src/audio/include/audio_element.hpp') diff --git a/src/audio/include/audio_element.hpp b/src/audio/include/audio_element.hpp new file mode 100644 index 00000000..ea4256ac --- /dev/null +++ b/src/audio/include/audio_element.hpp @@ -0,0 +1,73 @@ +#pragma once + +#include + +namespace audio { + +extern const std::size_t kMaxFrameSize; + +class IAudioElement { + public: + virtual ~IAudioElement(); + + enum CommandType { + /* + * Sets the sequence number of the most recent byte stream. Any commands + * received that have a lower sequence number than this will be discarded. + */ + SEQUENCE_NUMBER, + /* + * Instructs this element to read a specific number of bytes from its + * input buffer. + */ + READ_FRAME, + /* + * Represents an element-specific command. This handling of this is + * delegated to element implementations. + */ + ELEMENT, + /* Instructs this element to shut down. */ + QUIT, + }; + + struct Command { + CommandType type; + uint8_t sequence_number; + union { + void* data; + std::size_t frame_size; + }; + }; + + /* + * Returns a queue that should be used for all communication with this + * element. + */ + virtual auto InputCommandQueue() -> QueueHandle_t = 0; + + /* + * Returns a buffer that will be used to stream input bytes to this element. + * This may be NULL, if this element represents a source, e.g. a FATFS + * reader. + */ + virtual auto InputBuffer() -> StreamBufferHandle_t = 0; + + /* + * Called when an element-specific command has been received. + */ + virtual auto ProcessElementCommand(void* command) -> void = 0; + + virtual auto SkipElementCommand(void* command) -> void = 0; + + /* + * Called with the result of a read bytes command. + */ + virtual auto ProcessData(uint8_t* data, uint16_t length) -> void = 0; + + /* + * Called periodically when there are no pending commands. + */ + virtual auto ProcessIdle() -> void = 0; +}; + +} // namespace audio -- cgit v1.2.3