Browse Source

avcodec/nvenc: check maximum driver API version

tags/n3.2
Timo Rothenpieler 9 years ago
parent
commit
df615efcf2
2 changed files with 19 additions and 0 deletions
  1. +18
    -0
      libavcodec/nvenc.c
  2. +1
    -0
      libavcodec/nvenc.h

+ 18
- 0
libavcodec/nvenc.c View File

@@ -155,8 +155,10 @@ static av_cold int nvenc_load_libraries(AVCodecContext *avctx)
{ {
NvencContext *ctx = avctx->priv_data; NvencContext *ctx = avctx->priv_data;
NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs; NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs;
PNVENCODEAPIGETMAXSUPPORTEDVERSION nvenc_get_max_ver;
PNVENCODEAPICREATEINSTANCE nvenc_create_instance; PNVENCODEAPICREATEINSTANCE nvenc_create_instance;
NVENCSTATUS err; NVENCSTATUS err;
uint32_t nvenc_max_ver;


#if CONFIG_CUDA #if CONFIG_CUDA
dl_fn->cu_init = cuInit; 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_LIBRARY(dl_fn->nvenc, NVENC_LIBNAME);


LOAD_SYMBOL(nvenc_get_max_ver, dl_fn->nvenc,
"NvEncodeAPIGetMaxSupportedVersion");
LOAD_SYMBOL(nvenc_create_instance, dl_fn->nvenc, LOAD_SYMBOL(nvenc_create_instance, dl_fn->nvenc,
"NvEncodeAPICreateInstance"); "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; dl_fn->nvenc_funcs.version = NV_ENCODE_API_FUNCTION_LIST_VER;


err = nvenc_create_instance(&dl_fn->nvenc_funcs); err = nvenc_create_instance(&dl_fn->nvenc_funcs);


+ 1
- 0
libavcodec/nvenc.h View File

@@ -72,6 +72,7 @@ typedef CUresult(CUDAAPI *PCUCTXCREATE)(CUcontext *pctx, unsigned int flags, CUd
typedef CUresult(CUDAAPI *PCUCTXPOPCURRENT)(CUcontext *pctx); typedef CUresult(CUDAAPI *PCUCTXPOPCURRENT)(CUcontext *pctx);
typedef CUresult(CUDAAPI *PCUCTXDESTROY)(CUcontext ctx); typedef CUresult(CUDAAPI *PCUCTXDESTROY)(CUcontext ctx);


typedef NVENCSTATUS (NVENCAPI *PNVENCODEAPIGETMAXSUPPORTEDVERSION)(uint32_t* version);
typedef NVENCSTATUS (NVENCAPI *PNVENCODEAPICREATEINSTANCE)(NV_ENCODE_API_FUNCTION_LIST *functionList); typedef NVENCSTATUS (NVENCAPI *PNVENCODEAPICREATEINSTANCE)(NV_ENCODE_API_FUNCTION_LIST *functionList);


typedef struct NvencDynLoadFunctions typedef struct NvencDynLoadFunctions


Loading…
Cancel
Save