AudioCommon: Initialize before HW

This commit is contained in:
Bonta-kun 2021-03-22 00:06:44 +01:00
parent bc4d0b3ef8
commit 66e39de1ab
4 changed files with 12 additions and 9 deletions

View File

@ -15,7 +15,6 @@
#include "Common/FileUtil.h"
#include "Common/Logging/Log.h"
#include "Core/ConfigManager.h"
#include "Core/HW/AudioInterface.h"
// This shouldn't be a global, at least not here.
std::unique_ptr<SoundStream> g_sound_stream;
@ -66,13 +65,11 @@ void InitSoundStream()
g_sound_stream = std::make_unique<NullSound>();
g_sound_stream->Init();
}
}
// Ideally these two calls would be done in AudioInterface::Init so that we don't
// need to have a dependency on AudioInterface here, but this has to be done
// after creating g_sound_stream (above) and before starting audio dumping (below)
g_sound_stream->GetMixer()->SetDMAInputSampleRate(AudioInterface::GetAIDSampleRate());
g_sound_stream->GetMixer()->SetStreamInputSampleRate(AudioInterface::GetAISSampleRate());
void PostInitSoundStream()
{
// This needs to be called after AudioInterface::Init where input sample rates are set
UpdateSoundStream();
SetSoundStreamRunning(true);

View File

@ -19,6 +19,7 @@ extern std::unique_ptr<SoundStream> g_sound_stream;
namespace AudioCommon
{
void InitSoundStream();
void PostInitSoundStream();
void ShutdownSoundStream();
std::string GetDefaultSoundBackend();
std::vector<std::string> GetSoundBackends();

View File

@ -516,6 +516,9 @@ static void EmuThread(std::unique_ptr<BootParameters> boot, WindowSystemInfo wsi
Movie::Init(*boot);
Common::ScopeGuard movie_guard{&Movie::Shutdown};
AudioCommon::InitSoundStream();
Common::ScopeGuard audio_guard{&AudioCommon::ShutdownSoundStream};
HW::Init();
Common::ScopeGuard hw_guard{[] {
@ -566,8 +569,7 @@ static void EmuThread(std::unique_ptr<BootParameters> boot, WindowSystemInfo wsi
// it's now ok to initialize any custom textures
HiresTexture::Update();
AudioCommon::InitSoundStream();
Common::ScopeGuard audio_guard{&AudioCommon::ShutdownSoundStream};
AudioCommon::PostInitSoundStream();
// The hardware is initialized.
s_hardware_initialized = true;

View File

@ -153,6 +153,9 @@ void Init()
s_aid_sample_rate = Get32KHzSampleRate();
event_type_ai = CoreTiming::RegisterEvent("AICallback", Update);
g_sound_stream->GetMixer()->SetDMAInputSampleRate(GetAIDSampleRate());
g_sound_stream->GetMixer()->SetStreamInputSampleRate(GetAISSampleRate());
}
void Shutdown()