blob: 67a3d6227d0b03fce17568873b8388cb447a00e1 [file] [log] [blame]
From 531f9288150bfbc56cd79a3d67d6a8b4aa532749 Mon Sep 17 00:00:00 2001
From: Sreerenj Balachandran <sreerenj.balachandran@intel.com>
Date: Thu, 19 Sep 2019 14:40:23 -0800
Subject: [PATCH] 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
---
src/gen9_vp9_encoder.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c
index 8aeeb9e497f0..0180235a4e58 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 ||
--
2.17.1