mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-06 06:00:12 +00:00
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user