OSDN Git Service

Add vdenc common commands for CNL
[android-x86/hardware-intel-common-vaapi.git] / src / gen6_vme.h
index 99cc6ef..bfb9a7c 100644 (file)
 #define INTER_VME_OUTPUT_IN_BYTES       160     /* the first 128 bytes for MVs and the last 32 bytes for other info */
 #define INTER_VME_OUTPUT_IN_DWS         (INTER_VME_OUTPUT_IN_BYTES / 4)
 
-#define MAX_INTERFACE_DESC_GEN6      MAX_GPE_KERNELS
-#define MAX_MEDIA_SURFACES_GEN6      34
+#define MAX_INTERFACE_DESC_GEN6         MAX_GPE_KERNELS
+#define MAX_MEDIA_SURFACES_GEN6         34
 
 #define GEN6_VME_KERNEL_NUMBER          3
 
+#define INTEL_COST_TABLE_OFFSET         8
+
 struct encode_state;
 struct intel_encoder_context;
 
-struct gen6_vme_context
-{
+struct gen6_vme_context {
     struct i965_gpe_context gpe_context;
 
     struct {
@@ -62,32 +63,174 @@ struct gen6_vme_context
 
 
     void (*vme_surface2_setup)(VADriverContextP ctx,
-                                struct i965_gpe_context *gpe_context,
-                                struct object_surface *obj_surface,
-                                unsigned long binding_table_offset,
-                                unsigned long surface_state_offset);
+                               struct i965_gpe_context *gpe_context,
+                               struct object_surface *obj_surface,
+                               unsigned long binding_table_offset,
+                               unsigned long surface_state_offset);
     void (*vme_media_rw_surface_setup)(VADriverContextP ctx,
-                                            struct i965_gpe_context *gpe_context,
-                                            struct object_surface *obj_surface,
-                                            unsigned long binding_table_offset,
-                                            unsigned long surface_state_offset);
+                                       struct i965_gpe_context *gpe_context,
+                                       struct object_surface *obj_surface,
+                                       unsigned long binding_table_offset,
+                                       unsigned long surface_state_offset,
+                                       int write_enabled);
     void (*vme_buffer_suface_setup)(VADriverContextP ctx,
                                     struct i965_gpe_context *gpe_context,
                                     struct i965_buffer_surface *buffer_surface,
                                     unsigned long binding_table_offset,
                                     unsigned long surface_state_offset);
     void (*vme_media_chroma_surface_setup)(VADriverContextP ctx,
-                                            struct i965_gpe_context *gpe_context,
-                                            struct object_surface *obj_surface,
-                                            unsigned long binding_table_offset,
-                                            unsigned long surface_state_offset);
+                                           struct i965_gpe_context *gpe_context,
+                                           struct object_surface *obj_surface,
+                                           unsigned long binding_table_offset,
+                                           unsigned long surface_state_offset,
+                                           int write_enabled);
     void *vme_state_message;
     unsigned int h264_level;
+    unsigned int hevc_level;
+    unsigned int video_coding_type;
+    unsigned int vme_kernel_sum;
+    unsigned int mpeg2_level;
+
+    struct object_surface *used_reference_objects[2];
+    void *used_references[2];
+    unsigned int ref_index_in_mb[2];
+
+    dri_bo *i_qp_cost_table;
+    dri_bo *p_qp_cost_table;
+    dri_bo *b_qp_cost_table;
+    int cost_table_size;
+
+    /* one buffer define qp per mb. one byte for every mb.
+     * If it needs to be accessed by GPU, it will be changed to dri_bo.
+     */
+    bool roi_enabled;
+    char *qp_per_mb;
+    int saved_width_mbs, saved_height_mbs;
 };
 
+#define MPEG2_PIC_WIDTH_HEIGHT  30
+#define MPEG2_MV_RANGE      29
+#define MPEG2_LEVEL_MASK    0x0f
+#define MPEG2_LEVEL_LOW     0x0a
+#define MPEG2_LEVEL_MAIN    0x08
+#define MPEG2_LEVEL_HIGH    0x04
+
+Bool gen6_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context);
 Bool gen75_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context);
 
 extern void intel_vme_update_mbmv_cost(VADriverContextP ctx,
                                        struct encode_state *encode_state,
                                        struct intel_encoder_context *encoder_context);
+
+void intel_vme_vp8_update_mbmv_cost(VADriverContextP ctx,
+                                    struct encode_state *encode_state,
+                                    struct intel_encoder_context *encoder_context);
+
+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
+
+#define     INTRA_PRED_AVAIL_FLAG_AE    0x60
+#define     INTRA_PRED_AVAIL_FLAG_B     0x10
+#define     INTRA_PRED_AVAIL_FLAG_C         0x8
+#define     INTRA_PRED_AVAIL_FLAG_D     0x4
+#define     INTRA_PRED_AVAIL_FLAG_BCD_MASK  0x1C
+
+extern void
+gen7_vme_walker_fill_vme_batchbuffer(VADriverContextP ctx,
+                                     struct encode_state *encode_state,
+                                     int mb_width, int mb_height,
+                                     int kernel,
+                                     int transform_8x8_mode_flag,
+                                     struct intel_encoder_context *encoder_context);
+
+extern void
+gen7_vme_scoreboard_init(VADriverContextP ctx, struct gen6_vme_context *vme_context);
+
+extern void
+intel_vme_mpeg2_state_setup(VADriverContextP ctx,
+                            struct encode_state *encode_state,
+                            struct intel_encoder_context *encoder_context);
+
+extern void
+gen7_vme_mpeg2_walker_fill_vme_batchbuffer(VADriverContextP ctx,
+                                           struct encode_state *encode_state,
+                                           int mb_width, int mb_height,
+                                           int kernel,
+                                           struct intel_encoder_context *encoder_context);
+
+void
+intel_avc_vme_reference_state(VADriverContextP ctx,
+                              struct encode_state *encode_state,
+                              struct intel_encoder_context *encoder_context,
+                              int list_index,
+                              int surface_index,
+                              void (* vme_source_surface_state)(
+                                  VADriverContextP ctx,
+                                  int index,
+                                  struct object_surface *obj_surface,
+                                  struct intel_encoder_context *encoder_context));
+
+/* HEVC */
+void
+intel_hevc_vme_reference_state(VADriverContextP ctx,
+                               struct encode_state *encode_state,
+                               struct intel_encoder_context *encoder_context,
+                               int list_index,
+                               int surface_index,
+                               void (* vme_source_surface_state)(
+                                   VADriverContextP ctx,
+                                   int index,
+                                   struct object_surface *obj_surface,
+                                   struct intel_encoder_context *encoder_context));
+
+void intel_vme_hevc_update_mbmv_cost(VADriverContextP ctx,
+                                     struct encode_state *encode_state,
+                                     struct intel_encoder_context *encoder_context);
+
+
+extern Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context);
+
+extern Bool gen9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *encoder_context);
+
+extern void
+intel_h264_initialize_mbmv_cost(VADriverContextP ctx,
+                                struct encode_state *encode_state,
+                                struct intel_encoder_context *encoder_context);
+
+extern void
+intel_h264_setup_cost_surface(VADriverContextP ctx,
+                              struct encode_state *encode_state,
+                              struct intel_encoder_context *encoder_context,
+                              unsigned long binding_table_offset,
+                              unsigned long surface_state_offset);
+
+extern void
+intel_h264_enc_roi_config(VADriverContextP ctx,
+                          struct encode_state *encode_state,
+                          struct intel_encoder_context *encoder_context);
+
 #endif /* _GEN6_VME_H_ */