[FFmpeg-devel] [PATCH 16/26] vaapi_encode: Add support for max QP in rate control
Mark Thompson
sw at jkqxz.net
Sun Apr 22 18:29:11 EEST 2018
This was added in libva 2.1.0 (VAAPI 1.1.0). Use AVCodecContext.qmax,
matching the existing behaviour for qmin, and clean up the defaults so
that we only pass min/max when explicitly set.
---
doc/encoders.texi | 3 ++-
libavcodec/vaapi_encode.c | 3 +++
libavcodec/vaapi_encode_h264.c | 3 ++-
libavcodec/vaapi_encode_h265.c | 2 ++
libavcodec/vaapi_encode_mpeg2.c | 2 ++
libavcodec/vaapi_encode_vp8.c | 2 ++
libavcodec/vaapi_encode_vp9.c | 2 ++
7 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/doc/encoders.texi b/doc/encoders.texi
index 0c0a307987..861f9f4f1f 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -2588,7 +2588,8 @@ Speed / quality tradeoff: higher values are faster / worse quality.
Size / quality tradeoff: higher values are smaller / worse quality.
@item
@option{qmin}
-(only: @option{qmax} is not supported)
+ at item
+ at option{qmax}
@item
@option{i_qfactor} / @option{i_quant_factor}
@item
diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
index 6188423935..39c622dacc 100644
--- a/libavcodec/vaapi_encode.c
+++ b/libavcodec/vaapi_encode.c
@@ -1415,6 +1415,9 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx)
.initial_qp = 0,
.min_qp = (avctx->qmin > 0 ? avctx->qmin : 0),
.basic_unit_size = 0,
+#if VA_CHECK_VERSION(1, 1, 0)
+ .max_qp = (avctx->qmax > 0 ? avctx->qmax : 0),
+#endif
};
vaapi_encode_add_global_param(avctx, &ctx->rc_params.misc,
sizeof(ctx->rc_params));
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
index e75b91eb55..514805d0c2 100644
--- a/libavcodec/vaapi_encode_h264.c
+++ b/libavcodec/vaapi_encode_h264.c
@@ -1027,7 +1027,8 @@ static const AVCodecDefault vaapi_encode_h264_defaults[] = {
{ "i_qoffset", "0" },
{ "b_qfactor", "6/5" },
{ "b_qoffset", "0" },
- { "qmin", "0" },
+ { "qmin", "-1" },
+ { "qmax", "-1" },
{ NULL },
};
diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
index fa9d838bdc..8a31a73148 100644
--- a/libavcodec/vaapi_encode_h265.c
+++ b/libavcodec/vaapi_encode_h265.c
@@ -992,6 +992,8 @@ static const AVCodecDefault vaapi_encode_h265_defaults[] = {
{ "i_qoffset", "0" },
{ "b_qfactor", "6/5" },
{ "b_qoffset", "0" },
+ { "qmin", "-1" },
+ { "qmax", "-1" },
{ NULL },
};
diff --git a/libavcodec/vaapi_encode_mpeg2.c b/libavcodec/vaapi_encode_mpeg2.c
index b7189b2d67..42ddb0a284 100644
--- a/libavcodec/vaapi_encode_mpeg2.c
+++ b/libavcodec/vaapi_encode_mpeg2.c
@@ -673,6 +673,8 @@ static const AVCodecDefault vaapi_encode_mpeg2_defaults[] = {
{ "b_qfactor", "6/5" },
{ "b_qoffset", "0" },
{ "global_quality", "10" },
+ { "qmin", "-1" },
+ { "qmax", "-1" },
{ NULL },
};
diff --git a/libavcodec/vaapi_encode_vp8.c b/libavcodec/vaapi_encode_vp8.c
index dd7943133e..2026e3276b 100644
--- a/libavcodec/vaapi_encode_vp8.c
+++ b/libavcodec/vaapi_encode_vp8.c
@@ -228,6 +228,8 @@ static const AVCodecDefault vaapi_encode_vp8_defaults[] = {
{ "bf", "0" },
{ "g", "120" },
{ "global_quality", "40" },
+ { "qmin", "-1" },
+ { "qmax", "-1" },
{ NULL },
};
diff --git a/libavcodec/vaapi_encode_vp9.c b/libavcodec/vaapi_encode_vp9.c
index 794b308fa5..fa77b9b298 100644
--- a/libavcodec/vaapi_encode_vp9.c
+++ b/libavcodec/vaapi_encode_vp9.c
@@ -253,6 +253,8 @@ static const AVCodecDefault vaapi_encode_vp9_defaults[] = {
{ "bf", "0" },
{ "g", "250" },
{ "global_quality", "100" },
+ { "qmin", "-1" },
+ { "qmax", "-1" },
{ NULL },
};
--
2.16.3
More information about the ffmpeg-devel
mailing list