diff --git a/audio/xaudio-c/xaudio-c.c b/audio/xaudio-c/xaudio-c.c index 8450fd8f1f..af09648698 100644 --- a/audio/xaudio-c/xaudio-c.c +++ b/audio/xaudio-c/xaudio-c.c @@ -91,13 +91,14 @@ xaudio2_t *xaudio2_new(unsigned samplerate, unsigned channels, size_t size) if (!handle->hEvent) goto error; - IXAudio2SourceVoice_Start(handle->pSourceVoice, 0, XAUDIO2_COMMIT_NOW); - handle->bufsize = size / MAX_BUFFERS; handle->buf = (uint8_t*)calloc(1, handle->bufsize * MAX_BUFFERS); if (!handle->buf) goto error; + if (FAILED(IXAudio2SourceVoice_Start(handle->pSourceVoice, 0, XAUDIO2_COMMIT_NOW))) + goto error; + return handle; error: diff --git a/audio/xaudio.c b/audio/xaudio.c index 0eab5b8442..0bf9741eea 100644 --- a/audio/xaudio.c +++ b/audio/xaudio.c @@ -31,8 +31,8 @@ static void *xa_init(const char *device, unsigned rate, unsigned latency) if (latency < 8) latency = 8; // Do not allow shenanigans. - xa_t *xa = (xa_t*)calloc(1, sizeof(xa_t)); - if (xa == NULL) + xa_t *xa = (xa_t*)calloc(1, sizeof(*xa)); + if (!xa) return NULL; size_t bufsize = latency * rate / 1000; @@ -46,6 +46,7 @@ static void *xa_init(const char *device, unsigned rate, unsigned latency) free(xa); return NULL; } + return xa; } @@ -60,6 +61,7 @@ static ssize_t xa_write(void *data, const void *buf, size_t size) if (avail < size) size = avail; } + size_t ret = xaudio2_write(xa->xa, buf, size); if (ret == 0) return -1; @@ -111,4 +113,3 @@ const audio_driver_t audio_xa = { xa_use_float, "xaudio" }; - diff --git a/driver.c b/driver.c index 4495c828d7..a18e24a34f 100644 --- a/driver.c +++ b/driver.c @@ -177,8 +177,8 @@ void init_drivers(void) void uninit_drivers(void) { - uninit_video_input(); uninit_audio(); + uninit_video_input(); } #ifdef HAVE_DYLIB @@ -341,8 +341,10 @@ void init_audio(void) void uninit_audio(void) { - free(g_extern.audio_data.conv_outsamples); g_extern.audio_data.conv_outsamples = NULL; + free(g_extern.audio_data.conv_outsamples); + g_extern.audio_data.conv_outsamples = NULL; g_extern.audio_data.data_ptr = 0; + free(g_extern.audio_data.rewind_buf); g_extern.audio_data.rewind_buf = NULL; @@ -360,6 +362,7 @@ void uninit_audio(void) free(g_extern.audio_data.data); g_extern.audio_data.data = NULL; + free(g_extern.audio_data.outsamples); g_extern.audio_data.outsamples = NULL; diff --git a/ssnes.c b/ssnes.c index 780baa8ae0..1a5513addc 100644 --- a/ssnes.c +++ b/ssnes.c @@ -299,7 +299,7 @@ static bool audio_flush(const int16_t *data, size_t samples) { float f[0x10000]; int16_t i[0x10000 * sizeof(float) / sizeof(int16_t)]; - } static const empty_buf = {{0}}; + } static empty_buf; // Const here would require us to statically initialize it, bloating the binary. if (g_extern.audio_data.use_float) {