[FFmpeg-devel] [PATCH 4/7] lavc/vaapi_encode_h264: Enable sliding window control.
Jun Zhao
mypopydev at gmail.com
Sat Nov 3 04:52:09 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_h264.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
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" },
--
1.7.1
More information about the ffmpeg-devel
mailing list