[Libva] [PATCH Libva-intel-driver 01/18] Encoding: Abstract the calculation of mbmv cost for qp as one function

Zhao, Yakui yakui.zhao at intel.com
Mon Jan 12 05:01:24 PST 2015


From: Zhao Yakui <yakui.zhao at intel.com>

The purpose is to assure that it can be called multi-times in other functions.

Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
---
 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



More information about the Libva mailing list