Fixed a buffer overflow in the OpenAL buffer.
This commit is contained in:
parent
19ab5bf50d
commit
718a1b5ded
|
@ -200,6 +200,7 @@ void OpenALStream::SoundLoop()
|
||||||
u64 num_samples_to_render = (audio_dma_period * ais_samples_per_second) / SystemTimers::GetTicksPerSecond();
|
u64 num_samples_to_render = (audio_dma_period * ais_samples_per_second) / SystemTimers::GetTicksPerSecond();
|
||||||
|
|
||||||
unsigned int numSamples = (unsigned int)num_samples_to_render;
|
unsigned int numSamples = (unsigned int)num_samples_to_render;
|
||||||
|
unsigned int minSamples = surround_capable ? 240 : 0; // DPL2 accepts 240 samples minimum (FWRDURATION)
|
||||||
|
|
||||||
numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples;
|
numSamples = (numSamples > OAL_MAX_SAMPLES) ? OAL_MAX_SAMPLES : numSamples;
|
||||||
numSamples = m_mixer->Mix(realtimeBuffer, numSamples);
|
numSamples = m_mixer->Mix(realtimeBuffer, numSamples);
|
||||||
|
@ -236,9 +237,15 @@ void OpenALStream::SoundLoop()
|
||||||
// Adjust SETTING_SEQUENCE_MS to balance between lag vs hollow audio
|
// Adjust SETTING_SEQUENCE_MS to balance between lag vs hollow audio
|
||||||
soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)(1 / (rate * rate)));
|
soundTouch.setSetting(SETTING_SEQUENCE_MS, (int)(1 / (rate * rate)));
|
||||||
soundTouch.setTempo(rate);
|
soundTouch.setTempo(rate);
|
||||||
|
if (rate > 10)
|
||||||
|
{
|
||||||
|
soundTouch.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * SURROUND_CHANNELS * OAL_MAX_BUFFERS);
|
|
||||||
if (nSamples > 0)
|
unsigned int nSamples = soundTouch.receiveSamples(sampleBuffer, OAL_MAX_SAMPLES * SIZE_FLOAT * OAL_MAX_BUFFERS);
|
||||||
|
|
||||||
|
if (nSamples > minSamples)
|
||||||
{
|
{
|
||||||
// Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer)
|
// Remove the Buffer from the Queue. (uiBuffer contains the Buffer ID for the unqueued Buffer)
|
||||||
if (iBuffersFilled == 0)
|
if (iBuffersFilled == 0)
|
||||||
|
|
Loading…
Reference in New Issue