Changed SDL audio locks to not be called as often. Gives slight performance increase.

This commit is contained in:
mjbudd77 2021-08-08 14:28:10 -04:00
parent 52b5ee51f4
commit f834069180
1 changed files with 40 additions and 27 deletions

View File

@ -284,7 +284,7 @@ WriteSound(int32 *buf,
if ( s_BufferIn >= s_BufferSize50 ) if ( s_BufferIn >= s_BufferSize50 )
{ {
ovrFlowSkip += 1000; ovrFlowSkip += 100;
} }
} }
else else
@ -312,8 +312,12 @@ WriteSound(int32 *buf,
if ( uflowMode ) if ( uflowMode )
{ // Underflow mode { // Underflow mode
SDL_LockAudio();
while (Count) while (Count)
{ {
if ( s_BufferIn == s_BufferSize )
{
SDL_UnlockAudio();
while (s_BufferIn == s_BufferSize) while (s_BufferIn == s_BufferSize)
{ {
SDL_Delay(1); waitCount++; SDL_Delay(1); waitCount++;
@ -324,20 +328,21 @@ WriteSound(int32 *buf,
return; return;
} }
} }
SDL_LockAudio();
}
for (int i=0; i<udrFlowDup; i++) for (int i=0; i<udrFlowDup; i++)
{ {
s_Buffer[s_BufferWrite] = *buf; s_Buffer[s_BufferWrite] = *buf;
s_BufferWrite = (s_BufferWrite + 1) % s_BufferSize; s_BufferWrite = (s_BufferWrite + 1) % s_BufferSize;
SDL_LockAudio();
s_BufferIn++; s_BufferIn++;
SDL_UnlockAudio();
} }
Count--; Count--;
buf++; buf++;
} }
SDL_UnlockAudio();
} }
else else
{ {
@ -345,8 +350,12 @@ WriteSound(int32 *buf,
{ // Perfect one to one realtime { // Perfect one to one realtime
skipCounter = 0; skipCounter = 0;
SDL_LockAudio();
while (Count) while (Count)
{ {
if (s_BufferIn == s_BufferSize)
{
SDL_UnlockAudio();
while (s_BufferIn == s_BufferSize) while (s_BufferIn == s_BufferSize)
{ {
SDL_Delay(1); waitCount++; SDL_Delay(1); waitCount++;
@ -357,22 +366,26 @@ WriteSound(int32 *buf,
return; return;
} }
} }
SDL_LockAudio();
}
s_Buffer[s_BufferWrite] = *buf; s_Buffer[s_BufferWrite] = *buf;
Count--; Count--;
s_BufferWrite = (s_BufferWrite + 1) % s_BufferSize; s_BufferWrite = (s_BufferWrite + 1) % s_BufferSize;
SDL_LockAudio();
s_BufferIn++; s_BufferIn++;
SDL_UnlockAudio();
buf++; buf++;
} }
SDL_UnlockAudio();
} }
else else
{ // Overflow mode { // Overflow mode
SDL_LockAudio();
while (Count) while (Count)
{ {
if (s_BufferIn == s_BufferSize)
{
SDL_UnlockAudio();
while (s_BufferIn == s_BufferSize) while (s_BufferIn == s_BufferSize)
{ {
SDL_Delay(1); waitCount++; SDL_Delay(1); waitCount++;
@ -383,15 +396,15 @@ WriteSound(int32 *buf,
return; return;
} }
} }
SDL_LockAudio();
}
if ( skipCounter >= ovrFlowSkip ) if ( skipCounter >= ovrFlowSkip )
{ {
s_Buffer[s_BufferWrite] = *buf; s_Buffer[s_BufferWrite] = *buf;
s_BufferWrite = (s_BufferWrite + 1) % s_BufferSize; s_BufferWrite = (s_BufferWrite + 1) % s_BufferSize;
SDL_LockAudio();
s_BufferIn++; s_BufferIn++;
SDL_UnlockAudio();
skipCounter -= ovrFlowSkip; skipCounter -= ovrFlowSkip;
} }
@ -400,7 +413,7 @@ WriteSound(int32 *buf,
Count--; Count--;
buf++; buf++;
} }
SDL_UnlockAudio();
} }
} }