Add back fix for FIRE-11266 / BUG-3549 / MAINT-2983 (Changing audio device now requires relog to restore sounds) to FMOD Studio

master
Ansariel 2018-08-01 01:50:45 +02:00
parent 147e006dbb
commit fa666a29a4
1 changed files with 44 additions and 0 deletions

View File

@ -49,6 +49,43 @@ const U32 EXTRA_SOUND_CHANNELS = 10;
FMOD_RESULT F_CALLBACK windDSPCallback(FMOD_DSP_STATE *dsp_state, float *inbuffer, float *outbuffer, unsigned int length, int inchannels, int *outchannels);
// <FS> FIRE-11266 / BUG-3549 / MAINT-2983: Changing audio device now requires relog to restore sounds
#if LL_WINDOWS
FMOD_RESULT F_CALLBACK systemCallback(FMOD_SYSTEM *system, FMOD_SYSTEM_CALLBACK_TYPE type, void *commanddata1, void *commanddata2, void* userdata)
{
FMOD::System *sys = (FMOD::System *)system;
FMOD_RESULT result;
switch (type)
{
case FMOD_SYSTEM_CALLBACK_DEVICELISTCHANGED:
{
int drivers;
sys->getNumDrivers(&drivers);
if (drivers <= 0)
{
break;
}
for (int i = 0; i < drivers; ++i)
{
result = sys->setDriver(i);
if (result == FMOD_OK)
{
break;
}
}
break;
}
default:
break;
}
return FMOD_OK;
}
#endif
// </FS>
FMOD::ChannelGroup *LLAudioEngine_FMODSTUDIO::mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT] = {0};
LLAudioEngine_FMODSTUDIO::LLAudioEngine_FMODSTUDIO(bool enable_profiler, U32 resample_method)
@ -110,6 +147,13 @@ bool LLAudioEngine_FMODSTUDIO::init(const S32 num_channels, void* userdata)
result = mSystem->setSoftwareChannels(num_channels + EXTRA_SOUND_CHANNELS);
Check_FMOD_Error(result,"FMOD::System::setSoftwareChannels");
// <FS> FIRE-11266 / BUG-3549 / MAINT-2983: Changing audio device now requires relog to restore sounds
#if LL_WINDOWS
result = mSystem->setCallback(systemCallback);
Check_FMOD_Error(result, "FMOD::System::setCallback");
#endif
// </FS>
FMOD_ADVANCEDSETTINGS adv_settings = { };
adv_settings.cbSize = sizeof(FMOD_ADVANCEDSETTINGS);
switch (mResampleMethod)