NVENCSTATUS NVEncFilterDenoiseGauss::init(shared_ptr<NVEncFilterParam> pParam, shared_ptr<RGYLog> pPrintMes) { NVENCSTATUS sts = NV_ENC_SUCCESS; m_pPrintMes = pPrintMes; auto pGaussParam = std::dynamic_pointer_cast<NVEncFilterParamGaussDenoise>(pParam); if (!pGaussParam) { AddMessage(RGY_LOG_ERROR, _T("Invalid parameter type.\n")); return NV_ENC_ERR_INVALID_PARAM; } if (!check_if_nppi_dll_available()) { AddMessage(RGY_LOG_ERROR, _T("vpp-gauss requires \"%s\", not available on your system.\n"), NPPI_DLL_NAME); return NV_ENC_ERR_INVALID_PARAM; } //パラメータチェック if (pGaussParam->frameOut.height <= 0 || pGaussParam->frameOut.width <= 0) { AddMessage(RGY_LOG_ERROR, _T("Invalid parameter.\n")); return NV_ENC_ERR_INVALID_PARAM; } auto cudaerr = AllocFrameBuf(pGaussParam->frameOut, 1); if (cudaerr != CUDA_SUCCESS) { AddMessage(RGY_LOG_ERROR, _T("failed to allocate memory: %s.\n"), char_to_tstring(cudaGetErrorName(cudaerr)).c_str()); return NV_ENC_ERR_OUT_OF_MEMORY; } pGaussParam->frameOut.pitch = m_pFrameBuf[0]->frame.pitch; m_sFilterInfo = strsprintf(_T("denoise(gauss): mask size: %s"), get_chr_from_value(list_nppi_gauss, pGaussParam->masksize)); m_pParam = pParam; return sts; }
int getGPUInfo(const char *VendorName, TCHAR *buffer, unsigned int buffer_size, int device_id, bool driver_version_only, bool use_opencl) { #if ENCODER_NVENC && !FOR_AUO if (!use_opencl) { NVEncoderGPUInfo nvGPUInfo(device_id, true); const auto gpulist = nvGPUInfo.getGPUList(); if (gpulist.size() > 0) { tstring gpu_info; const auto& gpuInfo = std::find_if(gpulist.begin(), gpulist.end(), [device_id](const NVGPUInfo& info) { return info.id == device_id; }); if (gpuInfo != gpulist.end()) { if (driver_version_only) { if (gpuInfo->nv_driver_version) { gpu_info = strsprintf(_T("%d.%d"), gpuInfo->nv_driver_version / 1000, (gpuInfo->nv_driver_version % 1000) / 10); } } else { gpu_info = strsprintf(_T("#%d: %s"), gpuInfo->id, gpuInfo->name.c_str()); if (gpuInfo->cuda_cores > 0) { gpu_info += strsprintf(_T(" (%d cores"), gpuInfo->cuda_cores); if (gpuInfo->clock_rate > 0) { gpu_info += strsprintf(_T(", %d MHz"), gpuInfo->clock_rate / 1000); } gpu_info += strsprintf(_T(")")); } if (gpuInfo->pcie_gen > 0 && gpuInfo->pcie_link > 0) { gpu_info += strsprintf(_T("[PCIe%dx%d]"), gpuInfo->pcie_gen, gpuInfo->pcie_link); } if (gpuInfo->nv_driver_version) { gpu_info += strsprintf(_T("[%d.%d]"), gpuInfo->nv_driver_version / 1000, (gpuInfo->nv_driver_version % 1000) / 10); } } _tcscpy_s(buffer, buffer_size, gpu_info.c_str()); return 0; } } } #endif //#if ENCODER_NVENC && !FOR_AUO #if !ENABLE_OPENCL _stprintf_s(buffer, buffer_size, _T("Unknown (not compiled with OpenCL support)")); return 0; #else int ret = CL_SUCCESS; cl_func_t cl = { 0 }; cl_data_t data = { 0 }; if (CL_SUCCESS != (ret = cl_get_func(&cl))) { _tcscpy_s(buffer, buffer_size, _T("Unknown (Failed to load OpenCL.dll)")); } else if (CL_SUCCESS != (ret = cl_get_platform_and_device(VendorName, CL_DEVICE_TYPE_GPU, &data, &cl))) { _stprintf_s(buffer, buffer_size, _T("Unknown (Failed to find %s GPU)"), to_tchar(VendorName).c_str()); } else { if (driver_version_only) cl_get_driver_version(&data, &cl, buffer, buffer_size); else cl_create_info_string(&data, &cl, buffer, buffer_size); } cl_release(&data, &cl); return ret; #endif // !ENABLE_OPENCL }