diff options
author | Haihao Xiang <haihao.xiang@intel.com> | 2018-12-20 09:06:51 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2019-01-08 10:19:19 +0800 |
commit | 449c6f91b38417d0baa0e463338760cb118ce9a5 (patch) | |
tree | 9120f7aa524e0f3d5c13942828776bcd93ee2d59 | |
parent | 72f10f16f7e5767492acde130eeeaa598d26a3a6 (diff) | |
download | libva-intel-driver-449c6f91b38417d0baa0e463338760cb118ce9a5.tar.gz |
HEVC encoder: correct the minimal bitrate for VBR
This fixes https://github.com/intel/intel-vaapi-driver/issues/430
Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
Tested-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
-rw-r--r-- | src/gen9_hevc_encoder.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/gen9_hevc_encoder.c b/src/gen9_hevc_encoder.c index d5b2d3b0..c8d04273 100644 --- a/src/gen9_hevc_encoder.c +++ b/src/gen9_hevc_encoder.c @@ -1760,26 +1760,25 @@ gen9_hevc_brc_prepare(struct encode_state *encode_state, else priv_state->lcu_brc_enabled = 0; + priv_state->max_bit_rate_in_kbs = + ALIGN(encoder_context->brc.bits_per_second[0], HEVC_BRC_KBPS) / + HEVC_BRC_KBPS; + if (brc_method == HEVC_BRC_CBR) { - priv_state->target_bit_rate_in_kbs = - ALIGN(encoder_context->brc.bits_per_second[0], HEVC_BRC_KBPS) / - HEVC_BRC_KBPS; - priv_state->max_bit_rate_in_kbs = priv_state->target_bit_rate_in_kbs; - priv_state->min_bit_rate_in_kbs = priv_state->target_bit_rate_in_kbs; + priv_state->target_bit_rate_in_kbs = priv_state->max_bit_rate_in_kbs; + priv_state->min_bit_rate_in_kbs = priv_state->max_bit_rate_in_kbs; } else { - if (encoder_context->brc.target_percentage[0] > HEVC_BRC_MIN_TARGET_PERCENTAGE) { - priv_state->target_bit_rate_in_kbs = - ALIGN(encoder_context->brc.bits_per_second[0], HEVC_BRC_KBPS) / - HEVC_BRC_KBPS; - priv_state->max_bit_rate_in_kbs = priv_state->target_bit_rate_in_kbs; - priv_state->min_bit_rate_in_kbs = priv_state->target_bit_rate_in_kbs * + if (encoder_context->brc.target_percentage[0] > HEVC_BRC_MIN_TARGET_PERCENTAGE) + priv_state->min_bit_rate_in_kbs = priv_state->max_bit_rate_in_kbs * (2 * encoder_context->brc.target_percentage[0] - 100) / 100; - priv_state->target_bit_rate_in_kbs = priv_state->max_bit_rate_in_kbs * - encoder_context->brc.target_percentage[0] / 100; + else + priv_state->min_bit_rate_in_kbs = 0; - brc_reset = 1; - } + priv_state->target_bit_rate_in_kbs = priv_state->max_bit_rate_in_kbs * + encoder_context->brc.target_percentage[0] / 100; + + brc_reset = 1; } if (encoder_context->brc.framerate[0].den) |