diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-03-25 17:34:41 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-03-25 17:34:41 +1100 |
| commit | 175bfc4e3e9f7aa39e084d3f1625347f1d5711ec (patch) | |
| tree | f71b458f19acca855815ab876944d48a3c5acbcb /src/audio/include/audio_fsm.hpp | |
| parent | 5c985afd258a96b68d6bd5a4fade17ed998d2c07 (diff) | |
| download | tangara-fw-175bfc4e3e9f7aa39e084d3f1625347f1d5711ec.tar.gz | |
WIP rewrie audio pipeline+fsm guts for more reliability
Diffstat (limited to 'src/audio/include/audio_fsm.hpp')
| -rw-r--r-- | src/audio/include/audio_fsm.hpp | 53 |
1 files changed, 22 insertions, 31 deletions
diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp index 13e241be..62bb4786 100644 --- a/src/audio/include/audio_fsm.hpp +++ b/src/audio/include/audio_fsm.hpp @@ -6,6 +6,7 @@ #pragma once +#include <stdint.h> #include <deque> #include <memory> #include <vector> @@ -41,6 +42,17 @@ class AudioState : public tinyfsm::Fsm<AudioState> { /* Fallback event handler. Does nothing. */ void react(const tinyfsm::Event& ev) {} + void react(const QueueUpdate&); + void react(const SetTrack&); + void react(const TogglePlayPause&); + + void react(const internal::DecoderOpened&); + void react(const internal::DecoderClosed&); + void react(const internal::DecoderError&); + + void react(const internal::ConverterConfigurationChanged&); + void react(const internal::ConverterProgress&); + void react(const StepUpVolume&); void react(const StepDownVolume&); virtual void react(const system_fsm::HasPhonesChanged&); @@ -56,17 +68,6 @@ class AudioState : public tinyfsm::Fsm<AudioState> { virtual void react(const system_fsm::StorageMounted&) {} virtual void react(const system_fsm::BluetoothEvent&); - virtual void react(const PlayFile&) {} - virtual void react(const SeekFile&) {} - virtual void react(const QueueUpdate&) {} - virtual void react(const PlaybackUpdate&) {} - void react(const TogglePlayPause&); - - virtual void react(const internal::InputFileOpened&) {} - virtual void react(const internal::InputFileClosed&) {} - virtual void react(const internal::InputFileFinished&) {} - virtual void react(const internal::AudioPipelineIdle&) {} - protected: auto clearDrainBuffer() -> void; auto playTrack(database::TrackId id) -> void; @@ -83,10 +84,17 @@ class AudioState : public tinyfsm::Fsm<AudioState> { static StreamBufferHandle_t sDrainBuffer; - static std::optional<database::TrackId> sCurrentTrack; + static std::shared_ptr<TrackInfo> sCurrentTrack; + static uint64_t sCurrentSamples; + static std::optional<IAudioOutput::Format> sCurrentFormat; - auto readyToPlay() -> bool; - static bool sIsPlaybackAllowed; + static std::shared_ptr<TrackInfo> sNextTrack; + static uint64_t sNextTrackCueSamples; + + static bool sIsResampling; + static bool sIsPaused; + + auto currentPositionSeconds() -> std::optional<uint32_t>; }; namespace states { @@ -94,7 +102,6 @@ namespace states { class Uninitialised : public AudioState { public: void react(const system_fsm::BootComplete&) override; - void react(const system_fsm::BluetoothEvent&) override{}; using AudioState::react; @@ -102,10 +109,6 @@ class Uninitialised : public AudioState { class Standby : public AudioState { public: - void react(const PlayFile&) override; - void react(const SeekFile&) override; - void react(const internal::InputFileOpened&) override; - void react(const QueueUpdate&) override; void react(const system_fsm::KeyLockChanged&) override; void react(const system_fsm::StorageMounted&) override; @@ -117,18 +120,6 @@ class Playback : public AudioState { void entry() override; void exit() override; - void react(const system_fsm::HasPhonesChanged&) override; - - void react(const PlayFile&) override; - void react(const SeekFile&) override; - void react(const QueueUpdate&) override; - void react(const PlaybackUpdate&) override; - - void react(const internal::InputFileOpened&) override; - void react(const internal::InputFileClosed&) override; - void react(const internal::InputFileFinished&) override; - void react(const internal::AudioPipelineIdle&) override; - using AudioState::react; }; |
