コード例 #1
0
ファイル: Encoder_QSV.cpp プロジェクト: boogisha/OBS
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;
}
コード例 #2
0
ファイル: Encoder_QSV.cpp プロジェクト: DJLuciK/OBS
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;
}