obs-ffmpeg: Don't load AMF DLL before amf-test

In the event that simply loading the AMF DLL causes initialization code
to run that might crash, don't load the DLL before the AMF test process
has succeeded. Instead, we load the DLL as data to see if it exists,
then run the AMF test, then load the DLL for real.
This commit is contained in:
Richard Stanway 2022-07-22 01:03:30 +02:00 committed by Jim
parent 67f7a84076
commit 00408b6b3b

View File

@ -1602,10 +1602,15 @@ static void register_hevc()
extern "C" void amf_load(void)
try {
AMF_RESULT res;
HMODULE amf_module_test;
amf_module = LoadLibraryW(AMF_DLL_NAME);
if (!amf_module)
/* Check if the DLL is present before running the more expensive */
/* obs-amf-test.exe, but load it as data so it can't crash us */
amf_module_test =
LoadLibraryExW(AMF_DLL_NAME, nullptr, LOAD_LIBRARY_AS_DATAFILE);
if (!amf_module_test)
throw "No AMF library";
FreeLibrary(amf_module_test);
/* ----------------------------------- */
/* Check for AVC/HEVC support */
@ -1667,6 +1672,10 @@ try {
/* ----------------------------------- */
/* Init AMF */
amf_module = LoadLibraryW(AMF_DLL_NAME);
if (!amf_module)
throw "AMF library failed to load";
AMFInit_Fn init =
(AMFInit_Fn)GetProcAddress(amf_module, AMF_INIT_FUNCTION_NAME);
if (!init)