summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSreerenj Balachandran <sreerenj.balachandran@intel.com>2019-09-19 14:40:23 -0800
committerXiang, Haihao <haihao.xiang@intel.com>2019-11-22 14:35:40 +0800
commit2bf45e98fcac1e0010f6f96bdd6ad4e31c76da23 (patch)
treedd8fba3c3a7f133cbc9ccf93c05105f750019f75
parentb682a685bdc336bfb722c58eb38c2c4da87a206b (diff)
downloadlibva-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.c9
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 ||