NVENCSTATUS CNvHWEncoder::Initialize(void* device, NV_ENC_DEVICE_TYPE deviceType) { NVENCSTATUS nvStatus = NV_ENC_SUCCESS; MYPROC nvEncodeAPICreateInstance; // function pointer to create instance in nvEncodeAPI m_hinstLib = dlopen("libnvidia-encode.so.1", RTLD_LAZY); if (m_hinstLib == NULL) return NV_ENC_ERR_OUT_OF_MEMORY; nvEncodeAPICreateInstance = (MYPROC)dlsym(m_hinstLib, "NvEncodeAPICreateInstance"); if (nvEncodeAPICreateInstance == NULL) return NV_ENC_ERR_OUT_OF_MEMORY; m_pEncodeAPI = new NV_ENCODE_API_FUNCTION_LIST; if (m_pEncodeAPI == NULL) return NV_ENC_ERR_OUT_OF_MEMORY; memset(m_pEncodeAPI, 0, sizeof(NV_ENCODE_API_FUNCTION_LIST)); m_pEncodeAPI->version = NV_ENCODE_API_FUNCTION_LIST_VER; nvStatus = nvEncodeAPICreateInstance(m_pEncodeAPI); if (nvStatus != NV_ENC_SUCCESS) return nvStatus; nvStatus = NvEncOpenEncodeSessionEx(device, deviceType); if (nvStatus != NV_ENC_SUCCESS) return nvStatus; return NV_ENC_SUCCESS; }
NVENCSTATUS CNvHWEncoder::Initialize(void* device, NV_ENC_DEVICE_TYPE deviceType) { NVENCSTATUS nvStatus = NV_ENC_SUCCESS; MYPROC nvEncodeAPICreateInstance; // function pointer to create instance in nvEncodeAPI #if defined(NV_WINDOWS) #if defined (_WIN64) m_hinstLib = LoadLibrary(TEXT("nvEncodeAPI64.dll")); #else m_hinstLib = LoadLibrary(TEXT("nvEncodeAPI.dll")); #endif #else m_hinstLib = dlopen("libnvidia-encode.so.1", RTLD_LAZY); #endif if (m_hinstLib == NULL) return NV_ENC_ERR_OUT_OF_MEMORY; #if defined(NV_WINDOWS) nvEncodeAPICreateInstance = (MYPROC)GetProcAddress(m_hinstLib, "NvEncodeAPICreateInstance"); #else nvEncodeAPICreateInstance = (MYPROC)dlsym(m_hinstLib, "NvEncodeAPICreateInstance"); #endif if (nvEncodeAPICreateInstance == NULL) return NV_ENC_ERR_OUT_OF_MEMORY; m_pEncodeAPI = new NV_ENCODE_API_FUNCTION_LIST; if (m_pEncodeAPI == NULL) return NV_ENC_ERR_OUT_OF_MEMORY; memset(m_pEncodeAPI, 0, sizeof(NV_ENCODE_API_FUNCTION_LIST)); m_pEncodeAPI->version = NV_ENCODE_API_FUNCTION_LIST_VER; nvStatus = nvEncodeAPICreateInstance(m_pEncodeAPI); if (nvStatus != NV_ENC_SUCCESS) return nvStatus; nvStatus = NvEncOpenEncodeSessionEx(device, deviceType); if (nvStatus != NV_ENC_SUCCESS) return nvStatus; return NV_ENC_SUCCESS; }