summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWenbin Chen <wenbin.chen-at-intel.com@ffmpeg.org>2022-01-25 15:12:36 +0800
committerHaihao Xiang <haihao.xiang@intel.com>2022-01-27 10:26:33 +0800
commit2ecc4fde5f01289b4c2b8d58c905a408dbb96d8c (patch)
tree473ef3256c2d494f7669ee61b283e6fa447ed9af
parent168c6e23a54a65447110e4033b11b5965fd560c1 (diff)
libavcodec/qsvenc: Add b_strategy option to hevc_qsv
Add b_strategy option to hevc_qsv. By enabling this option, encoder can use b frames as reference. Signed-off-by: Wenbin Chen <wenbin.chen@intel.com> Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
-rw-r--r--doc/encoders.texi3
-rw-r--r--libavcodec/qsvenc.c6
2 files changed, 7 insertions, 2 deletions
diff --git a/doc/encoders.texi b/doc/encoders.texi
index 8966610263..6c1c4df57a 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -3403,6 +3403,9 @@ Maximum encoded slice size in bytes.
@item @var{p_strategy}
Enable P-pyramid: 0-default 1-simple 2-pyramid(bf need to be set to 0).
+@item @var{b_strategy}
+This option controls usage of B frames as reference.
+
@item @var{dblk_idc}
This option disable deblocking. It has value in range 0~2.
diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
index 6177fbc78c..686dfe6610 100644
--- a/libavcodec/qsvenc.c
+++ b/libavcodec/qsvenc.c
@@ -888,8 +888,6 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q)
q->extco2.LookAheadDS = q->look_ahead_downsampling;
q->extco2.RepeatPPS = q->repeat_pps ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
- if (q->b_strategy >= 0)
- q->extco2.BRefType = q->b_strategy ? MFX_B_REF_PYRAMID : MFX_B_REF_OFF;
if (q->adaptive_i >= 0)
q->extco2.AdaptiveI = q->adaptive_i ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF;
if (q->adaptive_b >= 0)
@@ -910,6 +908,10 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q)
q->extco2.DisableDeblockingIdc = q->dblk_idc;
#endif
+#if QSV_VERSION_ATLEAST(1, 8)
+ if (q->b_strategy >= 0)
+ q->extco2.BRefType = q->b_strategy ? MFX_B_REF_PYRAMID : MFX_B_REF_OFF;
+#endif
#if QSV_VERSION_ATLEAST(1, 9)
if (avctx->qmin >= 0 && avctx->qmax >= 0 && avctx->qmin > avctx->qmax) {
av_log(avctx, AV_LOG_ERROR, "qmin and or qmax are set but invalid, please make sure min <= max\n");