summaryrefslogtreecommitdiff
path: root/src/audio/include/audio_task.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/include/audio_task.hpp')
-rw-r--r--src/audio/include/audio_task.hpp45
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