From 77f675a15156519b143d4057e3359e5303a3c5dd Mon Sep 17 00:00:00 2001 From: Kevin Mitchell Date: Fri, 28 Nov 2014 10:43:48 -0800 Subject: ao/wasapi: handle VistaBlob failure more gracefully --- audio/out/ao_wasapi_utils.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'audio/out/ao_wasapi_utils.c') diff --git a/audio/out/ao_wasapi_utils.c b/audio/out/ao_wasapi_utils.c index 8a57c8660b..10b435dbe8 100755 --- a/audio/out/ao_wasapi_utils.c +++ b/audio/out/ao_wasapi_utils.c @@ -100,16 +100,25 @@ bool wasapi_fill_VistaBlob(wasapi_state *state) state->VistaBlob.hAvrt = LoadLibraryW(L"avrt.dll"); if (!state->VistaBlob.hAvrt) goto exit_label; + state->VistaBlob.pAvSetMmThreadCharacteristicsW = (HANDLE (WINAPI *)(LPCWSTR, LPDWORD)) - GetProcAddress(state->VistaBlob.hAvrt, "AvSetMmThreadCharacteristicsW"); + GetProcAddress(state->VistaBlob.hAvrt, "AvSetMmThreadCharacteristicsW"); + if (!state->VistaBlob.pAvSetMmThreadCharacteristicsW) + goto exit_label; + state->VistaBlob.pAvRevertMmThreadCharacteristics = (WINBOOL (WINAPI *)(HANDLE)) - GetProcAddress(state->VistaBlob.hAvrt, "AvRevertMmThreadCharacteristics"); + GetProcAddress(state->VistaBlob.hAvrt, "AvRevertMmThreadCharacteristics"); + if (!state->VistaBlob.pAvRevertMmThreadCharacteristics) + goto exit_label; + return true; exit_label: - if (state->VistaBlob.hAvrt) + if (state->VistaBlob.hAvrt) { FreeLibrary(state->VistaBlob.hAvrt); + state->VistaBlob.hAvrt = NULL; + } return false; } @@ -581,8 +590,11 @@ reinit: hr = init_session_display(state); EXIT_ON_ERROR(hr); - state->hTask = - state->VistaBlob.pAvSetMmThreadCharacteristicsW(L"Pro Audio", &state->taskIndex); + if (state->VistaBlob.hAvrt) { + state->hTask = + state->VistaBlob.pAvSetMmThreadCharacteristicsW(L"Pro Audio", &state->taskIndex); + } + MP_VERBOSE(state, "Format fixed. Using %lld byte buffer block size\n", (long long) state->buffer_block_size); -- cgit v1.2.3