Fixed GB_audio_get_queue_length to actually be the length rather than size, fixed XAudio2.7 audio overflow crash, changed the maximum lag limit to 1/8s rather than 1/4s. Closes #473

This commit is contained in:
Lior Halphon 2022-07-18 21:56:47 +03:00
parent d31f34cab4
commit a856566b54
3 changed files with 9 additions and 9 deletions

View File

@ -52,7 +52,7 @@ static unsigned _audio_get_frequency(void)
static size_t _audio_get_queue_length(void)
{
return SDL_GetQueuedAudioSize(device_id);
return SDL_GetQueuedAudioSize(device_id) / sizeof(GB_sample_t);
}
static void _audio_queue_sample(GB_sample_t *sample)

View File

@ -23,23 +23,23 @@ static WAVEFORMATEX wave_format = {
.cbSize = 0
};
static inline HRESULT XAudio2Create(IXAudio2 **ppXAudio2,
static inline HRESULT XAudio2Create(IXAudio2 **out,
UINT32 Flags,
XAUDIO2_PROCESSOR XAudio2Processor)
{
IXAudio2 *pXAudio2;
IXAudio2 *xaudio2;
LoadLibraryEx("xaudio2_7.dll", NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
HRESULT hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void**)&pXAudio2);
HRESULT hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void **)&xaudio2);
if (SUCCEEDED(hr)) {
hr = pXAudio2->lpVtbl->Initialize(pXAudio2, Flags, XAudio2Processor);
hr = xaudio2->lpVtbl->Initialize(xaudio2, Flags, XAudio2Processor);
}
if (SUCCEEDED(hr)) {
*ppXAudio2 = pXAudio2;
*out = xaudio2;
}
else if (pXAudio2) {
pXAudio2->lpVtbl->Release(pXAudio2);
else if (xaudio2) {
xaudio2->lpVtbl->Release(xaudio2);
}
return hr;
}

View File

@ -523,7 +523,7 @@ static void gb_audio_callback(GB_gameboy_t *gb, GB_sample_t *sample)
}
}
if (GB_audio_get_queue_length() / sizeof(*sample) > GB_audio_get_frequency() / 4) {
if (GB_audio_get_queue_length() > GB_audio_get_frequency() / 8) { // Maximum lag of 0.125s
return;
}