}
-#define MODE_INTRA_NONPRED 0
-#define MODE_INTRA_16X16 1
-#define MODE_INTRA_8X8 2
-#define MODE_INTRA_4X4 3
-#define MODE_INTER_16X8 4
-#define MODE_INTER_8X16 4
-#define MODE_INTER_8X8 5
-#define MODE_INTER_8X4 6
-#define MODE_INTER_4X8 6
-#define MODE_INTER_4X4 7
-#define MODE_INTER_16X16 8
-#define MODE_INTER_BWD 9
-#define MODE_REFID_COST 10
-#define MODE_CHROMA_INTRA 11
-
-#define MODE_INTER_MV0 12
-#define MODE_INTER_MV1 13
-#define MODE_INTER_MV2 14
-
-#define MODE_INTER_MV3 15
-#define MODE_INTER_MV4 16
-#define MODE_INTER_MV5 17
-#define MODE_INTER_MV6 18
-#define MODE_INTER_MV7 19
#define QP_MAX 52
Bool gen7_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context);
+#define MODE_INTRA_NONPRED 0
+#define MODE_INTRA_16X16 1
+#define MODE_INTRA_8X8 2
+#define MODE_INTRA_4X4 3
+#define MODE_INTER_16X8 4
+#define MODE_INTER_8X16 4
+#define MODE_INTER_8X8 5
+#define MODE_INTER_8X4 6
+#define MODE_INTER_4X8 6
+#define MODE_INTER_4X4 7
+#define MODE_INTER_16X16 8
+#define MODE_INTER_BWD 9
+#define MODE_REFID_COST 10
+#define MODE_CHROMA_INTRA 11
+
+#define MODE_INTER_MV0 12
+#define MODE_INTER_MV1 13
+#define MODE_INTER_MV2 14
+
+#define MODE_INTER_MV3 15
+#define MODE_INTER_MV4 16
+#define MODE_INTER_MV5 17
+#define MODE_INTER_MV6 18
+#define MODE_INTER_MV7 19
+
#endif /* _GEN6_VME_H_ */
#undef SURFACE_STATE_PADDED_SIZE
#endif
+#define VME_MSG_LENGTH 32
#define SURFACE_STATE_PADDED_SIZE_0_GEN7 ALIGN(sizeof(struct gen7_surface_state), 32)
#define SURFACE_STATE_PADDED_SIZE_1_GEN7 ALIGN(sizeof(struct gen7_surface_state2), 32)
#define SURFACE_STATE_PADDED_SIZE_GEN7 MAX(SURFACE_STATE_PADDED_SIZE_0_GEN7, SURFACE_STATE_PADDED_SIZE_1_GEN7)
vme_state_message[16] = intra_mb_mode_cost_table[mfc_context->bit_rate_control_context[slice_param->slice_type].QpPrimeY];
}
+static VAStatus gen7_vme_avc_state_setup(VADriverContextP ctx,
+ struct encode_state *encode_state,
+ int is_intra,
+ struct intel_encoder_context *encoder_context)
+{
+ struct gen6_vme_context *vme_context = encoder_context->vme_context;
+ unsigned int *vme_state_message;
+ unsigned int *mb_cost_table;
+ int i;
+
+ mb_cost_table = (unsigned int *)vme_context->vme_state_message;
+ //building VME state message
+ dri_bo_map(vme_context->vme_state.bo, 1);
+ assert(vme_context->vme_state.bo->virtual);
+ vme_state_message = (unsigned int *)vme_context->vme_state.bo->virtual;
+
+ vme_state_message[0] = 0x01010101;
+ vme_state_message[1] = 0x10010101;
+ vme_state_message[2] = 0x0F0F0F0F;
+ vme_state_message[3] = 0x100F0F0F;
+ vme_state_message[4] = 0x01010101;
+ vme_state_message[5] = 0x10010101;
+ vme_state_message[6] = 0x0F0F0F0F;
+ vme_state_message[7] = 0x100F0F0F;
+ vme_state_message[8] = 0x01010101;
+ vme_state_message[9] = 0x10010101;
+ vme_state_message[10] = 0x0F0F0F0F;
+ vme_state_message[11] = 0x000F0F0F;
+ vme_state_message[12] = 0x00;
+ vme_state_message[13] = 0x00;
+
+ vme_state_message[14] = (mb_cost_table[2] & 0xFFFF);
+ vme_state_message[15] = 0;
+ vme_state_message[16] = mb_cost_table[0];
+ vme_state_message[17] = mb_cost_table[1];
+ vme_state_message[18] = mb_cost_table[3];
+ vme_state_message[19] = mb_cost_table[4];
+
+ for(i = 20; i < 32; i++) {
+ vme_state_message[i] = 0;
+ }
+
+ dri_bo_unmap( vme_context->vme_state.bo);
+ return VA_STATUS_SUCCESS;
+}
+
static VAStatus gen7_vme_vme_state_setup(VADriverContextP ctx,
struct encode_state *encode_state,
int is_intra,
if (!vme_context->h264_level ||
(vme_context->h264_level != pSequenceParameter->level_idc)) {
vme_context->h264_level = pSequenceParameter->level_idc;
- }
+ }
+
+ intel_vme_update_mbmv_cost(ctx, encode_state, encoder_context);
/*Setup all the memory object*/
gen7_vme_surface_setup(ctx, encode_state, is_intra, encoder_context);
gen7_vme_interface_setup(ctx, encode_state, encoder_context);
gen7_vme_constant_setup(ctx, encode_state, encoder_context);
- gen7_vme_vme_state_setup(ctx, encode_state, is_intra, encoder_context);
+ gen7_vme_avc_state_setup(ctx, encode_state, is_intra, encoder_context);
/*Programing media pipeline*/
gen7_vme_pipeline_programing(ctx, encode_state, encoder_context);
dri_bo_unreference(vme_context->vme_batchbuffer.bo);
vme_context->vme_batchbuffer.bo = NULL;
+ if (vme_context->vme_state_message) {
+ free(vme_context->vme_state_message);
+ vme_context->vme_state_message = NULL;
+ }
+
free(vme_context);
}
encoder_context->vme_context = vme_context;
encoder_context->vme_context_destroy = gen7_vme_context_destroy;
+ vme_context->vme_state_message = malloc(VME_MSG_LENGTH * sizeof(int));
return True;
}