From 70a00fab1354ef6a87a9ba41e049f41eaed642c3 Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Sun, 5 Jul 2020 16:54:33 -0400 Subject: [PATCH] Added mutex sync when changing sound properties of the emulator. --- src/drivers/Qt/ConsoleSoundConf.cpp | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/drivers/Qt/ConsoleSoundConf.cpp b/src/drivers/Qt/ConsoleSoundConf.cpp index f5b34727..9b091fd6 100644 --- a/src/drivers/Qt/ConsoleSoundConf.cpp +++ b/src/drivers/Qt/ConsoleSoundConf.cpp @@ -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 (); } //----------------------------------------------------