render_init()/render_terminate() callback functions for each platform
[platform/upstream/libva-intel-driver.git] / src / i965_drv_video.h
index 787755c..2de9928 100644 (file)
 #include "i965_mutext.h"
 #include "object_heap.h"
 #include "intel_driver.h"
+#include "i965_fourcc.h"
 
-#define I965_MAX_PROFILES                       11
+#define I965_MAX_PROFILES                       20
 #define I965_MAX_ENTRYPOINTS                    5
 #define I965_MAX_CONFIG_ATTRIBUTES              10
 #define I965_MAX_IMAGE_FORMATS                  10
 #define I965_MAX_SUBPIC_FORMATS                 6
 #define I965_MAX_SUBPIC_SUM                     4
+#define I965_MAX_SURFACE_ATTRIBUTES             16
 
 #define INTEL_STR_DRIVER_VENDOR                 "Intel"
 #define INTEL_STR_DRIVER_NAME                   "i965"
 #define I965_SURFACE_FLAG_TOP_FIELD_FIRST       0x00000001
 #define I965_SURFACE_FLAG_BOTTOME_FIELD_FIRST   0x00000002
 
+#define DEFAULT_BRIGHTNESS      0
+#define DEFAULT_CONTRAST        50
+#define DEFAULT_HUE             0
+#define DEFAULT_SATURATION      50
+
 struct i965_surface
 {
     struct object_base *base;
@@ -72,6 +79,7 @@ struct i965_kernel
     const uint32_t (*bin)[4];
     int size;
     dri_bo *bo;
+    unsigned int kernel_offset;
 };
 
 struct buffer_store
@@ -101,6 +109,7 @@ struct decode_state
     struct buffer_store *bit_plane;
     struct buffer_store *huffman_table;
     struct buffer_store **slice_datas;
+    struct buffer_store *probability_data;
     VASurfaceID current_render_target;
     int max_slice_params;
     int max_slice_datas;
@@ -132,7 +141,7 @@ struct encode_state
     int num_slice_params_ext;
     int last_packed_header_type;
 
-    struct buffer_store *misc_param[8];
+    struct buffer_store *misc_param[16];
 
     VASurfaceID current_render_target;
     struct object_surface *input_yuv_object;
@@ -173,7 +182,7 @@ struct object_context
 {
     struct object_base base;
     VAContextID context_id;
-    VAConfigID config_id;
+    struct object_config *obj_config;
     VASurfaceID *render_targets;               //input->encode, output->decode
     int num_render_targets;
     int picture_width;
@@ -198,13 +207,14 @@ struct object_surface
     struct object_base base;
     VASurfaceStatus status;
     VASubpictureID subpic[I965_MAX_SUBPIC_SUM];
+    struct object_subpic *obj_subpic[I965_MAX_SUBPIC_SUM];
     unsigned int subpic_render_idx;
 
-    int width;
-    int height;
+    int width;          /* the pitch of plane 0 in bytes in horizontal direction */
+    int height;         /* the pitch of plane 0 in bytes in vertical direction */
     int size;
-    int orig_width;
-    int orig_height;
+    int orig_width;     /* the width of plane 0 in pixels */
+    int orig_height;    /* the height of plane 0 in pixels */
     int flags;
     unsigned int fourcc;    
     dri_bo *bo;
@@ -219,6 +229,10 @@ struct object_surface
     int cb_cr_width;
     int cb_cr_height;
     int cb_cr_pitch;
+    /* user specified attributes see: VASurfaceAttribExternalBuffers/VA_SURFACE_ATTRIB_MEM_TYPE_VA */
+    uint32_t user_disable_tiling : 1;
+    uint32_t user_h_stride_set   : 1;
+    uint32_t user_v_stride_set   : 1;
 };
 
 struct object_buffer 
@@ -244,6 +258,7 @@ struct object_subpic
 {
     struct object_base base;
     VAImageID image;
+    struct object_image *obj_image;
     VARectangle src_rect;
     VARectangle dst_rect;
     unsigned int format;
@@ -255,11 +270,24 @@ struct object_subpic
     unsigned int flags;
 };
 
+#define I965_RING_NULL  0
+#define I965_RING_BSD   1
+#define I965_RING_BLT   2
+#define I965_RING_VEBOX 3
+
+struct i965_filter
+{
+    VAProcFilterType type;
+    int ring;
+};
+
 struct hw_codec_info
 {
     struct hw_context *(*dec_hw_context_init)(VADriverContextP, struct object_config *);
     struct hw_context *(*enc_hw_context_init)(VADriverContextP, struct object_config *);
     struct hw_context *(*proc_hw_context_init)(VADriverContextP, struct object_config *);
+    bool (*render_init)(VADriverContextP);
+
     int max_width;
     int max_height;
 
@@ -275,6 +303,13 @@ struct hw_codec_info
     unsigned int has_accelerated_getimage:1;
     unsigned int has_accelerated_putimage:1;
     unsigned int has_tiled_surface:1;
+    unsigned int has_di_motion_adptive:1;
+    unsigned int has_di_motion_compensated:1;
+    unsigned int has_vp8_decoding:1;
+    unsigned int has_vp8_encoding:1;
+
+    unsigned int num_filters;
+    struct i965_filter filters[VAProcFilterCount];
 };
 
 
@@ -289,11 +324,12 @@ struct i965_driver_data
     struct object_heap buffer_heap;
     struct object_heap image_heap;
     struct object_heap subpic_heap;
-    struct hw_codec_info *codec_info;
+    const struct hw_codec_info *codec_info;
 
     _I965Mutex render_mutex;
     _I965Mutex pp_mutex;
     struct intel_batchbuffer *batch;
+    struct intel_batchbuffer *pp_batch;
     struct i965_render_state render_state;
     void *pp_context;
     char va_vendor[256];
@@ -301,7 +337,10 @@ struct i965_driver_data
     VADisplayAttribute *display_attributes;
     unsigned int num_display_attributes;
     VADisplayAttribute *rotation_attrib;
-    
+    VADisplayAttribute *brightness_attrib;
+    VADisplayAttribute *contrast_attrib;
+    VADisplayAttribute *hue_attrib;
+    VADisplayAttribute *saturation_attrib;
     VAContextID current_context_id;
 
     /* VA/DRI (X11) specific data */
@@ -337,7 +376,7 @@ i965_driver_data(VADriverContextP ctx)
     return (struct i965_driver_data *)(ctx->pDriverData);
 }
 
-void 
+VAStatus
 i965_check_alloc_surface_bo(VADriverContextP ctx,
                             struct object_surface *obj_surface,
                             int tiled,
@@ -348,8 +387,8 @@ int
 va_enc_packed_type_to_idx(int packed_type);
 
 /* reserve 2 byte for internal using */
-#define CODED_H264      0
-#define CODED_MPEG2     1
+#define CODEC_H264      0
+#define CODEC_MPEG2     1
 
 #define H264_DELIMITER0 0x00
 #define H264_DELIMITER1 0x00
@@ -372,11 +411,18 @@ struct i965_coded_buffer_segment
 
 #define I965_CODEDBUFFER_HEADER_SIZE   ALIGN(sizeof(struct i965_coded_buffer_segment), 64)
 
-
 extern VAStatus i965_MapBuffer(VADriverContextP ctx,
                VABufferID buf_id,       /* in */
                void **pbuf);            /* out */
 
 extern VAStatus i965_UnmapBuffer(VADriverContextP ctx, VABufferID buf_id);
 
+extern VAStatus i965_DestroySurfaces(VADriverContextP ctx,
+                     VASurfaceID *surface_list,
+                     int num_surfaces);
+
+#define I965_SURFACE_MEM_NATIVE             0
+#define I965_SURFACE_MEM_GEM_FLINK          1
+#define I965_SURFACE_MEM_DRM_PRIME          2
+
 #endif /* _I965_DRV_VIDEO_H_ */