From 47ae601d417d0ef99eb6fe433ef695614d8d2786 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Tue, 21 Feb 2023 14:40:18 +1100 Subject: Tidy up pipeline and use arena capacity to test for overruns --- src/audio/audio_element_handle.cpp | 80 -------------------------------------- 1 file changed, 80 deletions(-) delete mode 100644 src/audio/audio_element_handle.cpp (limited to 'src/audio/audio_element_handle.cpp') diff --git a/src/audio/audio_element_handle.cpp b/src/audio/audio_element_handle.cpp deleted file mode 100644 index c5f0c374..00000000 --- a/src/audio/audio_element_handle.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "audio_element_handle.hpp" -#include "audio_element.hpp" -#include "freertos/projdefs.h" -#include "freertos/task.h" - -namespace audio { - -AudioElementHandle::AudioElementHandle(std::unique_ptr task, - std::shared_ptr element) - : task_(std::move(task)), element_(std::move(element)) {} - -AudioElementHandle::~AudioElementHandle() { - Quit(); -} - -auto AudioElementHandle::CurrentState() -> ElementState { - return element_->ElementState(); -} - -auto AudioElementHandle::PlayPause(enum PlayPause state) -> void { - ElementState s = CurrentState(); - if (state == PLAY && s == STATE_PAUSE) { - // Ensure we actually finished any previous pause command. - // TODO: really? - PauseSync(); - SetStateAndWakeUp(STATE_RUN); - return; - } - if (state == PAUSE && s == STATE_RUN) { - element_->ElementState(STATE_PAUSE); - SetStateAndWakeUp(STATE_PAUSE); - return; - } -} - -auto AudioElementHandle::Quit() -> void { - SetStateAndWakeUp(STATE_QUIT); -} - -auto AudioElementHandle::PauseSync() -> void { - PlayPause(PAUSE); - MonitorUntilState(eSuspended); -} - -auto AudioElementHandle::QuitSync() -> void { - Quit(); - MonitorUntilState(eDeleted); -} - -auto AudioElementHandle::MonitorUntilState(eTaskState desired) -> void { - while (eTaskGetState(*task_) != desired) { - WakeUpTask(); - vTaskDelay(pdMS_TO_TICKS(1)); - } -} - -auto AudioElementHandle::SetStateAndWakeUp(ElementState state) -> void { - element_->ElementState(state); - WakeUpTask(); -} - -auto AudioElementHandle::WakeUpTask() -> void { - // TODO: various races where the task isn't blocked yet, but there is a block - // between now and its next element state check. Also think about chunk blocks - // nested in element bodies. - // Maybe we need a big mutex or semaphore somewhere in here. - switch (eTaskGetState(*task_)) { - case eBlocked: - // TODO: when is this safe? - xTaskAbortDelay(*task_); - break; - case eSuspended: - vTaskResume(*task_); - break; - default: - return; - } -} - -} // namespace audio -- cgit v1.2.3