diff options
Diffstat (limited to 'src/audio/include/audio_source.hpp')
| -rw-r--r-- | src/audio/include/audio_source.hpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/audio/include/audio_source.hpp b/src/audio/include/audio_source.hpp index a0d690a6..a54cb260 100644 --- a/src/audio/include/audio_source.hpp +++ b/src/audio/include/audio_source.hpp @@ -6,16 +6,41 @@ #pragma once +#include <memory> #include "codec.hpp" +#include "track.hpp" +#include "types.hpp" namespace audio { +class TaggedStream : public codecs::IStream { + public: + TaggedStream(std::shared_ptr<database::TrackTags>, + std::unique_ptr<codecs::IStream> wrapped); + + auto tags() -> std::shared_ptr<database::TrackTags>; + + auto Read(cpp::span<std::byte> dest) -> ssize_t override; + + auto CanSeek() -> bool override; + + auto SeekTo(int64_t destination, SeekFrom from) -> void override; + + auto CurrentPosition() -> int64_t override; + + auto SetPreambleFinished() -> void override; + + private: + std::shared_ptr<database::TrackTags> tags_; + std::unique_ptr<codecs::IStream> wrapped_; +}; + class IAudioSource { public: virtual ~IAudioSource() {} virtual auto HasNewStream() -> bool = 0; - virtual auto NextStream() -> std::shared_ptr<codecs::IStream> = 0; + virtual auto NextStream() -> std::shared_ptr<TaggedStream> = 0; }; } // namespace audio |
