#include "i965_decoder_utils.h"
#include "gen7_mfd.h"
+#include "intel_media.h"
#define B0_STEP_REV 2
#define IS_STEPPING_BPLUS(i965) ((i965->intel.revision) >= B0_STEP_REV)
}
}
-static void
-gen75_mfd_free_avc_surface(void **data)
-{
- struct gen7_avc_surface *gen7_avc_surface = *data;
-
- if (!gen7_avc_surface)
- return;
-
- dri_bo_unreference(gen7_avc_surface->dmv_top);
- gen7_avc_surface->dmv_top = NULL;
- dri_bo_unreference(gen7_avc_surface->dmv_bottom);
- gen7_avc_surface->dmv_bottom = NULL;
-
- free(gen7_avc_surface);
- *data = NULL;
-}
-
static void
gen75_mfd_init_avc_surface(VADriverContextP ctx,
VAPictureParameterBufferH264 *pic_param,
struct object_surface *obj_surface)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct gen7_avc_surface *gen7_avc_surface = obj_surface->private_data;
+ GenAvcSurface *gen7_avc_surface = obj_surface->private_data;
int width_in_mbs, height_in_mbs;
- obj_surface->free_private_data = gen75_mfd_free_avc_surface;
+ obj_surface->free_private_data = gen_free_avc_surface;
width_in_mbs = pic_param->picture_width_in_mbs_minus1 + 1;
height_in_mbs = pic_param->picture_height_in_mbs_minus1 + 1; /* frame height */
if (!gen7_avc_surface) {
- gen7_avc_surface = calloc(sizeof(struct gen7_avc_surface), 1);
+ gen7_avc_surface = calloc(sizeof(GenAvcSurface), 1);
assert((obj_surface->size & 0x3f) == 0);
obj_surface->private_data = gen7_avc_surface;
}
}
static void
+gen75_mfd_avc_picid_state(VADriverContextP ctx,
+ struct decode_state *decode_state,
+ struct gen7_mfd_context *gen7_mfd_context)
+{
+ struct i965_driver_data *i965 = i965_driver_data(ctx);
+ struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
+
+ BEGIN_BCS_BATCH(batch, 10);
+ OUT_BCS_BATCH(batch, MFD_AVC_PICID_STATE | (10 - 2));
+ OUT_BCS_BATCH(batch, 1); // disable Picture ID Remapping
+ OUT_BCS_BATCH(batch, 0);
+ OUT_BCS_BATCH(batch, 0);
+ OUT_BCS_BATCH(batch, 0);
+ OUT_BCS_BATCH(batch, 0);
+ OUT_BCS_BATCH(batch, 0);
+ OUT_BCS_BATCH(batch, 0);
+ OUT_BCS_BATCH(batch, 0);
+ OUT_BCS_BATCH(batch, 0);
+ ADVANCE_BCS_BATCH(batch);
+}
+
+static void
gen75_mfd_avc_directmode_state_bplus(VADriverContextP ctx,
VAPictureParameterBufferH264 *pic_param,
VASliceParameterBufferH264 *slice_param,
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
struct object_surface *obj_surface;
- struct gen7_avc_surface *gen7_avc_surface;
+ GenAvcSurface *gen7_avc_surface;
VAPictureH264 *va_pic;
int i, j;
struct i965_driver_data *i965 = i965_driver_data(ctx);
struct intel_batchbuffer *batch = gen7_mfd_context->base.batch;
struct object_surface *obj_surface;
- struct gen7_avc_surface *gen7_avc_surface;
+ GenAvcSurface *gen7_avc_surface;
VAPictureH264 *va_pic;
int i, j;
gen75_mfd_bsp_buf_base_addr_state(ctx, decode_state, MFX_FORMAT_AVC, gen7_mfd_context);
gen75_mfd_avc_qm_state(ctx, decode_state, gen7_mfd_context);
gen75_mfd_avc_img_state(ctx, decode_state, gen7_mfd_context);
+ gen75_mfd_avc_picid_state(ctx, decode_state, gen7_mfd_context);
for (j = 0; j < decode_state->num_slice_params; j++) {
assert(decode_state->slice_params && decode_state->slice_params[j]->buffer);
bo = dri_bo_alloc(i965->intel.bufmgr,
"VC-1 Bitplane",
- bitplane_width * bitplane_width,
+ bitplane_width * height_in_mbs,
0x1000);
assert(bo);
gen7_mfd_context->bitplane_read_buffer.bo = bo;
ADVANCE_BCS_BATCH(batch);
}
-
static void
gen75_mfd_vc1_directmode_state(VADriverContextP ctx,
struct decode_state *decode_state,
gen7_mfd_context->base.destroy = gen75_mfd_context_destroy;
gen7_mfd_context->base.run = gen75_mfd_decode_picture;
- gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER);
+ gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0);
for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) {
gen7_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID;