mirror of https://github.com/stella-emu/stella.git
Dynamically adjust fragment buffer size based on fragmen size and period.
This commit is contained in:
parent
13eefbb542
commit
f87316bfdb
|
@ -44,7 +44,8 @@ SoundSDL2::SoundSDL2(OSystem& osystem)
|
||||||
myVolume(100),
|
myVolume(100),
|
||||||
myVolumeFactor(0xffff),
|
myVolumeFactor(0xffff),
|
||||||
myAudioQueue(0),
|
myAudioQueue(0),
|
||||||
myCurrentFragment(0)
|
myCurrentFragment(0),
|
||||||
|
myFragmentBufferSize(0)
|
||||||
{
|
{
|
||||||
myOSystem.logMessage("SoundSDL2::SoundSDL2 started ...", 2);
|
myOSystem.logMessage("SoundSDL2::SoundSDL2 started ...", 2);
|
||||||
|
|
||||||
|
@ -124,6 +125,12 @@ void SoundSDL2::open(shared_ptr<AudioQueue> audioQueue)
|
||||||
myCurrentFragment = 0;
|
myCurrentFragment = 0;
|
||||||
myTimeIndex = 0;
|
myTimeIndex = 0;
|
||||||
myFragmentIndex = 0;
|
myFragmentIndex = 0;
|
||||||
|
myFragmentBufferSize = static_cast<uInt32>(
|
||||||
|
ceil(
|
||||||
|
1.5 * static_cast<double>(myHardwareSpec.samples) / static_cast<double>(myAudioQueue->fragmentSize())
|
||||||
|
* static_cast<double>(myAudioQueue->sampleRate()) / static_cast<double>(myHardwareSpec.freq)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// Adjust volume to that defined in settings
|
// Adjust volume to that defined in settings
|
||||||
setVolume(myOSystem.settings().getInt("volume"));
|
setVolume(myOSystem.settings().getInt("volume"));
|
||||||
|
@ -215,7 +222,7 @@ void SoundSDL2::adjustVolume(Int8 direction)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL2::processFragment(Int16* stream, uInt32 length)
|
void SoundSDL2::processFragment(Int16* stream, uInt32 length)
|
||||||
{
|
{
|
||||||
if (myUnderrun && myAudioQueue->size() > 1) {
|
if (myUnderrun && myAudioQueue->size() > myFragmentBufferSize) {
|
||||||
myUnderrun = false;
|
myUnderrun = false;
|
||||||
myCurrentFragment = myAudioQueue->dequeue(myCurrentFragment);
|
myCurrentFragment = myAudioQueue->dequeue(myCurrentFragment);
|
||||||
myFragmentIndex = 0;
|
myFragmentIndex = 0;
|
||||||
|
|
|
@ -123,6 +123,7 @@ class SoundSDL2 : public Sound
|
||||||
Int16* myCurrentFragment;
|
Int16* myCurrentFragment;
|
||||||
uInt32 myTimeIndex;
|
uInt32 myTimeIndex;
|
||||||
uInt32 myFragmentIndex;
|
uInt32 myFragmentIndex;
|
||||||
|
uInt32 myFragmentBufferSize;
|
||||||
bool myUnderrun;
|
bool myUnderrun;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in New Issue