diff options
author | Sreerenj Balachandran <sreerenj.balachandran@intel.com> | 2019-09-19 14:40:23 -0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2019-11-22 14:35:40 +0800 |
commit | 2bf45e98fcac1e0010f6f96bdd6ad4e31c76da23 (patch) | |
tree | dd8fba3c3a7f133cbc9ccf93c05105f750019f75 | |
parent | b682a685bdc336bfb722c58eb38c2c4da87a206b (diff) | |
download | libva-intel-driver-2bf45e98fcac1e0010f6f96bdd6ad4e31c76da23.tar.gz |
gen9_vp9_encoder: Ensure brc-reset irrespective of the frame type
If bitrate control is enabled (CBR & VBR), it is legal to
have a bitrate change/reset even for non-key frame.
Currently the bitrate change is not submitting to the gpu
if it is an inter-prediction frame.
This patch ensures that all internal structures are
getting the updated bitrate values whenever user request.
This patch is expected to fix the issue #473
-rw-r--r-- | src/gen9_vp9_encoder.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c index 8aeeb9e4..0180235a 100644 --- a/src/gen9_vp9_encoder.c +++ b/src/gen9_vp9_encoder.c @@ -3587,6 +3587,7 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, struct object_surface *obj_surface; struct object_buffer *obj_buffer; struct gen9_surface_vp9 *vp9_priv_surface; + bool need_brc_reset = false; vp9_state = (struct gen9_vp9_state *) encoder_context->enc_priv_state; @@ -3715,7 +3716,13 @@ gen9_encode_vp9_check_parameter(VADriverContextP ctx, return VA_STATUS_ERROR_UNIMPLEMENTED; if (vp9_state->brc_enabled) { - if (vp9_state->first_frame || vp9_state->picture_coding_type == KEY_FRAME) { + + if (encoder_context->rate_control_mode == VA_RC_CBR) + need_brc_reset = vp9_state->target_bit_rate != encoder_context->brc.bits_per_second[0] ? true : false; + else if (encoder_context->rate_control_mode == VA_RC_VBR) + need_brc_reset = vp9_state->max_bit_rate != encoder_context->brc.bits_per_second[0] ? true : false; + + if (vp9_state->first_frame || vp9_state->picture_coding_type == KEY_FRAME || need_brc_reset) { vp9_state->brc_reset = encoder_context->brc.need_reset || vp9_state->first_frame; if (!encoder_context->brc.framerate[0].num || !encoder_context->brc.framerate[0].den || |