Update NEWS for 1.3.2 pre1
[platform/upstream/libva-intel-driver.git] / src / gen75_mfc.c
index 784a5e2..2bfb6c2 100644 (file)
 
 #define        MFC_SOFTWARE_HASWELL    0
 
+#define SURFACE_STATE_PADDED_SIZE               MAX(SURFACE_STATE_PADDED_SIZE_GEN6, SURFACE_STATE_PADDED_SIZE_GEN7)
+#define SURFACE_STATE_OFFSET(index)             (SURFACE_STATE_PADDED_SIZE * index)
+#define BINDING_TABLE_OFFSET(index)             (SURFACE_STATE_OFFSET(MAX_MEDIA_SURFACES_GEN6) + sizeof(unsigned int) * index)
+
 #define B0_STEP_REV            2
 #define IS_STEPPING_BPLUS(i965)        ((i965->intel.revision) >= B0_STEP_REV)
 
@@ -255,7 +259,7 @@ gen75_mfc_avc_img_state(VADriverContextP ctx, struct encode_state *encode_state,
     OUT_BCS_BATCH(batch, MFX_AVC_IMG_STATE | (16 - 2));
     /*DW1. MB setting of frame */
     OUT_BCS_BATCH(batch,
-                  ((width_in_mbs * height_in_mbs) & 0xFFFF));
+                  ((width_in_mbs * height_in_mbs - 1) & 0xFFFF));
     OUT_BCS_BATCH(batch, 
                   ((height_in_mbs - 1) << 16) | 
                   ((width_in_mbs - 1) << 0));
@@ -1302,7 +1306,6 @@ gen75_mfc_batchbuffer_surfaces_output(VADriverContextP ctx,
                                       struct intel_encoder_context *encoder_context)
 
 {
-    struct i965_driver_data *i965 = i965_driver_data(ctx);
     struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
     assert(mfc_context->aux_batchbuffer_surface.bo);
     mfc_context->buffer_suface_setup(ctx,
@@ -1435,7 +1438,6 @@ gen75_mfc_avc_batchbuffer_slice_command(VADriverContextP ctx,
     int slice_type = intel_avc_enc_slice_type_fixup(slice_param->slice_type);
     int number_mb_cmds = 128;
     int starting_offset = 0;
-    int i;
     int mb_x, mb_y;
     int last_mb, slice_end_x, slice_end_y;
     int remaining_mb = total_mbs;
@@ -1605,7 +1607,7 @@ gen75_mfc_avc_batchbuffer_pipeline(VADriverContextP ctx,
 {
     struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
     struct intel_batchbuffer *batch = encoder_context->base.batch;
-    int i, size, offset = 0;
+    int i;
     intel_batchbuffer_start_atomic(batch, 0x4000); 
     gen6_gpe_pipeline_setup(ctx, &mfc_context->gpe_context, batch);
 
@@ -1619,6 +1621,8 @@ gen75_mfc_avc_batchbuffer_pipeline(VADriverContextP ctx,
        OUT_BCS_BATCH(slice_batch, 0);
        OUT_BCS_BATCH(slice_batch, MI_BATCH_BUFFER_END);
        ADVANCE_BCS_BATCH(slice_batch);
+       mfc_context->aux_batchbuffer = NULL;
+       intel_batchbuffer_free(slice_batch);
     }
     intel_batchbuffer_end_atomic(batch);
     intel_batchbuffer_flush(batch);
@@ -1642,8 +1646,8 @@ gen75_mfc_avc_hardware_batchbuffer(VADriverContextP ctx,
 {
     struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
 
-    gen75_mfc_build_avc_batchbuffer(ctx, encode_state, encoder_context);
     dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo);
+    gen75_mfc_build_avc_batchbuffer(ctx, encode_state, encoder_context);
 
     return mfc_context->aux_batchbuffer_surface.bo;
 }
@@ -2295,7 +2299,6 @@ gen75_mfc_mpeg2_software_slice_batchbuffer(VADriverContextP ctx,
                                            struct intel_encoder_context *encoder_context)
 {
     struct gen6_mfc_context *mfc_context = encoder_context->mfc_context;
-    struct i965_driver_data *i965 = i965_driver_data(ctx);
     struct intel_batchbuffer *batch;
     VAEncSliceParameterBufferMPEG2 *next_slice_group_param = NULL;
     dri_bo *batch_bo;
@@ -2390,7 +2393,7 @@ intel_mfc_mpeg2_prepare(VADriverContextP ctx,
 
     /* reconstructed surface */
     obj_surface = encode_state->reconstructed_object;
-    i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC('N','V','1','2'), SUBSAMPLE_YUV420);
+    i965_check_alloc_surface_bo(ctx, obj_surface, 1, VA_FOURCC_NV12, SUBSAMPLE_YUV420);
     mfc_context->pre_deblocking_output.bo = obj_surface->bo;
     dri_bo_reference(mfc_context->pre_deblocking_output.bo);
     mfc_context->surface_state.width = obj_surface->orig_width;
@@ -2528,7 +2531,7 @@ static VAStatus gen75_mfc_pipeline(VADriverContextP ctx,
     VAStatus vaStatus;
 
     switch (profile) {
-    case VAProfileH264Baseline:
+    case VAProfileH264ConstrainedBaseline:
     case VAProfileH264Main:
     case VAProfileH264High:
         vaStatus = gen75_mfc_avc_encode_picture(ctx, encode_state, encoder_context);