From fef2162b6ea752c76a1220f59ad962b65a400fc3 Mon Sep 17 00:00:00 2001 From: Mark Thompson Date: Sun, 23 Sep 2018 22:53:00 +0100 Subject: vaapi_encode: Add flag to mark encoders supporting only constant-quality And set it for MJPEG. --- libavcodec/vaapi_encode.c | 3 ++- libavcodec/vaapi_encode.h | 2 ++ libavcodec/vaapi_encode_mjpeg.c | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c index e01c3c1..2fe8501 100644 --- a/libavcodec/vaapi_encode.c +++ b/libavcodec/vaapi_encode.c @@ -1277,7 +1277,8 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx) ctx->va_rc_mode = VA_RC_CQP; return 0; } - if (avctx->flags & AV_CODEC_FLAG_QSCALE || + if (ctx->codec->flags & FLAG_CONSTANT_QUALITY_ONLY || + avctx->flags & AV_CODEC_FLAG_QSCALE || avctx->bit_rate <= 0) { if (rc_attr.value & VA_RC_CQP) { av_log(avctx, AV_LOG_VERBOSE, "Using constant-quality mode.\n"); diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h index 271d4ef..965fe65 100644 --- a/libavcodec/vaapi_encode.h +++ b/libavcodec/vaapi_encode.h @@ -251,6 +251,8 @@ typedef struct VAAPIEncodeContext { enum { // Codec supports controlling the subdivision of pictures into slices. FLAG_SLICE_CONTROL = 1 << 0, + // Codec only supports constant quality (no rate control). + FLAG_CONSTANT_QUALITY_ONLY = 1 << 1, }; typedef struct VAAPIEncodeType { diff --git a/libavcodec/vaapi_encode_mjpeg.c b/libavcodec/vaapi_encode_mjpeg.c index fe8439c..79f4347 100644 --- a/libavcodec/vaapi_encode_mjpeg.c +++ b/libavcodec/vaapi_encode_mjpeg.c @@ -476,6 +476,8 @@ static const VAAPIEncodeProfile vaapi_encode_mjpeg_profiles[] = { static const VAAPIEncodeType vaapi_encode_type_mjpeg = { .profiles = vaapi_encode_mjpeg_profiles, + .flags = FLAG_CONSTANT_QUALITY_ONLY, + .configure = &vaapi_encode_mjpeg_configure, .picture_params_size = sizeof(VAEncPictureParameterBufferJPEG), -- cgit v1.1