[FFmpeg-devel] [PATCH 6/7] lavc/vaapi_encode_h265: Enable sliding window control.

Jun Zhao mypopydev at gmail.com
Sat Nov 3 04:52:11 EET 2018


 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 at intel.com>
---
 libavcodec/vaapi_encode_h265.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
index 367fa5f..2f243da 100644
--- a/libavcodec/vaapi_encode_h265.c
+++ b/libavcodec/vaapi_encode_h265.c
@@ -52,6 +52,7 @@ typedef struct VAAPIEncodeH265Context {
     int tier;
     int level;
     int sei;
+    int sliding_window;
 
     // Derived settings.
     int fixed_qp_idr;
@@ -1067,6 +1068,24 @@ static av_cold int vaapi_encode_h265_configure(AVCodecContext *avctx)
     return 0;
 }
 
+
+static av_cold int vaapi_encode_h265_bit_rate_control(AVCodecContext *avctx)
+{
+    VAAPIEncodeContext      *ctx = avctx->priv_data;
+    VAAPIEncodeH265Context *priv = avctx->priv_data;
+
+    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;
+}
+
 static const VAAPIEncodeProfile vaapi_encode_h265_profiles[] = {
     { FF_PROFILE_HEVC_MAIN,     8, 3, 1, 1, VAProfileHEVCMain       },
     { FF_PROFILE_HEVC_REXT,     8, 3, 1, 1, VAProfileHEVCMain       },
@@ -1084,6 +1103,8 @@ static const VAAPIEncodeType vaapi_encode_type_h265 = {
 
     .configure             = &vaapi_encode_h265_configure,
 
+    .bit_rate_control      = &vaapi_encode_h265_bit_rate_control,
+
     .sequence_params_size  = sizeof(VAEncSequenceParameterBufferHEVC),
     .init_sequence_params  = &vaapi_encode_h265_init_sequence_params,
 
@@ -1151,6 +1172,9 @@ static const AVOption vaapi_encode_h265_options[] = {
     { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)",
       OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 25 }, 0, 52, FLAGS },
 
+    { "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" },
+
     { "aud", "Include AUD",
       OFFSET(aud), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
 
-- 
1.7.1



More information about the ffmpeg-devel mailing list