diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-07-25 17:42:36 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-07-25 17:43:12 +1000 |
| commit | 80d7df910987db5201402fe987124f29f09344f3 (patch) | |
| tree | 7e8c1e04ab40026087343efee95a771c7839b32f /src/audio/include/audio_task.hpp | |
| parent | 7b72e5479ee6d11f76c49f7463ba0e7f4e5165c5 (diff) | |
| download | tangara-fw-80d7df910987db5201402fe987124f29f09344f3.tar.gz | |
fuck off
Diffstat (limited to 'src/audio/include/audio_task.hpp')
| -rw-r--r-- | src/audio/include/audio_task.hpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/src/audio/include/audio_task.hpp b/src/audio/include/audio_task.hpp index f997caee..e316f17a 100644 --- a/src/audio/include/audio_task.hpp +++ b/src/audio/include/audio_task.hpp @@ -6,15 +6,54 @@ #pragma once +#include <sys/_stdint.h> +#include <cstdint> +#include <memory> +#include "audio_decoder.hpp" #include "audio_sink.hpp" +#include "audio_source.hpp" +#include "codec.hpp" #include "pipeline.hpp" namespace audio { -namespace task { +class Timer { + public: + explicit Timer(StreamInfo::Pcm); -auto StartPipeline(Pipeline* pipeline, IAudioSink* sink) -> void; + auto SetLengthSeconds(uint32_t) -> void; + auto SetLengthBytes(uint32_t) -> void; -} // namespace task + auto AddBytes(std::size_t) -> void; + + private: + StreamInfo::Pcm format_; + + uint32_t last_seconds_; + uint32_t total_duration_seconds_; + float current_seconds_; +}; + +class AudioTask { + public: + static auto Start(IAudioSource* source, IAudioSink* sink) -> AudioTask*; + + auto Main() -> void; + + private: + AudioTask(IAudioSource* source, IAudioSink* sink); + + IAudioSource* source_; + IAudioSink* sink_; + std::unique_ptr<codecs::ICodec> codec_; + std::unique_ptr<Timer> timer_; + + bool is_new_stream_; + std::optional<StreamInfo::Format> current_input_format_; + std::optional<StreamInfo::Format> current_output_format_; + + std::byte* sample_buffer_; + std::size_t sample_buffer_len_; +}; } // namespace audio |
