diff mbox series

[FFmpeg-devel,2/3] libavcodec/qsvenc: Add b_strategy option to hevc_qsv

Message ID 20220124025955.204168-2-wenbin.chen@intel.com
State New
Headers show
Series [FFmpeg-devel,1/3] libavcodec/qsvenc: Add max slice size support to hevc_qsv | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished
andriy/make_aarch64_jetson success Make finished
andriy/make_fate_aarch64_jetson success Make fate finished

Commit Message

Wenbin Chen Jan. 24, 2022, 2:59 a.m. UTC
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>
---
 doc/encoders.texi   | 3 +++
 libavcodec/qsvenc.c | 6 ++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

Comments

Xiang, Haihao Jan. 25, 2022, 3:22 a.m. UTC | #1
On Mon, 2022-01-24 at 10:59 +0800, Wenbin Chen wrote:
> 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>
> ---
>  doc/encoders.texi   | 3 +++
>  libavcodec/qsvenc.c | 6 ++++--
>  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 f311cd9ce4..a8d876d6d9 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");

LGTM, thx

-Haihao
diff mbox series

Patch

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 f311cd9ce4..a8d876d6d9 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");