diff options
| author | ailurux <ailurux@noreply.codeberg.org> | 2024-02-29 05:23:33 +0000 |
|---|---|---|
| committer | ailurux <ailurux@noreply.codeberg.org> | 2024-02-29 05:23:33 +0000 |
| commit | aa87c13799f5d71773b7c73135006acb592182d0 (patch) | |
| tree | 3c6ef26e5a00eecb0e4319377b4bccd71235e9ac /src/audio/include | |
| parent | 173b09b0151ae765b1a8e69dfb60d14d502801f6 (diff) | |
| parent | e7e6c70fb31d33ae1e79f9841f5b6fe227f6ebf3 (diff) | |
| download | tangara-fw-aa87c13799f5d71773b7c73135006acb592182d0.tar.gz | |
Merge pull request 'Add seeking support for all codecs' (#50) from seek-support into main
Reviewed-on: https://codeberg.org/cool-tech-zone/tangara-fw/pulls/50
Reviewed-by: ailurux <ailurux@noreply.codeberg.org>
Diffstat (limited to 'src/audio/include')
| -rw-r--r-- | src/audio/include/audio_decoder.hpp | 2 | ||||
| -rw-r--r-- | src/audio/include/audio_events.hpp | 6 | ||||
| -rw-r--r-- | src/audio/include/audio_fsm.hpp | 3 | ||||
| -rw-r--r-- | src/audio/include/audio_source.hpp | 11 | ||||
| -rw-r--r-- | src/audio/include/fatfs_audio_input.hpp | 4 |
5 files changed, 22 insertions, 4 deletions
diff --git a/src/audio/include/audio_decoder.hpp b/src/audio/include/audio_decoder.hpp index 318e6fd4..b8aac710 100644 --- a/src/audio/include/audio_decoder.hpp +++ b/src/audio/include/audio_decoder.hpp @@ -24,7 +24,7 @@ namespace audio { */ class Timer { public: - Timer(std::shared_ptr<Track>, const codecs::ICodec::OutputFormat& format); + Timer(std::shared_ptr<Track>, const codecs::ICodec::OutputFormat& format, uint32_t current_seconds = 0); auto AddSamples(std::size_t) -> void; diff --git a/src/audio/include/audio_events.hpp b/src/audio/include/audio_events.hpp index a79ca4ec..d55e4e0d 100644 --- a/src/audio/include/audio_events.hpp +++ b/src/audio/include/audio_events.hpp @@ -25,6 +25,7 @@ struct Track { uint32_t duration; uint32_t bitrate_kbps; codecs::StreamType encoding; + std::string filepath; }; struct PlaybackStarted : tinyfsm::Event {}; @@ -51,6 +52,11 @@ struct PlayFile : tinyfsm::Event { std::string filename; }; +struct SeekFile : tinyfsm::Event { + uint32_t offset; + std::string filename; +}; + struct StepUpVolume : tinyfsm::Event {}; struct StepDownVolume : tinyfsm::Event {}; struct SetVolume : tinyfsm::Event { diff --git a/src/audio/include/audio_fsm.hpp b/src/audio/include/audio_fsm.hpp index 2d335e74..13e241be 100644 --- a/src/audio/include/audio_fsm.hpp +++ b/src/audio/include/audio_fsm.hpp @@ -57,6 +57,7 @@ class AudioState : public tinyfsm::Fsm<AudioState> { 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&); @@ -102,6 +103,7 @@ 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; @@ -118,6 +120,7 @@ class Playback : public AudioState { 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; diff --git a/src/audio/include/audio_source.hpp b/src/audio/include/audio_source.hpp index 68145f5b..b38acd7a 100644 --- a/src/audio/include/audio_source.hpp +++ b/src/audio/include/audio_source.hpp @@ -16,7 +16,10 @@ namespace audio { class TaggedStream : public codecs::IStream { public: TaggedStream(std::shared_ptr<database::TrackTags>, - std::unique_ptr<codecs::IStream> wrapped); + std::unique_ptr<codecs::IStream> wrapped, + std::string path, + uint32_t offset = 0 + ); auto tags() -> std::shared_ptr<database::TrackTags>; @@ -30,11 +33,17 @@ class TaggedStream : public codecs::IStream { auto Size() -> std::optional<int64_t> override; + auto Offset() -> uint32_t; + + auto Filepath() -> std::string; + auto SetPreambleFinished() -> void override; private: std::shared_ptr<database::TrackTags> tags_; std::unique_ptr<codecs::IStream> wrapped_; + std::string filepath_; + int32_t offset_; }; class IAudioSource { diff --git a/src/audio/include/fatfs_audio_input.hpp b/src/audio/include/fatfs_audio_input.hpp index 4cccbb46..10b7433e 100644 --- a/src/audio/include/fatfs_audio_input.hpp +++ b/src/audio/include/fatfs_audio_input.hpp @@ -39,7 +39,7 @@ class FatfsAudioInput : public IAudioSource { * given file path. */ auto SetPath(std::optional<std::string>) -> void; - auto SetPath(const std::string&) -> void; + auto SetPath(const std::string&,uint32_t offset = 0) -> void; auto SetPath() -> void; auto HasNewStream() -> bool override; @@ -49,7 +49,7 @@ class FatfsAudioInput : public IAudioSource { FatfsAudioInput& operator=(const FatfsAudioInput&) = delete; private: - auto OpenFile(const std::string& path) -> bool; + auto OpenFile(const std::string& path,uint32_t offset) -> bool; auto ContainerToStreamType(database::Container) -> std::optional<codecs::StreamType>; |
