This commit is contained in:
RobertoFresca 2016-08-18 00:52:37 -03:00
commit 0352649456

View File

@ -229,6 +229,7 @@ public:
m_overflows(0),
m_underflows(0),
m_in_underflow(FALSE),
XAudio2Create(nullptr),
m_initialized(FALSE)
{
}
@ -596,12 +597,21 @@ void sound_xaudio2::submit_needed()
XAUDIO2_VOICE_STATE state;
m_sourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
// If we have a too many buffers on the queue, flush to resync
if (state.BuffersQueued > 2)
m_sourceVoice->FlushSourceBuffers();
std::lock_guard<std::mutex> lock(m_buffer_lock);
// If we have buffers queued into XAudio and our current in-memory buffer
// isn't yet full, there's no need to submit it
if (state.BuffersQueued >= 1 && m_queue.empty())
return;
// We do however want to achieve some kind of minimal latency, so if the queued buffers
// are greater than 2, flush them to re-sync the audio
if (state.BuffersQueued > 2)
{
m_sourceVoice->FlushSourceBuffers();
m_overflows++;
}
// Roll the buffer
roll_buffer();
@ -685,7 +695,7 @@ void sound_xaudio2::roll_buffer()
m_writepos = 0;
// We only want to keep a maximum number of buffers at any given time
// so remove any from queue greater than MAX_QUEUED_BUFFERS
// so remove any from queue greater than our target count
if (m_queue.size() > m_buffer_count)
{
xaudio2_buffer *next_buffer = &m_queue.front();