diff options
author | Mark Thompson <sw@jkqxz.net> | 2016-04-12 23:16:30 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-04-15 10:07:05 +0200 |
commit | fcf536b1301475c57a7f94d00b1aebf5d20fe9d3 (patch) | |
tree | fb8316fd0749a909a51f98a823a6c9ae0ec6806c /libavcodec | |
parent | 9629701ce9debe295da09bb0e117ee9392ef1fe3 (diff) | |
download | ffmpeg-fcf536b1301475c57a7f94d00b1aebf5d20fe9d3.tar.gz |
vaapi_h264: Add encode quality option (for quality-speed tradeoff)
Only supported on VAAPI 0.36 and higher.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/vaapi_encode_h264.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index 940832e367..9841a708b6 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -113,10 +113,19 @@ typedef struct VAAPIEncodeH264Context { VAEncMiscParameterBuffer misc; VAEncMiscParameterHRD hrd; } hrd_params; + +#if VA_CHECK_VERSION(0, 36, 0) + // Speed-quality tradeoff setting. + struct { + VAEncMiscParameterBuffer misc; + VAEncMiscParameterBufferQualityLevel quality; + } quality_params; +#endif } VAAPIEncodeH264Context; typedef struct VAAPIEncodeH264Options { int qp; + int quality; } VAAPIEncodeH264Options; @@ -801,6 +810,7 @@ static av_cold int vaapi_encode_h264_init_internal(AVCodecContext *avctx) VAAPIEncodeContext *ctx = avctx->priv_data; VAAPIEncodeH264Context *priv = ctx->priv_data; + VAAPIEncodeH264Options *opt = ctx->codec_options; int i, err; switch (avctx->profile) { @@ -869,6 +879,22 @@ static av_cold int vaapi_encode_h264_init_internal(AVCodecContext *avctx) .value = ctx->va_rc_mode, }; + if (opt->quality > 0) { +#if VA_CHECK_VERSION(0, 36, 0) + priv->quality_params.misc.type = + VAEncMiscParameterTypeQualityLevel; + priv->quality_params.quality.quality_level = opt->quality; + + ctx->global_params[ctx->nb_global_params] = + &priv->quality_params.misc; + ctx->global_params_size[ctx->nb_global_params++] = + sizeof(priv->quality_params); +#else + av_log(avctx, AV_LOG_WARNING, "The encode quality option is not " + "supported with this VAAPI version.\n"); +#endif + } + ctx->nb_recon_frames = 20; return 0; @@ -906,6 +932,8 @@ static av_cold int vaapi_encode_h264_init(AVCodecContext *avctx) static const AVOption vaapi_encode_h264_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, 2, FLAGS }, { NULL }, }; |