From: Zhao Yakui <[email protected]> The purpose is to assure that it can be called multi-times in other functions.
Signed-off-by: Zhao Yakui <[email protected]> --- src/gen6_mfc_common.c | 50 +++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/gen6_mfc_common.c b/src/gen6_mfc_common.c index fe41dac..95e227c 100644 --- a/src/gen6_mfc_common.c +++ b/src/gen6_mfc_common.c @@ -826,29 +826,14 @@ static float intel_lambda_qp(int qp) } -void intel_vme_update_mbmv_cost(VADriverContextP ctx, - struct encode_state *encode_state, - struct intel_encoder_context *encoder_context) +static +void intel_h264_calc_mbmvcost_qp(int qp, + int slice_type, + uint8_t *vme_state_message) { - struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; - struct gen6_vme_context *vme_context = encoder_context->vme_context; - VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; - VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; - int qp, m_cost, j, mv_count; - uint8_t *vme_state_message = (uint8_t *)(vme_context->vme_state_message); + int m_cost, j, mv_count; float lambda, m_costf; - int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); - - - if (encoder_context->rate_control_mode == VA_RC_CQP) - qp = pic_param->pic_init_qp + slice_param->slice_qp_delta; - else - qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; - - if (vme_state_message == NULL) - return; - assert(qp <= QP_MAX); lambda = intel_lambda_qp(qp); if (slice_type == SLICE_TYPE_I) { @@ -936,6 +921,31 @@ void intel_vme_update_mbmv_cost(VADriverContextP ctx, vme_state_message[MODE_INTER_BWD] = intel_format_lutvalue(m_cost, 0x6f); } } + return; +} + +void intel_vme_update_mbmv_cost(VADriverContextP ctx, + struct encode_state *encode_state, + struct intel_encoder_context *encoder_context) +{ + struct gen6_mfc_context *mfc_context = encoder_context->mfc_context; + struct gen6_vme_context *vme_context = encoder_context->vme_context; + VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer; + VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer; + int qp; + uint8_t *vme_state_message = (uint8_t *)(vme_context->vme_state_message); + + int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type); + + if (encoder_context->rate_control_mode == VA_RC_CQP) + qp = pic_param->pic_init_qp + slice_param->slice_qp_delta; + else + qp = mfc_context->bit_rate_control_context[slice_type].QpPrimeY; + + if (vme_state_message == NULL) + return; + + intel_h264_calc_mbmvcost_qp(qp, slice_type, vme_state_message); } -- 1.7.10.1 _______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
