2018-04-22 23:29 GMT+08:00 Mark Thompson <s...@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: > +@itemize > +@item > +@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. > +@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 > -@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@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel