summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_wasapi_utils.c
diff options
context:
space:
mode:
authorKevin Mitchell <kevmitch@gmail.com>2014-11-28 10:43:48 -0800
committerKevin Mitchell <kevmitch@gmail.com>2014-11-28 10:52:48 -0800
commit77f675a15156519b143d4057e3359e5303a3c5dd (patch)
treee76f879c8c7ee44772cdf3ce92a4aad005822883 /audio/out/ao_wasapi_utils.c
parentb83e447e2b8aa830592dbac8293a45cc0400a806 (diff)
downloadmpv-77f675a15156519b143d4057e3359e5303a3c5dd.tar.bz2
mpv-77f675a15156519b143d4057e3359e5303a3c5dd.tar.xz
ao/wasapi: handle VistaBlob failure more gracefully
Diffstat (limited to 'audio/out/ao_wasapi_utils.c')
-rwxr-xr-xaudio/out/ao_wasapi_utils.c22
1 files changed, 17 insertions, 5 deletions
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);