private static extern NvEncStatus NvEncodeAPICreateInstance32(ref NvEncApiFunctionList functionList);
public static NvEncStatus NvEncodeAPICreateInstance(ref NvEncApiFunctionList functionList) => Environment.Is64BitProcess ? NvEncodeAPICreateInstance64(ref functionList) : NvEncodeAPICreateInstance32(ref functionList);
/// <summary> /// Try to initialize NvEnc. Exceptions will not be thrown for failure. /// Once called, LibNvEnc.FunctionList becomes available. Calling after /// a successful initialization has no effect. /// </summary> /// <param name="failedDescription">Null if successful pr a detailed /// textual description of the failure reason.</param> /// /// <returns>Success or the category of failure.</returns> /// <seealso cref="Initialize()"/> /// <seealso cref="FunctionList"/> public static LibNcEncInitializeStatus TryInitialize( out string?failedDescription) { failedDescription = null; // Thread safety isn't an issue because there's no loss on // successful re-entrance. if (_isInitialized) { return(LibNcEncInitializeStatus.Success); } uint version; NvEncStatus status; try { status = NvEncodeAPIGetMaxSupportedVersion(out version); } catch (DllNotFoundException e) { failedDescription = e.ToString(); return(LibNcEncInitializeStatus.DllNotFound); } catch (Exception e) { failedDescription = e.ToString(); return(LibNcEncInitializeStatus.Failure); } if (status != NvEncStatus.Success) { failedDescription = $"{nameof(NvEncodeAPIGetMaxSupportedVersion)} returned unexpected status, {status}"; return(LibNcEncInitializeStatus.Failure); } const uint currentVersion = (NVENCAPI_MAJOR_VERSION << 4) | NVENCAPI_MINOR_VERSION; if (currentVersion > version) { failedDescription = $"Installed NvEnc version is {version >> 4}.{version & 0xF}, version must be at least {NVENCAPI_MAJOR_VERSION}.{NVENCAPI_MINOR_VERSION}. Please upgrade the nvidia display drivers."; return(LibNcEncInitializeStatus.UnsupportedVersion); } var functionList = new NvEncApiFunctionList { Version = NV_ENCODE_API_FUNCTION_LIST_VER }; status = NvEncodeAPICreateInstance(ref functionList); if (status != NvEncStatus.Success) { failedDescription = $"{nameof(NvEncodeAPICreateInstance)} returned unexpected status, {status}"; return(LibNcEncInitializeStatus.Failure); } FunctionList = functionList; _isInitialized = true; return(LibNcEncInitializeStatus.Success); }