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 committed 2022-07-18 21:56:47 +03:00
1 parent d31f34cab4
commit a856566b54
3 files changed
+9 -9

No files matched your search

+1 -1
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)
+7 -7
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;
}
+1 -1
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;
}