summaryrefslogtreecommitdiff
path: root/src/audio/audio_task.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/audio_task.cpp')
-rw-r--r--src/audio/audio_task.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/audio/audio_task.cpp b/src/audio/audio_task.cpp
index 24bc7be7..babe6849 100644
--- a/src/audio/audio_task.cpp
+++ b/src/audio/audio_task.cpp
@@ -37,6 +37,7 @@
#include "stream_message.hpp"
#include "sys/_stdint.h"
#include "tasks.hpp"
+#include "ui_fsm.hpp"
namespace audio {
@@ -87,7 +88,7 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) {
}
if (previously_had_work && !has_work) {
- events::Dispatch<AudioPipelineIdle, AudioState>({});
+ events::Dispatch<internal::AudioPipelineIdle, AudioState>({});
}
previously_had_work = has_work;
@@ -136,6 +137,10 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) {
if (sink_stream.is_producer_finished()) {
sink_stream.mark_consumer_finished();
+ if (current_second > 0 || current_sample_in_second > 0) {
+ events::Dispatch<internal::InputFileFinished, AudioState>({});
+ }
+
current_second = 0;
previous_second = 0;
current_sample_in_second = 0;
@@ -185,8 +190,11 @@ void AudioTaskMain(std::unique_ptr<Pipeline> pipeline, IAudioSink* sink) {
current_sample_in_second -= pcm.sample_rate;
}
if (previous_second != current_second) {
- events::Dispatch<PlaybackUpdate, AudioState>(
- {.seconds_elapsed = current_second});
+ events::Dispatch<PlaybackUpdate, AudioState, ui::UiState>({
+ .seconds_elapsed = current_second,
+ .seconds_total =
+ sink_stream.info().duration_seconds.value_or(current_second),
+ });
}
previous_second = current_second;
}