mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
avcodec/nvenc: check maximum driver API version
This commit is contained in:
parent
a19989cae5
commit
df615efcf2
@ -155,8 +155,10 @@ static av_cold int nvenc_load_libraries(AVCodecContext *avctx)
|
||||
{
|
||||
NvencContext *ctx = avctx->priv_data;
|
||||
NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs;
|
||||
PNVENCODEAPIGETMAXSUPPORTEDVERSION nvenc_get_max_ver;
|
||||
PNVENCODEAPICREATEINSTANCE nvenc_create_instance;
|
||||
NVENCSTATUS err;
|
||||
uint32_t nvenc_max_ver;
|
||||
|
||||
#if CONFIG_CUDA
|
||||
dl_fn->cu_init = cuInit;
|
||||
@ -183,9 +185,25 @@ static av_cold int nvenc_load_libraries(AVCodecContext *avctx)
|
||||
|
||||
LOAD_LIBRARY(dl_fn->nvenc, NVENC_LIBNAME);
|
||||
|
||||
LOAD_SYMBOL(nvenc_get_max_ver, dl_fn->nvenc,
|
||||
"NvEncodeAPIGetMaxSupportedVersion");
|
||||
LOAD_SYMBOL(nvenc_create_instance, dl_fn->nvenc,
|
||||
"NvEncodeAPICreateInstance");
|
||||
|
||||
err = nvenc_get_max_ver(&nvenc_max_ver);
|
||||
if (err != NV_ENC_SUCCESS)
|
||||
return nvenc_print_error(avctx, err, "Failed to query nvenc max version");
|
||||
|
||||
av_log(avctx, AV_LOG_VERBOSE, "Loaded Nvenc version %d.%d\n", nvenc_max_ver >> 4, nvenc_max_ver & 0xf);
|
||||
|
||||
if ((NVENCAPI_MAJOR_VERSION << 4 | NVENCAPI_MINOR_VERSION) > nvenc_max_ver) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Driver does not support the required nvenc API version. "
|
||||
"Required: %d.%d Found: %d.%d\n",
|
||||
NVENCAPI_MAJOR_VERSION, NVENCAPI_MINOR_VERSION,
|
||||
nvenc_max_ver >> 4, nvenc_max_ver & 0xf);
|
||||
return AVERROR(ENOSYS);
|
||||
}
|
||||
|
||||
dl_fn->nvenc_funcs.version = NV_ENCODE_API_FUNCTION_LIST_VER;
|
||||
|
||||
err = nvenc_create_instance(&dl_fn->nvenc_funcs);
|
||||
|
@ -72,6 +72,7 @@ typedef CUresult(CUDAAPI *PCUCTXCREATE)(CUcontext *pctx, unsigned int flags, CUd
|
||||
typedef CUresult(CUDAAPI *PCUCTXPOPCURRENT)(CUcontext *pctx);
|
||||
typedef CUresult(CUDAAPI *PCUCTXDESTROY)(CUcontext ctx);
|
||||
|
||||
typedef NVENCSTATUS (NVENCAPI *PNVENCODEAPIGETMAXSUPPORTEDVERSION)(uint32_t* version);
|
||||
typedef NVENCSTATUS (NVENCAPI *PNVENCODEAPICREATEINSTANCE)(NV_ENCODE_API_FUNCTION_LIST *functionList);
|
||||
|
||||
typedef struct NvencDynLoadFunctions
|
||||
|
Loading…
x
Reference in New Issue
Block a user