diff options
author | Roman Arzumanyan <rarzumanyan@nvidia.com> | 2019-09-27 18:56:11 +0300 |
---|---|---|
committer | Timo Rothenpieler <timo@rothenpieler.org> | 2019-09-27 21:00:59 +0300 |
commit | 567b5e33d9d77919ee920c091f4273c5b38fc821 (patch) | |
tree | 6279b5ee480849fd3a51eb9d3bb97ace6add4333 /libavcodec/nvenc.c | |
parent | e929b2f248a9c49761475e07d1a089e05912d1c6 (diff) |
avcodec/nvenc: add multiple reference frames support
Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
Diffstat (limited to 'libavcodec/nvenc.c')
-rw-r--r-- | libavcodec/nvenc.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 158e304a0c..8a7347b84e 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -403,6 +403,19 @@ static int nvenc_check_capabilities(AVCodecContext *avctx) } #endif +#ifdef NVENC_HAVE_MULTIPLE_REF_FRAMES + ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_MULTIPLE_REF_FRAMES); + if(avctx->refs != NV_ENC_NUM_REF_FRAMES_AUTOSELECT && ret <= 0) { + av_log(avctx, AV_LOG_VERBOSE, "Multiple reference frames are not supported\n"); + return AVERROR(ENOSYS); + } +#else + if(avctx->refs != 0) { + av_log(avctx, AV_LOG_VERBOSE, "Multiple reference frames need SDK 9.1 at build time\n"); + return AVERROR(ENOSYS); + } +#endif + ctx->support_dyn_bitrate = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE); return 0; @@ -1010,6 +1023,11 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx) h264->useBFramesAsRef = ctx->b_ref_mode; #endif +#ifdef NVENC_HAVE_MULTIPLE_REF_FRAMES + h264->numRefL0 = avctx->refs; + h264->numRefL1 = avctx->refs; +#endif + return 0; } @@ -1094,6 +1112,11 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx) hevc->useBFramesAsRef = ctx->b_ref_mode; #endif +#ifdef NVENC_HAVE_MULTIPLE_REF_FRAMES + hevc->numRefL0 = avctx->refs; + hevc->numRefL1 = avctx->refs; +#endif + return 0; } |