mirror of
https://github.com/holub/mame
synced 2025-06-23 12:58:37 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
0352649456
@ -229,6 +229,7 @@ public:
|
|||||||
m_overflows(0),
|
m_overflows(0),
|
||||||
m_underflows(0),
|
m_underflows(0),
|
||||||
m_in_underflow(FALSE),
|
m_in_underflow(FALSE),
|
||||||
|
XAudio2Create(nullptr),
|
||||||
m_initialized(FALSE)
|
m_initialized(FALSE)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -596,12 +597,21 @@ void sound_xaudio2::submit_needed()
|
|||||||
XAUDIO2_VOICE_STATE state;
|
XAUDIO2_VOICE_STATE state;
|
||||||
m_sourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
|
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);
|
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 the buffer
|
||||||
roll_buffer();
|
roll_buffer();
|
||||||
|
|
||||||
@ -685,7 +695,7 @@ void sound_xaudio2::roll_buffer()
|
|||||||
m_writepos = 0;
|
m_writepos = 0;
|
||||||
|
|
||||||
// We only want to keep a maximum number of buffers at any given time
|
// 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)
|
if (m_queue.size() > m_buffer_count)
|
||||||
{
|
{
|
||||||
xaudio2_buffer *next_buffer = &m_queue.front();
|
xaudio2_buffer *next_buffer = &m_queue.front();
|
||||||
|
Loading…
Reference in New Issue
Block a user