diff mbox series

[FFmpeg-devel] avcodec/nvenc: add option to skip padding OBUs

Message ID 20241028053252.1166-1-aicommander@gmail.com
State New
Headers show
Series [FFmpeg-devel] avcodec/nvenc: add option to skip padding OBUs | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Cameron Gutman Oct. 28, 2024, 5:32 a.m. UTC
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(-)
diff mbox series

Patch

diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 2cce478be0..17dc8ff6ba 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -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;
     }
 
diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h
index 0130b99369..da206a5bfb 100644
--- a/libavcodec/nvenc.h
+++ b/libavcodec/nvenc.h
@@ -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);
diff --git a/libavcodec/nvenc_av1.c b/libavcodec/nvenc_av1.c
index 79253cff66..5764e4214d 100644
--- a/libavcodec/nvenc_av1.c
+++ b/libavcodec/nvenc_av1.c
@@ -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" },