From 4c88fcc4a57b1fae7b6edaf42034945d5ac24a89 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 20 Jan 2023 09:48:29 +1100 Subject: fix build issues with new pipeline --- src/audio/include/audio_element_handle.hpp | 41 ++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/audio/include/audio_element_handle.hpp (limited to 'src/audio/include/audio_element_handle.hpp') diff --git a/src/audio/include/audio_element_handle.hpp b/src/audio/include/audio_element_handle.hpp new file mode 100644 index 00000000..adb26baa --- /dev/null +++ b/src/audio/include/audio_element_handle.hpp @@ -0,0 +1,41 @@ +#pragma once + +#include +#include "audio_element.hpp" + +namespace audio { + +class AudioElementHandle { + public: + AudioElementHandle(std::unique_ptr task, + std::shared_ptr element); + ~AudioElementHandle(); + + auto CurrentState() -> ElementState; + + // TODO: think about this contract. Would it ever make sense to pause and + // then walk away? Things could keep running for a whole loop if data comes + // through, so probably not? + enum PlayPause { + PLAY, + PAUSE, + }; + auto PlayPause(PlayPause state) -> void; + auto Quit() -> void; + + auto PauseSync() -> void; + auto QuitSync() -> void; + + AudioElementHandle(const AudioElementHandle&) = delete; + AudioElementHandle& operator=(const AudioElementHandle&) = delete; + + private: + std::unique_ptr task_; + std::shared_ptr element_; + + auto MonitorUtilState(eTaskState desired) -> void; + auto SetStateAndWakeUp(ElementState state) -> void; + auto WakeUpTask() -> void; +}; + +} // namespace audio -- cgit v1.2.3