summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaihao Xiang <haihao.xiang@intel.com>2018-09-12 14:00:24 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2018-09-14 09:48:37 +0800
commit09f29d9c536355d1439d0b93924cf0b26943ea42 (patch)
tree38560d154db665cd8600a756cb3b9d68ccad96b3
parent3db2871522371b92ea30a544099a8d2be93aa231 (diff)
downloadlibva-intel-driver-09f29d9c536355d1439d0b93924cf0b26943ea42.tar.gz
avc/enc: Fix bitrate reset
Use the right target bitrate once user changes the bitrate on the fly Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
-rw-r--r--src/i965_avc_encoder.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/i965_avc_encoder.c b/src/i965_avc_encoder.c
index 2539d012..9a9dd3ca 100644
--- a/src/i965_avc_encoder.c
+++ b/src/i965_avc_encoder.c
@@ -566,8 +566,6 @@ gen9_avc_update_misc_parameters(VADriverContextP ctx,
/* brc */
generic_state->max_bit_rate = (encoder_context->brc.bits_per_second[0] + 1000 - 1) / 1000;
- generic_state->brc_need_reset = encoder_context->brc.need_reset;
-
if (generic_state->internal_rate_mode == VA_RC_CBR) {
generic_state->min_bit_rate = generic_state->max_bit_rate;
generic_state->mb_brc_enabled = encoder_context->brc.mb_rate_control[0] == 1;
@@ -7883,6 +7881,8 @@ gen9_avc_update_parameters(VADriverContextP ctx,
avc_state->transform_8x8_mode_enable = 0;
/* rc init*/
+ generic_state->brc_need_reset = (generic_state->brc_inited && encoder_context->brc.need_reset);
+
if (generic_state->brc_enabled && (!generic_state->brc_inited || generic_state->brc_need_reset)) {
generic_state->target_bit_rate = ALIGN(seq_param->bits_per_second, 1000) / 1000;
generic_state->init_vbv_buffer_fullness_in_bit = seq_param->bits_per_second;
@@ -7898,7 +7898,7 @@ gen9_avc_update_parameters(VADriverContextP ctx,
generic_state->min_bit_rate = generic_state->target_bit_rate;
}
- if (generic_state->frame_type == SLICE_TYPE_I || generic_state->first_frame) {
+ if (generic_state->frame_type == SLICE_TYPE_I || generic_state->first_frame || generic_state->brc_need_reset) {
gen9_avc_update_misc_parameters(ctx, encode_state, encoder_context);
}
@@ -7908,7 +7908,7 @@ gen9_avc_update_parameters(VADriverContextP ctx,
}
generic_state->kernel_mode = gen9_avc_kernel_mode[generic_state->preset];
- if (!generic_state->brc_inited) {
+ if (!generic_state->brc_inited || generic_state->brc_need_reset) {
generic_state->brc_init_reset_input_bits_per_frame = ((double)(generic_state->max_bit_rate * 1000) * 100) / generic_state->frames_per_100s;;
generic_state->brc_init_current_target_buf_full_in_bits = generic_state->init_vbv_buffer_fullness_in_bit;
generic_state->brc_init_reset_buf_size_in_bits = generic_state->vbv_buffer_size_in_bit;