mirror of https://git.ffmpeg.org/ffmpeg.git
vaapi_encode: Always reapply global parameters after the sequence header
The codec sequence headers may contain fields which can overwrite the fine parameters given in the specific settings (e.g. a crude bitrate value vs. the max-rate / target-percentage / etc. values in VAEncMiscParameterRateControl). Always reapply all global parameters after a sequence header to avoid this causing problems.
This commit is contained in:
parent
ac31d84506
commit
2562dd9e78
|
@ -207,9 +207,16 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
|
|||
|
||||
pic->nb_param_buffers = 0;
|
||||
|
||||
if (pic->encode_order == 0) {
|
||||
// Global parameter buffers are set on the first picture only.
|
||||
if (pic->type == PICTURE_TYPE_IDR && ctx->codec->init_sequence_params) {
|
||||
err = vaapi_encode_make_param_buffer(avctx, pic,
|
||||
VAEncSequenceParameterBufferType,
|
||||
ctx->codec_sequence_params,
|
||||
ctx->codec->sequence_params_size);
|
||||
if (err < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (pic->type == PICTURE_TYPE_IDR) {
|
||||
for (i = 0; i < ctx->nb_global_params; i++) {
|
||||
err = vaapi_encode_make_param_buffer(avctx, pic,
|
||||
VAEncMiscParameterBufferType,
|
||||
|
@ -220,15 +227,6 @@ static int vaapi_encode_issue(AVCodecContext *avctx,
|
|||
}
|
||||
}
|
||||
|
||||
if (pic->type == PICTURE_TYPE_IDR && ctx->codec->init_sequence_params) {
|
||||
err = vaapi_encode_make_param_buffer(avctx, pic,
|
||||
VAEncSequenceParameterBufferType,
|
||||
ctx->codec_sequence_params,
|
||||
ctx->codec->sequence_params_size);
|
||||
if (err < 0)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (ctx->codec->init_picture_params) {
|
||||
err = ctx->codec->init_picture_params(avctx, pic);
|
||||
if (err < 0) {
|
||||
|
|
Loading…
Reference in New Issue