@@ -1521,7 +1521,7 @@ static av_cold int nvenc_setup_av1_config(AVCodecContext *avctx)
av1->idrPeriod = cc->gopLength;
- if (IS_CBR(cc->rcParams.rateControlMode)) {
+ if (ctx->filler_data && IS_CBR(cc->rcParams.rateControlMode)) {
av1->enableBitstreamPadding = 1;
}
@@ -285,6 +285,7 @@ typedef struct NvencContext
int lookahead_level;
int unidir_b;
int split_encode_mode;
+ int filler_data;
} NvencContext;
int ff_nvenc_encode_init(AVCodecContext *avctx);
@@ -149,6 +149,8 @@ static const AVOption options[] = {
OFFSET(extra_sei), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
{ "a53cc", "Use A53 Closed Captions (if available)", OFFSET(a53_cc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
{ "s12m_tc", "Use timecode (if available)", OFFSET(s12m_tc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
+ { "filler_data", "Use filler data to ensure CBR bitrate is strictly adhered to",
+ OFFSET(filler_data), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
#ifdef NVENC_HAVE_LOOKAHEAD_LEVEL
{ "lookahead_level", "Specifies the lookahead level. Higher level may improve quality at the expense of performance.",
OFFSET(lookahead_level), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, NV_ENC_LOOKAHEAD_LEVEL_AUTOSELECT, VE, .unit = "lookahead_level" },
Some scenarios (such as game streaming or videoconferencing) may use CBR to strictly cap the maximum encoded bitrate, but they don't mind the bitrate falling below the target if the encoder doesn't need the additional headroom. Allow users to opt-out of filler data in CBR mode for those usecases where it is unwanted. Signed-off-by: Cameron Gutman <aicommander@gmail.com> --- libavcodec/nvenc.c | 2 +- libavcodec/nvenc.h | 1 + libavcodec/nvenc_av1.c | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-)