[FFmpeg-devel] [PATCH 11/26] vaapi_encode: Add common options between all encoders

Zhao Jun mypopydev at gmail.com
Wed Apr 25 04:21:35 EEST 2018


2018-04-22 23:29 GMT+08:00 Mark Thompson <sw at jkqxz.net>:
> The only common option here is low_power - it was previously supported
> for H.264 only, that specific option is removed.
> ---
>  doc/encoders.texi              | 14 ++++++++++++--
>  libavcodec/vaapi_encode.h      |  9 +++++++++
>  libavcodec/vaapi_encode_h264.c |  8 ++------
>  libavcodec/vaapi_encode_h265.c |  2 ++
>  libavcodec/vaapi_encode_vp8.c  |  1 +
>  libavcodec/vaapi_encode_vp9.c  |  1 +
>  6 files changed, 27 insertions(+), 8 deletions(-)
>
> diff --git a/doc/encoders.texi b/doc/encoders.texi
> index 16be6359b3..62a1509a96 100644
> --- a/doc/encoders.texi
> +++ b/doc/encoders.texi
> @@ -2599,6 +2599,18 @@ Size / quality tradeoff: higher values are smaller / worse quality.
>  @option{b_qoffset} / @option{b_quant_offset}
>  @end itemize
>
> +All encoders support the following options:
> + at itemize
> + at item
> + at option{low_power}
> +
> +Some drivers/platforms offer a second encoder for some codecs intended to use
> +less power than the default encoder; setting this option will attempt to use
> +that encoder.  Note that it may support a reduced feature set, so some other
> +options may not be available in this mode.
> + at end itemize
> +
> +Each encoder also has its own specific options:
>  @table @option
>
>  @item h264_vaapi
> @@ -2606,8 +2618,6 @@ Size / quality tradeoff: higher values are smaller / worse quality.
>  @option{level} sets the value of @emph{level_idc}.
>
>  @table @option
> - at item low_power
> -Use low-power encoding mode.
>  @item coder
>  Set entropy encoder (default is @emph{cabac}).  Possible values:
>
> diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h
> index 2b909d4d6b..9e0826b30e 100644
> --- a/libavcodec/vaapi_encode.h
> +++ b/libavcodec/vaapi_encode.h
> @@ -300,4 +300,13 @@ int ff_vaapi_encode2(AVCodecContext *avctx, AVPacket *pkt,
>  int ff_vaapi_encode_init(AVCodecContext *avctx);
>  int ff_vaapi_encode_close(AVCodecContext *avctx);
>
> +
> +#define VAAPI_ENCODE_COMMON_OPTIONS \
> +    { "low_power", \
> +      "Use low-power encoding mode (only available on some platforms; " \
> +      "may not support all encoding features)", \
> +      OFFSET(common.low_power), AV_OPT_TYPE_BOOL, \
> +      { .i64 = 0 }, 0, 1, FLAGS }
> +
> +
>  #endif /* AVCODEC_VAAPI_ENCODE_H */
> diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
> index 93dc51eb40..49dc5229b5 100644
> --- a/libavcodec/vaapi_encode_h264.c
> +++ b/libavcodec/vaapi_encode_h264.c
> @@ -52,7 +52,6 @@ typedef struct VAAPIEncodeH264Context {
>      // User options.
>      int qp;
>      int quality;
> -    int low_power;

The patchset other part is Ok for me, but I don't think putting
low_power as common
option is good idea, as I know, low_power mode only supported by few
codec, maybe
only support by AVC/HEVC/VP9 encoder.

>      int coder;
>      int aud;
>      int sei;
> @@ -933,8 +932,6 @@ static av_cold int vaapi_encode_h264_init(AVCodecContext *avctx)
>          return AVERROR_PATCHWELCOME;
>      }
>
> -    ctx->low_power = priv->low_power;
> -
>      if (avctx->bit_rate > 0) {
>          if (avctx->rc_max_rate == avctx->bit_rate)
>              ctx->va_rc_mode = VA_RC_CBR;
> @@ -969,13 +966,12 @@ static av_cold int vaapi_encode_h264_close(AVCodecContext *avctx)
>  #define OFFSET(x) offsetof(VAAPIEncodeH264Context, x)
>  #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
>  static const AVOption vaapi_encode_h264_options[] = {
> +    VAAPI_ENCODE_COMMON_OPTIONS,
> +
>      { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)",
>        OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 20 }, 0, 52, FLAGS },
>      { "quality", "Set encode quality (trades off against speed, higher is faster)",
>        OFFSET(quality), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 8, FLAGS },
> -    { "low_power", "Use low-power encoding mode (experimental: only supported "
> -      "on some platforms, does not support all features)",
> -      OFFSET(low_power), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS },
>      { "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" },
> diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c
> index e01bdcf6b4..a818650811 100644
> --- a/libavcodec/vaapi_encode_h265.c
> +++ b/libavcodec/vaapi_encode_h265.c
> @@ -954,6 +954,8 @@ static av_cold int vaapi_encode_h265_close(AVCodecContext *avctx)
>  #define OFFSET(x) offsetof(VAAPIEncodeH265Context, x)
>  #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
>  static const AVOption vaapi_encode_h265_options[] = {
> +    VAAPI_ENCODE_COMMON_OPTIONS,
> +
>      { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)",
>        OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 25 }, 0, 52, FLAGS },
>
> diff --git a/libavcodec/vaapi_encode_vp8.c b/libavcodec/vaapi_encode_vp8.c
> index 2191e00ef4..d9c359a4e1 100644
> --- a/libavcodec/vaapi_encode_vp8.c
> +++ b/libavcodec/vaapi_encode_vp8.c
> @@ -226,6 +226,7 @@ static av_cold int vaapi_encode_vp8_init(AVCodecContext *avctx)
>  #define OFFSET(x) offsetof(VAAPIEncodeVP8Context, x)
>  #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
>  static const AVOption vaapi_encode_vp8_options[] = {
> +    VAAPI_ENCODE_COMMON_OPTIONS,
>      { "loop_filter_level", "Loop filter level",
>        OFFSET(loop_filter_level), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 63, FLAGS },
>      { "loop_filter_sharpness", "Loop filter sharpness",
> diff --git a/libavcodec/vaapi_encode_vp9.c b/libavcodec/vaapi_encode_vp9.c
> index 8091ae87e9..eabacbd0fd 100644
> --- a/libavcodec/vaapi_encode_vp9.c
> +++ b/libavcodec/vaapi_encode_vp9.c
> @@ -251,6 +251,7 @@ static av_cold int vaapi_encode_vp9_init(AVCodecContext *avctx)
>  #define OFFSET(x) offsetof(VAAPIEncodeVP9Context, x)
>  #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
>  static const AVOption vaapi_encode_vp9_options[] = {
> +    VAAPI_ENCODE_COMMON_OPTIONS,
>      { "loop_filter_level", "Loop filter level",
>        OFFSET(loop_filter_level), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 63, FLAGS },
>      { "loop_filter_sharpness", "Loop filter sharpness",
> --
> 2.16.3
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list