Browse Source

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.
tags/n4.1
Mark Thompson 7 years ago
parent
commit
2562dd9e78
1 changed files with 9 additions and 11 deletions
  1. +9
    -11
      libavcodec/vaapi_encode.c

+ 9
- 11
libavcodec/vaapi_encode.c View File

@@ -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…
Cancel
Save