Added mutex sync when changing sound properties of the emulator.

This commit is contained in:
Matthew Budd 2020-07-05 16:54:33 -04:00
parent ac43cc3e62
commit 70a00fab13
1 changed files with 37 additions and 0 deletions

View File

@ -262,8 +262,10 @@ void ConsoleSndConfDialog_t::bufSizeChanged(int value)
g_config->setOption ("SDL.Sound.BufSize", value);
// reset sound subsystem for changes to take effect
fceuWrapperLock();
KillSound ();
InitSound ();
fceuWrapperUnLock();
}
//----------------------------------------------------
void ConsoleSndConfDialog_t::volumeChanged(int value)
@ -275,7 +277,10 @@ void ConsoleSndConfDialog_t::volumeChanged(int value)
volLbl->setText(stmp);
g_config->setOption ("SDL.Sound.Volume", value);
fceuWrapperLock();
FCEUI_SetSoundVolume (value);
fceuWrapperUnLock();
}
//----------------------------------------------------
void ConsoleSndConfDialog_t::triangleChanged(int value)
@ -287,7 +292,10 @@ void ConsoleSndConfDialog_t::triangleChanged(int value)
triLbl->setText(stmp);
g_config->setOption ("SDL.Sound.TriangleVolume", value);
fceuWrapperLock();
FCEUI_SetTriangleVolume (value);
fceuWrapperUnLock();
}
//----------------------------------------------------
void ConsoleSndConfDialog_t::square1Changed(int value)
@ -299,7 +307,10 @@ void ConsoleSndConfDialog_t::square1Changed(int value)
sqr1Lbl->setText(stmp);
g_config->setOption ("SDL.Sound.Square1Volume", value);
fceuWrapperLock();
FCEUI_SetSquare1Volume (value);
fceuWrapperUnLock();
}
//----------------------------------------------------
void ConsoleSndConfDialog_t::square2Changed(int value)
@ -311,7 +322,10 @@ void ConsoleSndConfDialog_t::square2Changed(int value)
sqr2Lbl->setText(stmp);
g_config->setOption ("SDL.Sound.Square2Volume", value);
fceuWrapperLock();
FCEUI_SetSquare2Volume (value);
fceuWrapperUnLock();
}
//----------------------------------------------------
void ConsoleSndConfDialog_t::noiseChanged(int value)
@ -323,7 +337,10 @@ void ConsoleSndConfDialog_t::noiseChanged(int value)
nseLbl->setText(stmp);
g_config->setOption ("SDL.Sound.NoiseVolume", value);
fceuWrapperLock();
FCEUI_SetNoiseVolume (value);
fceuWrapperUnLock();
}
//----------------------------------------------------
void ConsoleSndConfDialog_t::pcmChanged(int value)
@ -335,7 +352,10 @@ void ConsoleSndConfDialog_t::pcmChanged(int value)
pcmLbl->setText(stmp);
g_config->setOption ("SDL.Sound.PCMVolume", value);
fceuWrapperLock();
FCEUI_SetPCMVolume (value);
fceuWrapperUnLock();
}
//----------------------------------------------------
void ConsoleSndConfDialog_t::enaSoundStateChange(int value)
@ -345,15 +365,22 @@ void ConsoleSndConfDialog_t::enaSoundStateChange(int value)
int last_soundopt;
g_config->getOption ("SDL.Sound", &last_soundopt);
g_config->setOption ("SDL.Sound", 1);
fceuWrapperLock();
if (GameInfo && !last_soundopt)
{
InitSound ();
}
fceuWrapperUnLock();
}
else
{
g_config->setOption ("SDL.Sound", 0);
fceuWrapperLock();
KillSound ();
fceuWrapperUnLock();
}
}
//----------------------------------------------------
@ -362,12 +389,18 @@ void ConsoleSndConfDialog_t::enaSoundLowPassChange(int value)
if (value)
{
g_config->setOption ("SDL.Sound.LowPass", 1);
fceuWrapperLock();
FCEUI_SetLowPass (1);
fceuWrapperUnLock();
}
else
{
g_config->setOption ("SDL.Sound.LowPass", 0);
fceuWrapperLock();
FCEUI_SetLowPass (0);
fceuWrapperUnLock();
}
g_config->save ();
}
@ -394,8 +427,10 @@ void ConsoleSndConfDialog_t::soundQualityChanged(int index)
g_config->setOption ("SDL.Sound.Quality", qualitySelect->itemData(index).toInt() );
// reset sound subsystem for changes to take effect
fceuWrapperLock();
KillSound ();
InitSound ();
fceuWrapperUnLock();
g_config->save ();
}
//----------------------------------------------------
@ -405,8 +440,10 @@ void ConsoleSndConfDialog_t::soundRateChanged(int index)
g_config->setOption ("SDL.Sound.Rate", rateSelect->itemData(index).toInt() );
// reset sound subsystem for changes to take effect
fceuWrapperLock();
KillSound ();
InitSound ();
fceuWrapperUnLock();
g_config->save ();
}
//----------------------------------------------------