bool CheckQSVHardwareSupport(bool log=true) { safe_handle helper_process, helper_thread; IPCWaiter waiter; String event_prefix; if(!spawn_helper(event_prefix, helper_process, helper_thread, waiter)) return false; ipc_init_request req((event_prefix + INIT_REQUEST).Array()); req->mode = req->MODE_QUERY; req.signal(); if(!waiter.wait(INFINITE)) return false; DWORD code = 0; if(!GetExitCodeProcess(helper_process.h, &code)) return false; if(code == 0) { if(log) Log(TEXT("Found QSV hardware support")); return true; } if(log) Log(TEXT("Failed to initialize QSV hardware session")); return false; }
bool CheckQSVHardwareSupport(bool log=true, bool *configurationWarning = nullptr) { safe_handle helper_process, helper_thread; IPCWaiter waiter; String event_prefix; if(!spawn_helper(event_prefix, helper_process, helper_thread, waiter)) return false; ipc_init_request req((event_prefix + INIT_REQUEST).Array()); req->mode = req->MODE_QUERY; req.signal(); if(!waiter.wait(INFINITE)) return false; DWORD code = 0; if(!GetExitCodeProcess(helper_process.h, &code)) return false; if(code == 0) { if(log) Log(TEXT("Found QSV hardware support")); return true; } static bool warning_logged = false; if (code == EXIT_NO_INTEL_GRAPHICS && (!warning_logged || log)) { Log(L"No Intel graphics adapter visible in QSVHelper.exe, Optimus problem?"); warning_logged = true; } if (configurationWarning) *configurationWarning = code == EXIT_NO_INTEL_GRAPHICS && qsv_get_cpu_platform() != QSV_CPU_PLATFORM_UNKNOWN; if(log) Log(TEXT("Failed to initialize QSV hardware session")); return false; }