[Libva] [PATCH libva-intel-driver 08/18] Encoding: Pass the qp parameter into VME shader on Ivybridge

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


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

Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
---
 src/gen7_vme.c           |   12 +++++++++++-
 src/shaders/vme/vme7.inc |    1 +
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/gen7_vme.c b/src/gen7_vme.c
index 8f57e01..ca884bd 100644
--- a/src/gen7_vme.c
+++ b/src/gen7_vme.c
@@ -487,7 +487,16 @@ gen7_vme_fill_vme_batchbuffer(VADriverContextP ctx,
     int mb_x = 0, mb_y = 0;
     int i, s, j;
     unsigned int *command_ptr;
+    struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
+    VAEncPictureParameterBufferH264 *pic_param = (VAEncPictureParameterBufferH264 *)encode_state->pic_param_ext->buffer;
+    VAEncSliceParameterBufferH264 *slice_param = (VAEncSliceParameterBufferH264 *)encode_state->slice_params_ext[0]->buffer;
+    int qp;
+    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;
 
     dri_bo_map(vme_context->vme_batchbuffer.bo, 1);
     command_ptr = vme_context->vme_batchbuffer.bo->virtual;
@@ -537,7 +546,7 @@ gen7_vme_fill_vme_batchbuffer(VADriverContextP ctx,
                     mb_intra_ub &= ~(INTRA_PRED_AVAIL_FLAG_D);
                 }
 
-                *command_ptr++ = (CMD_MEDIA_OBJECT | (8 - 2));
+                *command_ptr++ = (CMD_MEDIA_OBJECT | (9 - 2));
                 *command_ptr++ = kernel;
                 *command_ptr++ = 0;
                 *command_ptr++ = 0;
@@ -548,6 +557,7 @@ gen7_vme_fill_vme_batchbuffer(VADriverContextP ctx,
                 *command_ptr++ = (mb_width << 16 | mb_y << 8 | mb_x);
                 *command_ptr++ = ((encoder_context->quality_level << 24) | (1 << 16) | transform_8x8_mode_flag | (mb_intra_ub << 8));
 
+                *command_ptr++ = qp;
                 i += 1;
             }
 
diff --git a/src/shaders/vme/vme7.inc b/src/shaders/vme/vme7.inc
index e9d5864..38b4faa 100644
--- a/src/shaders/vme/vme7.inc
+++ b/src/shaders/vme/vme7.inc
@@ -136,6 +136,7 @@ define(`input_mb_intra_ub',     `inline_reg0.5')
 define(`num_macroblocks',       `inline_reg0.6')
 define(`quality_level_ub',      `inline_reg0.7')
 
+define(`qp_ub',                 `inline_reg0.8')
 /*
  * GRF 6~11 -- reserved
  */
-- 
1.7.10.1



More information about the Libva mailing list