And set it for MJPEG.
Unified · Split
| @@ -1277,7 +1277,8 @@ static av_cold int vaapi_encode_init_rate_control(AVCodecContext *avctx) · 1276 unmodified lines | ||
| 1277 | 1277 | ctx->va_rc_mode = VA_RC_CQP; |
| 1278 | 1278 | return 0; |
| 1279 | 1279 | } |
| 1280 | − if (avctx->flags & AV_CODEC_FLAG_QSCALE || | |
| 1280 | + if (ctx->codec->flags & FLAG_CONSTANT_QUALITY_ONLY || | |
| 1281 | + avctx->flags & AV_CODEC_FLAG_QSCALE || | |
| 1281 | 1282 | avctx->bit_rate <= 0) { |
| 1282 | 1283 | if (rc_attr.value & VA_RC_CQP) { |
| 1283 | 1284 | av_log(avctx, AV_LOG_VERBOSE, "Using constant-quality mode.\n"); |
| @@ -251,6 +251,8 @@ typedef struct VAAPIEncodeContext { · 250 unmodified lines | ||
| 251 | 251 | enum { |
| 252 | 252 | // Codec supports controlling the subdivision of pictures into slices. |
| 253 | 253 | FLAG_SLICE_CONTROL = 1 << 0, |
| 254 | + // Codec only supports constant quality (no rate control). | |
| 255 | + FLAG_CONSTANT_QUALITY_ONLY = 1 << 1, | |
| 254 | 256 | }; |
| 255 | 257 | |
| 256 | 258 | typedef struct VAAPIEncodeType { |
| @@ -476,6 +476,8 @@ static const VAAPIEncodeProfile vaapi_encode_mjpeg_profiles[] = { · 475 unmodified lines | ||
| 476 | 476 | static const VAAPIEncodeType vaapi_encode_type_mjpeg = { |
| 477 | 477 | .profiles = vaapi_encode_mjpeg_profiles, |
| 478 | 478 | |
| 479 | + .flags = FLAG_CONSTANT_QUALITY_ONLY, | |
| 480 | + | |
| 479 | 481 | .configure = &vaapi_encode_mjpeg_configure, |
| 480 | 482 | |
| 481 | 483 | .picture_params_size = sizeof(VAEncPictureParameterBufferJPEG), |