OSDN Git Service

Gen9 H.264 encoders: Fix condition for enabling MB rate control
authorMark Thompson <sw@jkqxz.net>
Mon, 15 May 2017 20:18:54 +0000 (21:18 +0100)
committerXiang, Haihao <haihao.xiang@intel.com>
Tue, 16 May 2017 05:35:41 +0000 (13:35 +0800)
As documented in va.h, it should not be enabled when the user passes
the value 2 here.  This now matches the behaviour of the H.265
encoder.

Fixes #166.

Signed-off-by: Mark Thompson <sw@jkqxz.net>
src/gen9_avc_encoder.c
src/gen9_vdenc.c

index c0e6e77..a0f664f 100644 (file)
@@ -424,7 +424,7 @@ gen9_avc_update_misc_parameters(VADriverContextP ctx,
 
     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];
+        generic_state->mb_brc_enabled = encoder_context->brc.mb_rate_control[0] == 1;
 
         if (generic_state->target_bit_rate != generic_state->max_bit_rate) {
             generic_state->target_bit_rate = generic_state->max_bit_rate;
@@ -432,7 +432,7 @@ gen9_avc_update_misc_parameters(VADriverContextP ctx,
         }
     } else if (generic_state->internal_rate_mode == VA_RC_VBR) {
         generic_state->min_bit_rate = generic_state->max_bit_rate * (2 * encoder_context->brc.target_percentage[0] - 100) / 100;
-        generic_state->mb_brc_enabled = encoder_context->brc.mb_rate_control[0];
+        generic_state->mb_brc_enabled = encoder_context->brc.mb_rate_control[0] == 1;
 
         if (generic_state->target_bit_rate != generic_state->max_bit_rate * encoder_context->brc.target_percentage[0] / 100) {
             generic_state->target_bit_rate = generic_state->max_bit_rate * encoder_context->brc.target_percentage[0] / 100;
index 9c99cde..8efd10e 100644 (file)
@@ -860,7 +860,7 @@ gen9_vdenc_update_misc_parameters(VADriverContextP ctx,
         vdenc_context->init_vbv_buffer_fullness_in_bit = encoder_context->brc.hrd_initial_buffer_fullness;
 
         vdenc_context->max_bit_rate = ALIGN(encoder_context->brc.bits_per_second[0], 1000) / 1000;
-        vdenc_context->mb_brc_enabled = encoder_context->brc.mb_rate_control[0];
+        vdenc_context->mb_brc_enabled = encoder_context->brc.mb_rate_control[0] == 1;
         vdenc_context->brc_need_reset = (vdenc_context->brc_initted && encoder_context->brc.need_reset);
 
         if (vdenc_context->internal_rate_mode == I965_BRC_CBR) {