2026-09-23 01:28:59

Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie
2026-09-23 01:28:59 +00:00
parent c52a7be00f
commit 8ddd0f3cc4
4 changed files with 17 additions and 7 deletions
+1
View File
@@ -20,6 +20,7 @@ ADSP::ADSP(Core::System& system, Sink::Sink& sink) {
} }
void ADSP::NotifyShutdown() { void ADSP::NotifyShutdown() {
audio_renderer->NotifyShutdown();
opus_decoder->NotifyShutdown(); opus_decoder->NotifyShutdown();
} }
@@ -41,6 +41,14 @@ void AudioRenderer::Start() {
running = true; running = true;
} }
void AudioRenderer::NotifyShutdown() {
if (main_thread.joinable()) {
main_thread.request_stop();
mailbox.Send(Direction::DSP, Message::Shutdown);
main_thread.join();
}
}
void AudioRenderer::Stop() { void AudioRenderer::Stop() {
if (!running) { if (!running) {
return; return;
@@ -71,13 +79,12 @@ void AudioRenderer::Signal() {
Send(Direction::DSP, Message::Render); Send(Direction::DSP, Message::Render);
} }
void AudioRenderer::Wait() { void AudioRenderer::Wait(std::stop_token stop_token) {
auto msg = Receive(Direction::Host); auto msg = mailbox.Receive(Direction::Host, stop_token);
if (msg != Message::RenderResponse) { if (msg != Message::RenderResponse) {
LOG_ERROR(Service_Audio, LOG_ERROR(Service_Audio,
"Did not receive the expected render response from the AudioRenderer! Expected " "Did not receive the expected render response from the AudioRenderer! Expected "
"{}, got {}", "{}, got {}", Message::RenderResponse, msg);
Message::RenderResponse, msg);
} }
PostDSPClearCommandBuffer(); PostDSPClearCommandBuffer();
} }
@@ -63,13 +63,15 @@ public:
*/ */
void Start(); void Start();
void NotifyShutdown();
/** /**
* Stop the AudioRenderer. * Stop the AudioRenderer.
*/ */
void Stop(); void Stop();
void Signal(); void Signal();
void Wait(); void Wait(std::stop_token stop_token);
void Send(Direction dir, u32 message); void Send(Direction dir, u32 message);
u32 Receive(Direction dir); u32 Receive(Direction dir);
+1 -1
View File
@@ -36,7 +36,7 @@ void SystemManager::InitializeUnsafe() {
system->SendCommandToDsp(); system->SendCommandToDsp();
} }
audio_renderer.Signal(); audio_renderer.Signal();
audio_renderer.Wait(); audio_renderer.Wait(stop_token);
} }
}); });
} }