On 09/06/2016 11:46 PM, Xiang, Haihao wrote:
Currently only the first element is used

This looks good to me.

Thanks
   Yakui

Signed-off-by: Xiang, Haihao<[email protected]>
---
  src/gen6_mfc.c        |  8 +++----
  src/gen6_mfc.h        |  6 ++---
  src/gen6_mfc_common.c | 66 +++++++++++++++++++++++++--------------------------
  src/gen6_vme.c        |  2 +-
  src/gen75_mfc.c       |  4 ++--
  src/gen75_vme.c       |  4 ++--
  src/gen7_vme.c        |  2 +-
  src/gen8_mfc.c        | 46 +++++++++++++++++------------------
  src/gen8_vme.c        |  2 +-
  src/gen9_vme.c        |  2 +-
  10 files changed, 71 insertions(+), 71 deletions(-)

diff --git a/src/gen6_mfc.c b/src/gen6_mfc.c
index cf20e3b..969c726 100644
--- a/src/gen6_mfc.c
+++ b/src/gen6_mfc.c
@@ -401,9 +401,9 @@ gen6_mfc_avc_slice_state(VADriverContextP ctx,
      for (i = 0; i<  6; i++)
          correct[i] = 
mfc_context->bit_rate_control_context[slice_type].Correct[i];

-    grow = mfc_context->bit_rate_control_context[slice_type].GrowInit +
+    grow = mfc_context->bit_rate_control_context[slice_type].GrowInit +
          (mfc_context->bit_rate_control_context[slice_type].GrowResistance<<  
4);
-    shrink = mfc_context->bit_rate_control_context[slice_type].ShrinkInit +
+    shrink = mfc_context->bit_rate_control_context[slice_type].ShrinkInit +
          (mfc_context->bit_rate_control_context[slice_type].ShrinkResistance<< 
 4);

      BEGIN_BCS_BATCH(batch, 11);;
@@ -799,7 +799,7 @@ gen6_mfc_avc_pipeline_slice_programing(VADriverContextP ctx,

      qp_slice = qp;
      if (rate_control_mode == VA_RC_CBR) {
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];
          if (encode_state->slice_header_index[slice_index] == 0) {
              pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
              qp_slice = qp;
@@ -1189,7 +1189,7 @@ gen6_mfc_avc_batchbuffer_slice(VADriverContextP ctx,

      qp_slice = qp;
      if (rate_control_mode == VA_RC_CBR) {
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];
          if (encode_state->slice_header_index[slice_index] == 0) {
              pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
              /* Use the adjusted qp when slice_header is generated by driver */
diff --git a/src/gen6_mfc.h b/src/gen6_mfc.h
index a130c83..02591a3 100644
--- a/src/gen6_mfc.h
+++ b/src/gen6_mfc.h
@@ -229,9 +229,9 @@ struct gen6_mfc_context
      struct {
          int mode;
          int gop_nums[3];
-        int target_frame_size[3]; // I,P,B
-        int qp_prime_y[3];
-        double bits_per_frame;
+        int target_frame_size[MAX_TEMPORAL_LAYERS][3]; // I,P,B
+        int qp_prime_y[MAX_TEMPORAL_LAYERS][3];
+        double bits_per_frame[MAX_TEMPORAL_LAYERS];
          double qpf_rounding_accumulator;

          double saved_bps;
diff --git a/src/gen6_mfc_common.c b/src/gen6_mfc_common.c
index d388d44..5c10147 100644
--- a/src/gen6_mfc_common.c
+++ b/src/gen6_mfc_common.c
@@ -108,19 +108,19 @@ static void intel_mfc_brc_init(struct encode_state 
*encode_state,
      mfc_context->brc.mode = encoder_context->rate_control_mode;

      for (i = 0; i<  3; i++) {
-        mfc_context->brc.qp_prime_y[i] = 26;
+        mfc_context->brc.qp_prime_y[0][i] = 26;
      }

-    mfc_context->brc.target_frame_size[SLICE_TYPE_I] = (int)((double)((bitrate 
* intra_period)/framerate) /
+    mfc_context->brc.target_frame_size[0][SLICE_TYPE_I] = 
(int)((double)((bitrate * intra_period)/framerate) /
                                                               (double)(inum + 
BRC_PWEIGHT * pnum + BRC_BWEIGHT * bnum));
-    mfc_context->brc.target_frame_size[SLICE_TYPE_P] = BRC_PWEIGHT * 
mfc_context->brc.target_frame_size[SLICE_TYPE_I];
-    mfc_context->brc.target_frame_size[SLICE_TYPE_B] = BRC_BWEIGHT * 
mfc_context->brc.target_frame_size[SLICE_TYPE_I];
+    mfc_context->brc.target_frame_size[0][SLICE_TYPE_P] = BRC_PWEIGHT * 
mfc_context->brc.target_frame_size[0][SLICE_TYPE_I];
+    mfc_context->brc.target_frame_size[0][SLICE_TYPE_B] = BRC_BWEIGHT * 
mfc_context->brc.target_frame_size[0][SLICE_TYPE_I];

      mfc_context->brc.gop_nums[SLICE_TYPE_I] = inum;
      mfc_context->brc.gop_nums[SLICE_TYPE_P] = pnum;
      mfc_context->brc.gop_nums[SLICE_TYPE_B] = bnum;

-    bpf = mfc_context->brc.bits_per_frame = bitrate/framerate;
+    bpf = mfc_context->brc.bits_per_frame[0] = bitrate/framerate;

      mfc_context->hrd.buffer_size = encoder_context->brc.hrd_buffer_size;
      mfc_context->hrd.current_buffer_fullness =
@@ -131,19 +131,19 @@ static void intel_mfc_brc_init(struct encode_state 
*encode_state,
      mfc_context->hrd.violation_noted = 0;

      if ((bpf>  qp51_size)&&  (bpf<  qp1_size)) {
-        mfc_context->brc.qp_prime_y[SLICE_TYPE_P] = 51 - 50*(bpf - 
qp51_size)/(qp1_size - qp51_size);
+        mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P] = 51 - 50*(bpf - 
qp51_size)/(qp1_size - qp51_size);
      }
      else if (bpf>= qp1_size)
-        mfc_context->brc.qp_prime_y[SLICE_TYPE_P] = 1;
+        mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P] = 1;
      else if (bpf<= qp51_size)
-        mfc_context->brc.qp_prime_y[SLICE_TYPE_P] = 51;
+        mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P] = 51;

-    mfc_context->brc.qp_prime_y[SLICE_TYPE_I] = 
mfc_context->brc.qp_prime_y[SLICE_TYPE_P];
-    mfc_context->brc.qp_prime_y[SLICE_TYPE_B] = 
mfc_context->brc.qp_prime_y[SLICE_TYPE_I];
+    mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I] = 
mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P];
+    mfc_context->brc.qp_prime_y[0][SLICE_TYPE_B] = 
mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I];

-    BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_I], 1, 51);
-    BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_P], 1, 51);
-    BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_B], 1, 51);
+    BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I], 1, 51);
+    BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P], 1, 51);
+    BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_B], 1, 51);
  }

  int intel_mfc_update_hrd(struct encode_state *encode_state,
@@ -160,7 +160,7 @@ int intel_mfc_update_hrd(struct encode_state *encode_state,
          return BRC_UNDERFLOW;
      }

-    mfc_context->hrd.current_buffer_fullness += 
mfc_context->brc.bits_per_frame;
+    mfc_context->hrd.current_buffer_fullness += 
mfc_context->brc.bits_per_frame[0];
      if (mfc_context->hrd.buffer_size>  0&&  
mfc_context->hrd.current_buffer_fullness>  mfc_context->hrd.buffer_size) {
          if (mfc_context->brc.mode == VA_RC_VBR)
              mfc_context->hrd.current_buffer_fullness = 
mfc_context->hrd.buffer_size;
@@ -180,9 +180,9 @@ int intel_mfc_brc_postpack(struct encode_state 
*encode_state,
      gen6_brc_status sts = BRC_NO_HRD_VIOLATION;
      VAEncSliceParameterBufferH264 *pSliceParameter = (VAEncSliceParameterBufferH264 
*)encode_state->slice_params_ext[0]->buffer;
      int slicetype = 
intel_avc_enc_slice_type_fixup(pSliceParameter->slice_type);
-    int qpi = mfc_context->brc.qp_prime_y[SLICE_TYPE_I];
-    int qpp = mfc_context->brc.qp_prime_y[SLICE_TYPE_P];
-    int qpb = mfc_context->brc.qp_prime_y[SLICE_TYPE_B];
+    int qpi = mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I];
+    int qpp = mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P];
+    int qpb = mfc_context->brc.qp_prime_y[0][SLICE_TYPE_B];
      int qp; // quantizer of previously encoded slice of current type
      int qpn; // predicted quantizer for next frame of current type in integer 
format
      double qpf; // predicted quantizer for next frame of current type in 
float format
@@ -195,9 +195,9 @@ int intel_mfc_brc_postpack(struct encode_state 
*encode_state,
      double x, y;
      double frame_size_alpha;

-    qp = mfc_context->brc.qp_prime_y[slicetype];
+    qp = mfc_context->brc.qp_prime_y[0][slicetype];

-    target_frame_size = mfc_context->brc.target_frame_size[slicetype];
+    target_frame_size = mfc_context->brc.target_frame_size[0][slicetype];
      if (mfc_context->hrd.buffer_capacity<  5)
          frame_size_alpha = 0;
      else
@@ -257,23 +257,23 @@ int intel_mfc_brc_postpack(struct encode_state 
*encode_state,
          /* correcting QPs of slices of other types */
          if (slicetype == SLICE_TYPE_P) {
              if (abs(qpn + BRC_P_B_QP_DIFF - qpb)>  2)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_B] += (qpn + BRC_P_B_QP_DIFF 
- qpb)>>  1;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_B] += (qpn + 
BRC_P_B_QP_DIFF - qpb)>>  1;
              if (abs(qpn - BRC_I_P_QP_DIFF - qpi)>  2)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_I] += (qpn - BRC_I_P_QP_DIFF 
- qpi)>>  1;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I] += (qpn - 
BRC_I_P_QP_DIFF - qpi)>>  1;
          } else if (slicetype == SLICE_TYPE_I) {
              if (abs(qpn + BRC_I_B_QP_DIFF - qpb)>  4)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_B] += (qpn + BRC_I_B_QP_DIFF 
- qpb)>>  2;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_B] += (qpn + 
BRC_I_B_QP_DIFF - qpb)>>  2;
              if (abs(qpn + BRC_I_P_QP_DIFF - qpp)>  2)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_P] += (qpn + BRC_I_P_QP_DIFF 
- qpp)>>  2;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P] += (qpn + 
BRC_I_P_QP_DIFF - qpp)>>  2;
          } else { // SLICE_TYPE_B
              if (abs(qpn - BRC_P_B_QP_DIFF - qpp)>  2)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_P] += (qpn - BRC_P_B_QP_DIFF 
- qpp)>>  1;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P] += (qpn - 
BRC_P_B_QP_DIFF - qpp)>>  1;
              if (abs(qpn - BRC_I_B_QP_DIFF - qpi)>  4)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_I] += (qpn - BRC_I_B_QP_DIFF 
- qpi)>>  2;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I] += (qpn - 
BRC_I_B_QP_DIFF - qpi)>>  2;
          }
-        BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_I], 1, 51);
-        BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_P], 1, 51);
-        BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_B], 1, 51);
+        BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I], 1, 51);
+        BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P], 1, 51);
+        BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_B], 1, 51);
      } else if (sts == BRC_UNDERFLOW) { // underflow
          if (qpn<= qp) qpn = qp + 1;
          if (qpn>  51) {
@@ -288,7 +288,7 @@ int intel_mfc_brc_postpack(struct encode_state 
*encode_state,
          }
      }

-    mfc_context->brc.qp_prime_y[slicetype] = qpn;
+    mfc_context->brc.qp_prime_y[0][slicetype] = qpn;

      return sts;
  }
@@ -807,7 +807,7 @@ void intel_vme_update_mbmv_cost(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          qp = pic_param->pic_init_qp + slice_param->slice_qp_delta;
      else
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];

      if (vme_state_message == NULL)
          return;
@@ -836,7 +836,7 @@ void intel_vme_vp8_update_mbmv_cost(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          qp = q_matrix->quantization_index[0];
      else
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];

      lambda = intel_lambda_qp(qp * QP_MAX / VP8_QP_MAX);

@@ -965,7 +965,7 @@ gen7_vme_walker_fill_vme_batchbuffer(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          qp = pic_param->pic_init_qp + slice_param->slice_qp_delta;
      else
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];

  #define               USE_SCOREBOARD          (1<<  21)

@@ -1918,7 +1918,7 @@ intel_h264_enc_roi_config(VADriverContextP ctx,
          int qp;
          int slice_type = 
intel_avc_enc_slice_type_fixup(slice_param->slice_type);

-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];
          intel_h264_enc_roi_cbr(ctx, qp, pParamROI,encode_state, 
encoder_context);

      } else if (encoder_context->rate_control_mode == VA_RC_CQP){
diff --git a/src/gen6_vme.c b/src/gen6_vme.c
index 183f087..fb04749 100644
--- a/src/gen6_vme.c
+++ b/src/gen6_vme.c
@@ -369,7 +369,7 @@ static void gen6_vme_state_setup_fixup(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          vme_state_message[16] = intra_mb_mode_cost_table[pic_param->pic_init_qp 
+ slice_param->slice_qp_delta];
      else
-        vme_state_message[16] = 
intra_mb_mode_cost_table[mfc_context->brc.qp_prime_y[SLICE_TYPE_I]];
+        vme_state_message[16] = 
intra_mb_mode_cost_table[mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I]];
  }

  static VAStatus gen6_vme_vme_state_setup(VADriverContextP ctx,
diff --git a/src/gen75_mfc.c b/src/gen75_mfc.c
index c42de38..2d6baa6 100644
--- a/src/gen75_mfc.c
+++ b/src/gen75_mfc.c
@@ -1175,7 +1175,7 @@ gen75_mfc_avc_pipeline_slice_programing(VADriverContextP 
ctx,

      qp_slice = qp;
      if (rate_control_mode == VA_RC_CBR) {
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];
          if (encode_state->slice_header_index[slice_index] == 0) {
              pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
              qp_slice = qp;
@@ -1522,7 +1522,7 @@ gen75_mfc_avc_batchbuffer_slice(VADriverContextP ctx,

      qp_slice = qp;
      if (rate_control_mode == VA_RC_CBR) {
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];
          if (encode_state->slice_header_index[slice_index] == 0) {
              pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
              qp_slice = qp;
diff --git a/src/gen75_vme.c b/src/gen75_vme.c
index fd6363d..9223f68 100644
--- a/src/gen75_vme.c
+++ b/src/gen75_vme.c
@@ -441,7 +441,7 @@ static void gen75_vme_state_setup_fixup(VADriverContextP 
ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          vme_state_message[0] = intra_mb_mode_cost_table[pic_param->pic_init_qp + 
slice_param->slice_qp_delta];
      else
-        vme_state_message[0] = 
intra_mb_mode_cost_table[mfc_context->brc.qp_prime_y[SLICE_TYPE_I]];
+        vme_state_message[0] = 
intra_mb_mode_cost_table[mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I]];
  }

  static VAStatus gen75_vme_vme_state_setup(VADriverContextP ctx,
@@ -504,7 +504,7 @@ gen75_vme_fill_vme_batchbuffer(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          qp = pic_param->pic_init_qp + slice_param->slice_qp_delta;
      else
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];

      dri_bo_map(vme_context->vme_batchbuffer.bo, 1);
      command_ptr = vme_context->vme_batchbuffer.bo->virtual;
diff --git a/src/gen7_vme.c b/src/gen7_vme.c
index 3073cd4..7530d19 100644
--- a/src/gen7_vme.c
+++ b/src/gen7_vme.c
@@ -560,7 +560,7 @@ gen7_vme_fill_vme_batchbuffer(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          qp = pic_param->pic_init_qp + slice_param->slice_qp_delta;
      else
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];

      dri_bo_map(vme_context->vme_batchbuffer.bo, 1);
      command_ptr = vme_context->vme_batchbuffer.bo->virtual;
diff --git a/src/gen8_mfc.c b/src/gen8_mfc.c
index 9da0730..ef553fb 100644
--- a/src/gen8_mfc.c
+++ b/src/gen8_mfc.c
@@ -1178,7 +1178,7 @@ gen8_mfc_avc_pipeline_slice_programing(VADriverContextP 
ctx,

      qp_slice = qp;
      if (rate_control_mode == VA_RC_CBR) {
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];
          if (encode_state->slice_header_index[slice_index] == 0) {
              pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
              qp_slice = qp;
@@ -1535,7 +1535,7 @@ gen8_mfc_avc_batchbuffer_slice(VADriverContextP ctx,

      qp_slice = qp;
      if (rate_control_mode == VA_RC_CBR) {
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];
          if (encode_state->slice_header_index[slice_index] == 0) {
              pSliceParameter->slice_qp_delta = qp - pPicParameter->pic_init_qp;
              qp_slice = qp;
@@ -3340,23 +3340,23 @@ static void gen8_mfc_vp8_brc_init(struct encode_state 
*encode_state,

      mfc_context->brc.mode = encoder_context->rate_control_mode;

-    mfc_context->brc.target_frame_size[SLICE_TYPE_I] = (int)((double)((bitrate 
* intra_period)/frame_rate) /
+    mfc_context->brc.target_frame_size[0][SLICE_TYPE_I] = 
(int)((double)((bitrate * intra_period)/frame_rate) /
                                                               (double)(inum + 
BRC_PWEIGHT * pnum ));
-    mfc_context->brc.target_frame_size[SLICE_TYPE_P] = BRC_PWEIGHT * 
mfc_context->brc.target_frame_size[SLICE_TYPE_I];
+    mfc_context->brc.target_frame_size[0][SLICE_TYPE_P] = BRC_PWEIGHT * 
mfc_context->brc.target_frame_size[0][SLICE_TYPE_I];

      mfc_context->brc.gop_nums[SLICE_TYPE_I] = inum;
      mfc_context->brc.gop_nums[SLICE_TYPE_P] = pnum;

-    mfc_context->brc.bits_per_frame = bitrate/frame_rate;
+    mfc_context->brc.bits_per_frame[0] = bitrate/frame_rate;

-    mfc_context->brc.qp_prime_y[SLICE_TYPE_I] = 
gen8_mfc_vp8_qindex_estimate(encode_state,
-                                                                             
mfc_context,
-                                                                             
mfc_context->brc.target_frame_size[SLICE_TYPE_I],
-                                                                             
1);
-    mfc_context->brc.qp_prime_y[SLICE_TYPE_P] = 
gen8_mfc_vp8_qindex_estimate(encode_state,
-                                                                             
mfc_context,
-                                                                             
mfc_context->brc.target_frame_size[SLICE_TYPE_P],
-                                                                             
0);
+    mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I] = 
gen8_mfc_vp8_qindex_estimate(encode_state,
+                                                                               
 mfc_context,
+                                                                                
mfc_context->brc.target_frame_size[0][SLICE_TYPE_I],
+                                                                               
 1);
+    mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P] = 
gen8_mfc_vp8_qindex_estimate(encode_state,
+                                                                               
 mfc_context,
+                                                                                
mfc_context->brc.target_frame_size[0][SLICE_TYPE_P],
+                                                                               
 0);

      mfc_context->hrd.buffer_size = (double)param_hrd->buffer_size;
      mfc_context->hrd.current_buffer_fullness =
@@ -3376,8 +3376,8 @@ static int gen8_mfc_vp8_brc_postpack(struct encode_state 
*encode_state,
      VAEncPictureParameterBufferVP8 *pic_param = (VAEncPictureParameterBufferVP8 
*)encode_state->pic_param_ext->buffer;
      int is_key_frame = !pic_param->pic_flags.bits.frame_type;
      int slicetype = (is_key_frame ? SLICE_TYPE_I : SLICE_TYPE_P);
-    int qpi = mfc_context->brc.qp_prime_y[SLICE_TYPE_I];
-    int qpp = mfc_context->brc.qp_prime_y[SLICE_TYPE_P];
+    int qpi = mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I];
+    int qpp = mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P];
      int qp; // quantizer of previously encoded slice of current type
      int qpn; // predicted quantizer for next frame of current type in integer 
format
      double qpf; // predicted quantizer for next frame of current type in 
float format
@@ -3392,9 +3392,9 @@ static int gen8_mfc_vp8_brc_postpack(struct encode_state 
*encode_state,
      unsigned int max_qindex = pic_param->clamp_qindex_high;
      unsigned int min_qindex = pic_param->clamp_qindex_low;

-    qp = mfc_context->brc.qp_prime_y[slicetype];
+    qp = mfc_context->brc.qp_prime_y[0][slicetype];

-    target_frame_size = mfc_context->brc.target_frame_size[slicetype];
+    target_frame_size = mfc_context->brc.target_frame_size[0][slicetype];
      if (mfc_context->hrd.buffer_capacity<  5)
          frame_size_alpha = 0;
      else
@@ -3455,13 +3455,13 @@ static int gen8_mfc_vp8_brc_postpack(struct 
encode_state *encode_state,
          /* correcting QPs of slices of other types */
          if (!is_key_frame) {
              if (abs(qpn - BRC_I_P_QP_DIFF - qpi)>  4)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_I] += (qpn - BRC_I_P_QP_DIFF 
- qpi)>>  2;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I] += (qpn - 
BRC_I_P_QP_DIFF - qpi)>>  2;
          } else {
              if (abs(qpn + BRC_I_P_QP_DIFF - qpp)>  4)
-                mfc_context->brc.qp_prime_y[SLICE_TYPE_P] += (qpn + BRC_I_P_QP_DIFF 
- qpp)>>  2;
+                mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P] += (qpn + 
BRC_I_P_QP_DIFF - qpp)>>  2;
          }
-        BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_I], min_qindex, 
max_qindex);
-        BRC_CLIP(mfc_context->brc.qp_prime_y[SLICE_TYPE_P], min_qindex, 
max_qindex);
+        BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_I], min_qindex, 
max_qindex);
+        BRC_CLIP(mfc_context->brc.qp_prime_y[0][SLICE_TYPE_P], min_qindex, 
max_qindex);
      } else if (sts == BRC_UNDERFLOW) { // underflow
          if (qpn<= qp) qpn = qp + 2;
          if (qpn>  max_qindex) {
@@ -3476,7 +3476,7 @@ static int gen8_mfc_vp8_brc_postpack(struct encode_state 
*encode_state,
          }
      }

-    mfc_context->brc.qp_prime_y[slicetype] = qpn;
+    mfc_context->brc.qp_prime_y[0][slicetype] = qpn;

      return sts;
  }
@@ -3672,7 +3672,7 @@ static void gen8_mfc_vp8_init(VADriverContextP ctx,
      rate_control_mode = encoder_context->rate_control_mode;

      if (rate_control_mode == VA_RC_CBR) {
-        q_matrix->quantization_index[0] = 
mfc_context->brc.qp_prime_y[slice_type];
+        q_matrix->quantization_index[0] = 
mfc_context->brc.qp_prime_y[0][slice_type];
          for (i = 1; i<  4; i++)
              q_matrix->quantization_index[i] = q_matrix->quantization_index[0];
          for (i = 0; i<  5; i++)
diff --git a/src/gen8_vme.c b/src/gen8_vme.c
index 8c717b2..5ad0243 100644
--- a/src/gen8_vme.c
+++ b/src/gen8_vme.c
@@ -575,7 +575,7 @@ gen8_vme_fill_vme_batchbuffer(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          qp = pic_param->pic_init_qp + slice_param->slice_qp_delta;
      else
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];

      dri_bo_map(vme_context->vme_batchbuffer.bo, 1);
      command_ptr = vme_context->vme_batchbuffer.bo->virtual;
diff --git a/src/gen9_vme.c b/src/gen9_vme.c
index fa59a52..e80467d 100644
--- a/src/gen9_vme.c
+++ b/src/gen9_vme.c
@@ -620,7 +620,7 @@ gen9_vme_fill_vme_batchbuffer(VADriverContextP ctx,
      if (encoder_context->rate_control_mode == VA_RC_CQP)
          qp = pic_param->pic_init_qp + slice_param->slice_qp_delta;
      else
-        qp = mfc_context->brc.qp_prime_y[slice_type];
+        qp = mfc_context->brc.qp_prime_y[0][slice_type];

      dri_bo_map(vme_context->vme_batchbuffer.bo, 1);
      command_ptr = vme_context->vme_batchbuffer.bo->virtual;

_______________________________________________
Libva mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libva

Reply via email to