diff options
author | Zhao Yakui <yakui.zhao@intel.com> | 2013-08-12 15:13:24 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2013-09-06 15:33:47 +0800 |
commit | 159240f5def627909b4dcaf62159e34a4e2bcbc3 (patch) | |
tree | ec986325401217dde3ac85d4a49114a304bfb2c6 | |
parent | 5ae18f29106ffde1004b721013ebb81f7a273690 (diff) |
Pass the constant buffer info for MPEG2 encoding correctly on Ivb
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
(cherry picked from commit 7690091889eac91dcab53e0318f9810c25071e18)
-rw-r--r-- | src/gen7_vme.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/src/gen7_vme.c b/src/gen7_vme.c index 11af9e5..cb754a4 100644 --- a/src/gen7_vme.c +++ b/src/gen7_vme.c @@ -359,23 +359,34 @@ static VAStatus gen7_vme_constant_setup(VADriverContextP ctx, struct intel_encoder_context *encoder_context) { struct gen6_vme_context *vme_context = encoder_context->vme_context; - // unsigned char *constant_buffer; + unsigned char *constant_buffer; unsigned int *vme_state_message; - int mv_num = 32; - if (vme_context->h264_level >= 30) { - mv_num = 16; - if (vme_context->h264_level >= 31) - mv_num = 8; - } + int mv_num; + + vme_state_message = (unsigned int *)vme_context->vme_state_message; + mv_num = 32; + + if (encoder_context->codec == CODEC_H264) { + if (vme_context->h264_level >= 30) { + mv_num = 16; + + if (vme_context->h264_level >= 31) + mv_num = 8; + } + } else if (encoder_context->codec == CODEC_MPEG2) { + mv_num = 2; + } + + + vme_state_message[31] = mv_num; dri_bo_map(vme_context->gpe_context.curbe.bo, 1); assert(vme_context->gpe_context.curbe.bo->virtual); - // constant_buffer = vme_context->curbe.bo->virtual; - vme_state_message = (unsigned int *)vme_context->gpe_context.curbe.bo->virtual; - vme_state_message[31] = mv_num; - - /*TODO copy buffer into CURB*/ + constant_buffer = vme_context->gpe_context.curbe.bo->virtual; + /* Pass the required constant info into the constant buffer */ + memcpy(constant_buffer, (char *)vme_context->vme_state_message, 128); + dri_bo_unmap( vme_context->gpe_context.curbe.bo); return VA_STATUS_SUCCESS; @@ -519,7 +530,7 @@ static VAStatus gen7_vme_avc_state_setup(VADriverContextP ctx, return VA_STATUS_SUCCESS; } -static VAStatus gen7_vme_vme_state_setup(VADriverContextP ctx, +static VAStatus gen7_vme_mpeg2_state_setup(VADriverContextP ctx, struct encode_state *encode_state, int is_intra, struct intel_encoder_context *encoder_context) @@ -560,8 +571,6 @@ static VAStatus gen7_vme_vme_state_setup(VADriverContextP ctx, } //vme_state_message[16] = 0x42424242; //cost function LUT set 0 for Intra - gen7_vme_state_setup_fixup(ctx, encode_state, encoder_context, vme_state_message); - dri_bo_unmap( vme_context->vme_state.bo); return VA_STATUS_SUCCESS; } @@ -999,8 +1008,8 @@ gen7_vme_mpeg2_prepare(VADriverContextP ctx, /*Setup all the memory object*/ gen7_vme_mpeg2_surface_setup(ctx, encode_state, 0, encoder_context); gen7_vme_interface_setup(ctx, encode_state, encoder_context); - gen7_vme_vme_state_setup(ctx, encode_state, 0, encoder_context); gen7_vme_constant_setup(ctx, encode_state, encoder_context); + gen7_vme_mpeg2_state_setup(ctx, encode_state, 0, encoder_context); /*Programing media pipeline*/ gen7_vme_mpeg2_pipeline_programing(ctx, encode_state, 0, encoder_context); |