avcodec/nvenc: Add support for nvenc api version 5

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/105/head
Timo Rothenpieler 10 years ago committed by Michael Niedermayer
parent 8de0990e9f
commit bc3f76779b
  1. 13
      libavcodec/nvenc.c

@ -67,7 +67,9 @@ typedef CUresult(CUDAAPI *PCUCTXDESTROY)(CUcontext ctx);
typedef NVENCSTATUS (NVENCAPI* PNVENCODEAPICREATEINSTANCE)(NV_ENCODE_API_FUNCTION_LIST *functionList); typedef NVENCSTATUS (NVENCAPI* PNVENCODEAPICREATEINSTANCE)(NV_ENCODE_API_FUNCTION_LIST *functionList);
#if NVENCAPI_MAJOR_VERSION < 5
static const GUID dummy_license = { 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } }; static const GUID dummy_license = { 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } };
#endif
typedef struct NvencInputSurface typedef struct NvencInputSurface
{ {
@ -466,13 +468,16 @@ static av_cold int nvenc_encode_init(AVCodecContext *avctx)
CUcontext cu_context_curr; CUcontext cu_context_curr;
CUresult cu_res; CUresult cu_res;
GUID encoder_preset = NV_ENC_PRESET_HQ_GUID; GUID encoder_preset = NV_ENC_PRESET_HQ_GUID;
GUID license = dummy_license;
NVENCSTATUS nv_status = NV_ENC_SUCCESS; NVENCSTATUS nv_status = NV_ENC_SUCCESS;
int surfaceCount = 0; int surfaceCount = 0;
int i, num_mbs; int i, num_mbs;
int isLL = 0; int isLL = 0;
int res = 0; int res = 0;
#if NVENCAPI_MAJOR_VERSION < 5
GUID license = dummy_license;
#endif
NvencContext *ctx = avctx->priv_data; NvencContext *ctx = avctx->priv_data;
NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs; NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs;
NV_ENCODE_API_FUNCTION_LIST *p_nvenc = &dl_fn->nvenc_funcs; NV_ENCODE_API_FUNCTION_LIST *p_nvenc = &dl_fn->nvenc_funcs;
@ -494,7 +499,10 @@ static av_cold int nvenc_encode_init(AVCodecContext *avctx)
preset_config.presetCfg.version = NV_ENC_CONFIG_VER; preset_config.presetCfg.version = NV_ENC_CONFIG_VER;
encode_session_params.version = NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER; encode_session_params.version = NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER;
encode_session_params.apiVersion = NVENCAPI_VERSION; encode_session_params.apiVersion = NVENCAPI_VERSION;
#if NVENCAPI_MAJOR_VERSION < 5
encode_session_params.clientKeyPtr = &license; encode_session_params.clientKeyPtr = &license;
#endif
if (ctx->gpu >= dl_fn->nvenc_device_count) { if (ctx->gpu >= dl_fn->nvenc_device_count) {
av_log(avctx, AV_LOG_FATAL, "Requested GPU %d, but only %d GPUs are available!\n", ctx->gpu, dl_fn->nvenc_device_count); av_log(avctx, AV_LOG_FATAL, "Requested GPU %d, but only %d GPUs are available!\n", ctx->gpu, dl_fn->nvenc_device_count);
@ -1065,7 +1073,10 @@ static int nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
pic_params.inputDuration = 0; pic_params.inputDuration = 0;
pic_params.codecPicParams.h264PicParams.sliceMode = ctx->encode_config.encodeCodecConfig.h264Config.sliceMode; pic_params.codecPicParams.h264PicParams.sliceMode = ctx->encode_config.encodeCodecConfig.h264Config.sliceMode;
pic_params.codecPicParams.h264PicParams.sliceModeData = ctx->encode_config.encodeCodecConfig.h264Config.sliceModeData; pic_params.codecPicParams.h264PicParams.sliceModeData = ctx->encode_config.encodeCodecConfig.h264Config.sliceModeData;
#if NVENCAPI_MAJOR_VERSION < 5
memcpy(&pic_params.rcParams, &ctx->encode_config.rcParams, sizeof(NV_ENC_RC_PARAMS)); memcpy(&pic_params.rcParams, &ctx->encode_config.rcParams, sizeof(NV_ENC_RC_PARAMS));
#endif
res = timestamp_queue_enqueue(&ctx->timestamp_list, frame->pts); res = timestamp_queue_enqueue(&ctx->timestamp_list, frame->pts);

Loading…
Cancel
Save