[FFmpeg-devel,4/7] lavc/vaapi_encode_h264: Enable sliding window control.

Submitted by Jun Zhao on Nov. 3, 2018, 2:52 a.m.

Details

Message ID 1541213532-23882-5-git-send-email-mypopydev@gmail.com
State New
Headers show

Commit Message

Jun Zhao Nov. 3, 2018, 2:52 a.m.
Sliding window control is a feature to reduce the instant bitrate
fluctuation, and occasional big frame size for intra and scene
change frames are allowed. And the fluctuation level can be
controlled by max bit rate.

Signed-off-by: Jun Zhao <jun.zhao@intel.com>
---
 libavcodec/vaapi_encode_h264.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

Patch hide | download patch | download mbox

diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
index 060277b..5219522 100644
--- a/libavcodec/vaapi_encode_h264.c
+++ b/libavcodec/vaapi_encode_h264.c
@@ -59,6 +59,7 @@  typedef struct VAAPIEncodeH264Context {
     int profile;
     int level;
     int mb_rate_control;
+    int sliding_window;
 
     // Derived settings.
     int mb_width;
@@ -903,6 +904,16 @@  static av_cold int vaapi_encode_h264_bit_rate_control(AVCodecContext *avctx)
                "supported with this VAAPI version.\n");
  #endif
     }
+
+    if (priv->sliding_window) {
+#if VA_CHECK_VERSION(1, 1, 0)
+        ctx->rc_params.rc.rc_flags.bits.frame_tolerance_mode = priv->sliding_window;
+#else
+        av_log(avctx, AV_LOG_WARNING, "The sliding window is not "
+               "supported with this VAAPI version.\n");
+#endif
+    }
+
     return 0;
 }
 
@@ -1022,6 +1033,8 @@  static const AVOption vaapi_encode_h264_options[] = {
       OFFSET(quality), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS },
     { "mb_rate_control", "MB level bitrate control (only supported on GEN9+)",
       OFFSET(mb_rate_control), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS, "mb_rate_control" },
+    { "sliding_window", "Use sliding window to reduce the instant bitrate fluctuations",
+      OFFSET(sliding_window), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS, "sliding_window" },
     { "coder", "Entropy coder type",
       OFFSET(coder), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, FLAGS, "coder" },
         { "cavlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, FLAGS, "coder" },