diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-04-26 08:49:02 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-04-26 08:49:02 +1000 |
| commit | 7972bd4567a99179338259e9e6ce19168c2c0db3 (patch) | |
| tree | f46642afd36011d3d064e022232e77744b82c6ae /src/audio/audio_element.cpp | |
| parent | 4887f3789817f87bf1272af0b52684e3364270c2 (diff) | |
| parent | 5575378c1c8171cd716b79d3ab89df1e56ceb9d3 (diff) | |
| download | tangara-fw-7972bd4567a99179338259e9e6ce19168c2c0db3.tar.gz | |
Merge branch 'main' into leveldb
Diffstat (limited to 'src/audio/audio_element.cpp')
| -rw-r--r-- | src/audio/audio_element.cpp | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/src/audio/audio_element.cpp b/src/audio/audio_element.cpp deleted file mode 100644 index cef54631..00000000 --- a/src/audio/audio_element.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "audio_element.hpp" -#include <memory> - -namespace audio { - -IAudioElement::IAudioElement() - : input_events_(xQueueCreate(kEventQueueSize, sizeof(void*))), - output_events_(nullptr), - buffered_output_() {} - -IAudioElement::~IAudioElement() { - // Ensure we don't leak any memory from events leftover in the queue. - while (uxQueueSpacesAvailable(input_events_) < kEventQueueSize) { - StreamEvent* event; - if (xQueueReceive(input_events_, &event, 0)) { - free(event); - } else { - break; - } - } - // Technically there's a race here if someone is still adding to the queue, - // but hopefully the whole pipeline is stopped if an element is being - // destroyed. - vQueueDelete(input_events_); -} - -auto IAudioElement::SendOrBufferEvent(std::unique_ptr<StreamEvent> event) - -> bool { - if (!buffered_output_.empty()) { - // To ensure we send data in order, don't try to send if we've already - // failed to send something. - buffered_output_.push_back(std::move(event)); - return false; - } - StreamEvent* raw_event = event.release(); - if (!xQueueSend(output_events_, &raw_event, 0)) { - event.reset(raw_event); - buffered_output_.push_back(std::move(event)); - return false; - } - return true; -} - -auto IAudioElement::FlushBufferedOutput() -> bool { - while (!buffered_output_.empty()) { - StreamEvent* raw_event = buffered_output_.front().release(); - buffered_output_.pop_front(); - if (!xQueueSend(output_events_, &raw_event, 0)) { - buffered_output_.emplace_front(raw_event); - return false; - } - } - return true; -} - -} // namespace audio |
