unsigned char target_mb_size,unsigned char max_mb_size, int slice_type,
struct intel_batchbuffer *batch)
{
+ struct gen6_vme_context *vme_context = encoder_context->vme_context;
int len_in_dwords = 11;
if (batch == NULL)
/*Stuff for Inter MB*/
OUT_BCS_BATCH(batch, msg[1]);
- OUT_BCS_BATCH(batch, 0x0);
- OUT_BCS_BATCH(batch, 0x0);
+ OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[0]);
+ OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[1]);
/*MaxSizeInWord and TargetSzieInWord*/
OUT_BCS_BATCH(batch, (max_mb_size << 24) |
int mb_x,
int mb_y,
int width_in_mbs,
- int qp)
+ int qp,
+ unsigned int ref_index[2])
{
- BEGIN_BATCH(batch, 12);
+ BEGIN_BATCH(batch, 14);
- OUT_BATCH(batch, CMD_MEDIA_OBJECT | (12 - 2));
+ OUT_BATCH(batch, CMD_MEDIA_OBJECT | (14 - 2));
OUT_BATCH(batch, index);
OUT_BATCH(batch, 0);
OUT_BATCH(batch, 0);
OUT_BATCH(batch,
qp << 16 |
width_in_mbs);
+ OUT_BATCH(batch, ref_index[0]);
+ OUT_BATCH(batch, ref_index[1]);
ADVANCE_BATCH(batch);
}
{
struct intel_batchbuffer *batch = encoder_context->base.batch;
struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
+ struct gen6_vme_context *vme_context = encoder_context->vme_context;
int width_in_mbs = (mfc_context->surface_state.width + 15) / 16;
int total_mbs = slice_param->num_macroblocks;
int number_mb_cmds = 128;
mb_x,
mb_y,
width_in_mbs,
- qp);
+ qp,
+ vme_context->ref_index_in_mb);
if (first_object) {
head_offset += head_size;
mb_x,
mb_y,
width_in_mbs,
- qp);
+ qp,
+ vme_context->ref_index_in_mb);
}
}
int max_num_references;
VAPictureH264 *curr_pic;
VAPictureH264 *ref_list;
+ int ref_idx;
if (list_index == 0) {
max_num_references = pic_param->num_ref_idx_l0_active_minus1 + 1;
obj_surface = encode_state->reference_objects[list_index];
vme_context->used_references[list_index] = &pic_param->ReferenceFrames[list_index];
}
- } else {
- int ref_idx;
+ ref_idx = 0;
+ } else {
curr_pic = &pic_param->CurrPic;
/* select the reference frame in temporal space */
if (obj_surface &&
obj_surface->bo) {
+ assert(ref_idx >= 0);
vme_context->used_reference_objects[list_index] = obj_surface;
vme_source_surface_state(ctx, surface_index, obj_surface, encoder_context);
+ vme_context->ref_index_in_mb[list_index] = (ref_idx << 24 |
+ ref_idx << 16 |
+ ref_idx << 8 |
+ ref_idx);
} else {
vme_context->used_reference_objects[list_index] = NULL;
vme_context->used_references[list_index] = NULL;
+ vme_context->ref_index_in_mb[list_index] = 0;
}
}
struct object_surface *used_reference_objects[2];
void *used_references[2];
+ unsigned int ref_index_in_mb[2];
};
#define MPEG2_PIC_WIDTH_HEIGHT 30
unsigned char target_mb_size,unsigned char max_mb_size, int slice_type,
struct intel_batchbuffer *batch)
{
+ struct gen6_vme_context *vme_context = encoder_context->vme_context;
int len_in_dwords = 12;
unsigned int inter_msg = 0;
if (batch == NULL)
inter_msg = msg[1] >> 8;
/*Stuff for Inter MB*/
OUT_BCS_BATCH(batch, inter_msg);
- OUT_BCS_BATCH(batch, 0x0);
- OUT_BCS_BATCH(batch, 0x0);
+ OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[0]);
+ OUT_BCS_BATCH(batch, vme_context->ref_index_in_mb[1]);
/*MaxSizeInWord and TargetSzieInWord*/
OUT_BCS_BATCH(batch, (max_mb_size << 24) |
define(`mb_xy', `inline_reg0.16') /* :uw, */
define(`width_in_mb', `inline_reg0.20') /* :uw, the picture width in macroblocks */
define(`qp', `inline_reg0.22') /* :ub, */
+define(`ref_idx0', `inline_reg0.24') /* :ud */
+define(`ref_idx1', `inline_reg0.28') /* :ud */
/*
* GRF 8~15 -- temporary registers
/* DW7 */
mov (1) pak_object7_ud<1>:ud ob_read_wb0.4<0,1,0>:ud {align1} ;
+ /* DW8 */
+ mov (1) pak_object8_ud<1>:ud ref_idx0<0,1,0>:ud {align1} ;
+
+ /* DW9 */
+ mov (1) pak_object9_ud<1>:ud ref_idx1<0,1,0>:ud {align1} ;
+
jmpi (1) __OUTPUT_PAK_COMMAND ;
__FILL_INTRA_PAK_COMMAND:
{ 0x00800001, 0x23400061, 0x00000000, 0x00000000 },
{ 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 },
{ 0x01000005, 0x20000c20, 0x00000200, 0x00002000 },
- { 0x00110020, 0x34001c00, 0x00001400, 0x00000022 },
+ { 0x00110020, 0x34001c00, 0x00001400, 0x00000026 },
{ 0x00000001, 0x23400061, 0x00000000, 0x71490009 },
{ 0x00000041, 0x23480c21, 0x000001e0, 0x000000a0 },
{ 0x00000001, 0x23540061, 0x00000000, 0x000f000f },
{ 0x00110001, 0x23580061, 0x00000000, 0x00000000 },
{ 0x00000040, 0x23584421, 0x00000358, 0x000000b6 },
{ 0x00000001, 0x235c0021, 0x00000204, 0x00000000 },
+ { 0x00000001, 0x23600021, 0x000000b8, 0x00000000 },
+ { 0x00000001, 0x23640021, 0x000000bc, 0x00000000 },
{ 0x00000020, 0x34001c00, 0x00001400, 0x00000022 },
{ 0x00000001, 0x23400061, 0x00000000, 0x71490009 },
{ 0x00000001, 0x23540061, 0x00000000, 0x000f000f },
{ 0x00000040, 0x21480c21, 0x00000148, 0x00000004 },
{ 0x00000040, 0x21e00c21, 0x000001e0, 0x00000001 },
{ 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff },
- { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9e },
+ { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9a },
{ 0x00010020, 0x34001c00, 0x02001400, 0x0000001e },
{ 0x00600001, 0x20000022, 0x008d0120, 0x00000000 },
{ 0x05800031, 0x22001cc9, 0x00000000, 0x021a0001 },
{ 0x00800001, 0x23400061, 0x00000000, 0x00000000 },
{ 0x01000005, 0x20002d28, 0x020000ac, 0x00020002 },
{ 0x01000005, 0x20000c20, 0x00000200, 0x00002000 },
- { 0x00110020, 0x34001c00, 0x00001400, 0x00000022 },
+ { 0x00110020, 0x34001c00, 0x00001400, 0x00000026 },
{ 0x00000001, 0x23400061, 0x00000000, 0x71490009 },
{ 0x00000041, 0x23480c21, 0x000001e0, 0x000000a0 },
{ 0x00000001, 0x23540061, 0x00000000, 0x000f000f },
{ 0x00110001, 0x23580061, 0x00000000, 0x00000000 },
{ 0x00000040, 0x23584421, 0x00000358, 0x000000b6 },
{ 0x00000001, 0x235c0021, 0x00000204, 0x00000000 },
+ { 0x00000001, 0x23600021, 0x000000b8, 0x00000000 },
+ { 0x00000001, 0x23640021, 0x000000bc, 0x00000000 },
{ 0x00000020, 0x34001c00, 0x00001400, 0x00000022 },
{ 0x00000001, 0x23400061, 0x00000000, 0x71490009 },
{ 0x00000001, 0x23540061, 0x00000000, 0x000f000f },
{ 0x00000040, 0x21480c21, 0x00000148, 0x00000004 },
{ 0x00000040, 0x21e00c21, 0x000001e0, 0x00000001 },
{ 0x01000040, 0x20ae3dad, 0x000000ae, 0xffffffff },
- { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9e },
+ { 0x00110020, 0x34001c00, 0x00001400, 0xffffff9a },
{ 0x00010020, 0x34001c00, 0x02001400, 0x0000001e },
{ 0x00600001, 0x28000021, 0x008d0120, 0x00000000 },
{ 0x0a800031, 0x22001ca9, 0x00000800, 0x02180001 },