The only common option here is low_power - it was previously supported for H.264 only, that specific option is removed.tags/n4.1
| @@ -2599,6 +2599,18 @@ Size / quality tradeoff: higher values are smaller / worse quality. | |||||
| @option{b_qoffset} / @option{b_quant_offset} | @option{b_qoffset} / @option{b_quant_offset} | ||||
| @end itemize | @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 | @table @option | ||||
| @item h264_vaapi | @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}. | @option{level} sets the value of @emph{level_idc}. | ||||
| @table @option | @table @option | ||||
| @item low_power | |||||
| Use low-power encoding mode. | |||||
| @item coder | @item coder | ||||
| Set entropy encoder (default is @emph{cabac}). Possible values: | Set entropy encoder (default is @emph{cabac}). Possible values: | ||||
| @@ -298,4 +298,13 @@ int ff_vaapi_encode2(AVCodecContext *avctx, AVPacket *pkt, | |||||
| int ff_vaapi_encode_init(AVCodecContext *avctx); | int ff_vaapi_encode_init(AVCodecContext *avctx); | ||||
| int ff_vaapi_encode_close(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 */ | #endif /* AVCODEC_VAAPI_ENCODE_H */ | ||||
| @@ -52,7 +52,6 @@ typedef struct VAAPIEncodeH264Context { | |||||
| // User options. | // User options. | ||||
| int qp; | int qp; | ||||
| int quality; | int quality; | ||||
| int low_power; | |||||
| int coder; | int coder; | ||||
| int aud; | int aud; | ||||
| int sei; | int sei; | ||||
| @@ -936,8 +935,6 @@ static av_cold int vaapi_encode_h264_init(AVCodecContext *avctx) | |||||
| return AVERROR_PATCHWELCOME; | return AVERROR_PATCHWELCOME; | ||||
| } | } | ||||
| ctx->low_power = priv->low_power; | |||||
| if (avctx->bit_rate > 0) { | if (avctx->bit_rate > 0) { | ||||
| if (avctx->rc_max_rate == avctx->bit_rate) | if (avctx->rc_max_rate == avctx->bit_rate) | ||||
| ctx->va_rc_mode = VA_RC_CBR; | ctx->va_rc_mode = VA_RC_CBR; | ||||
| @@ -970,13 +967,12 @@ static av_cold int vaapi_encode_h264_close(AVCodecContext *avctx) | |||||
| #define OFFSET(x) offsetof(VAAPIEncodeH264Context, x) | #define OFFSET(x) offsetof(VAAPIEncodeH264Context, x) | ||||
| #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | ||||
| static const AVOption vaapi_encode_h264_options[] = { | static const AVOption vaapi_encode_h264_options[] = { | ||||
| VAAPI_ENCODE_COMMON_OPTIONS, | |||||
| { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)", | { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)", | ||||
| OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 20 }, 0, 52, FLAGS }, | OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 20 }, 0, 52, FLAGS }, | ||||
| { "quality", "Set encode quality (trades off against speed, higher is faster)", | { "quality", "Set encode quality (trades off against speed, higher is faster)", | ||||
| OFFSET(quality), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 8, FLAGS }, | 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", | { "coder", "Entropy coder type", | ||||
| OFFSET(coder), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, FLAGS, "coder" }, | 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" }, | { "cavlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, FLAGS, "coder" }, | ||||
| @@ -1099,6 +1099,8 @@ static av_cold int vaapi_encode_h265_close(AVCodecContext *avctx) | |||||
| #define OFFSET(x) offsetof(VAAPIEncodeH265Context, x) | #define OFFSET(x) offsetof(VAAPIEncodeH265Context, x) | ||||
| #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | ||||
| static const AVOption vaapi_encode_h265_options[] = { | static const AVOption vaapi_encode_h265_options[] = { | ||||
| VAAPI_ENCODE_COMMON_OPTIONS, | |||||
| { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)", | { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)", | ||||
| OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 25 }, 0, 52, FLAGS }, | OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 25 }, 0, 52, FLAGS }, | ||||
| @@ -228,6 +228,7 @@ static av_cold int vaapi_encode_vp8_init(AVCodecContext *avctx) | |||||
| #define OFFSET(x) offsetof(VAAPIEncodeVP8Context, x) | #define OFFSET(x) offsetof(VAAPIEncodeVP8Context, x) | ||||
| #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | ||||
| static const AVOption vaapi_encode_vp8_options[] = { | static const AVOption vaapi_encode_vp8_options[] = { | ||||
| VAAPI_ENCODE_COMMON_OPTIONS, | |||||
| { "loop_filter_level", "Loop filter level", | { "loop_filter_level", "Loop filter level", | ||||
| OFFSET(loop_filter_level), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 63, FLAGS }, | OFFSET(loop_filter_level), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 63, FLAGS }, | ||||
| { "loop_filter_sharpness", "Loop filter sharpness", | { "loop_filter_sharpness", "Loop filter sharpness", | ||||
| @@ -251,6 +251,7 @@ static av_cold int vaapi_encode_vp9_init(AVCodecContext *avctx) | |||||
| #define OFFSET(x) offsetof(VAAPIEncodeVP9Context, x) | #define OFFSET(x) offsetof(VAAPIEncodeVP9Context, x) | ||||
| #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) | ||||
| static const AVOption vaapi_encode_vp9_options[] = { | static const AVOption vaapi_encode_vp9_options[] = { | ||||
| VAAPI_ENCODE_COMMON_OPTIONS, | |||||
| { "loop_filter_level", "Loop filter level", | { "loop_filter_level", "Loop filter level", | ||||
| OFFSET(loop_filter_level), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 63, FLAGS }, | OFFSET(loop_filter_level), AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 63, FLAGS }, | ||||
| { "loop_filter_sharpness", "Loop filter sharpness", | { "loop_filter_sharpness", "Loop filter sharpness", | ||||