Currently only the first element is used v2: rebased
Signed-off-by: Xiang, Haihao <haihao.xi...@intel.com> --- 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 a30ace2..0a8720b 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 a21523b..5766f23 100644 --- a/src/gen9_vme.c +++ b/src/gen9_vme.c @@ -623,7 +623,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; -- 1.9.1 _______________________________________________ Libva mailing list Libva@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libva