[FFmpeg-devel] [PATCH] libavcodec/qsvenc: add low latency P-pyramid support for qsv

Linjie Fu linjie.justin.fu at gmail.com
Thu Dec 10 09:48:33 EET 2020


On Thu, Dec 10, 2020 at 2:07 PM <wenbin.chen at intel.com> wrote:
>
> From: Wenbinc-Bin <wenbin.chen at intel.com>
>
> Add low latency P-pyramid support for qsv, and it relates to a new
> command line parameter "-p_strategy". To enable this flag, user also
> need to set "-bf" to -1 or 0.

IMO correcting the related options and prompting a warning would be
more user-friendly.

> Signed-off-by Wenbin Chen <wenbin.chen at intel.com>
> ---
>  libavcodec/qsvenc.c | 22 ++++++++++++++++++++++
>  libavcodec/qsvenc.h |  2 ++
>  2 files changed, 24 insertions(+)
>
> diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c
> index 2bd2a56227..c3b41374e4 100644
> --- a/libavcodec/qsvenc.c
> +++ b/libavcodec/qsvenc.c
> @@ -268,6 +268,13 @@ static void dump_video_param(AVCodecContext *avctx, QSVEncContext *q,
>      case MFX_B_REF_PYRAMID: av_log(avctx, AV_LOG_VERBOSE, "pyramid");   break;
>      default:                av_log(avctx, AV_LOG_VERBOSE, "auto");      break;
>      }
> +    av_log(avctx, AV_LOG_VERBOSE, "; PRefType: ");
> +    switch(co3->PRefType){
> +        case MFX_P_REF_DEFAULT: av_log(avctx, AV_LOG_VERBOSE, "default");   break;
> +        case MFX_P_REF_SIMPLE:  av_log(avctx, AV_LOG_VERBOSE, "simple");   break;
> +        case MFX_P_REF_PYRAMID: av_log(avctx, AV_LOG_VERBOSE, "pyramid");   break;
> +        default:    break;
> +    }
>      av_log(avctx, AV_LOG_VERBOSE, "\n");
>  #endif
>
> @@ -777,6 +784,21 @@ FF_ENABLE_DEPRECATION_WARNINGS
>  #if QSV_HAVE_CO3
>          q->extco3.Header.BufferId      = MFX_EXTBUFF_CODING_OPTION3;
>          q->extco3.Header.BufferSz      = sizeof(q->extco3);
> +        switch(q->p_strategy){
> +            case 0:
> +                q->extco3.PRefType = MFX_P_REF_DEFAULT;
> +                break;
> +            case 1:
> +                q->extco3.PRefType = MFX_P_REF_SIMPLE;
> +                break;
> +            case 2:
> +                q->extco3.PRefType = MFX_P_REF_PYRAMID;
> +                break;
> +            default:
> +                q->extco3.PRefType = MFX_P_REF_DEFAULT;
> +                av_log(avctx, AV_LOG_VERBOSE, "invalid p_strategy, set to default\n");
> +                break;
> +        }

It'll be great if one could help to provide some links/background
information like [1] in commit messages or docs,
to elaborate more about "default" and "simple", and make a new option
easier to be understood:

[1] https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#preftype

- linjie


More information about the ffmpeg-devel mailing list