Use the right parameters to initialize bit rate context
[platform/upstream/libva-intel-driver.git] / src / gen75_vpp_vebox.h
1 /*
2  * Copyright © 2010 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  *
24  * Authors:
25  *    Li Xiaowei <xiaowei.a.li@intel.com>
26  *
27  */
28
29 #ifndef _GEN75_VPP_VEBOX_H
30 #define _GEN75_VPP_VEBOX_H
31
32 #include <xf86drm.h>
33 #include <drm.h>
34 #include <i915_drm.h>
35 #include <intel_bufmgr.h>
36 #include <va/va_vpp.h>
37 #include "i965_drv_video.h"
38
39 #include "i965_post_processing.h"
40
41 #define INPUT_SURFACE  0
42 #define OUTPUT_SURFACE 1
43
44 #define VPP_DNDI_DN        0x00000001
45 #define VPP_DNDI_DI        0x00000002
46 #define VPP_IECP_STD_STE   0x00000100
47 #define VPP_IECP_ACE       0x00000200
48 #define VPP_IECP_TCC       0x00000400
49 #define VPP_IECP_PRO_AMP   0x00000800
50 #define VPP_IECP_CSC       0x00001000
51 #define VPP_IECP_AOI       0x00002000
52 #define MAX_FILTER_SUM     8
53
54 #define PRE_FORMAT_CONVERT      0x01
55 #define POST_FORMAT_CONVERT     0x02
56 #define POST_SCALING_CONVERT    0x04
57 #define POST_COPY_CONVERT       0x08
58
59 enum {
60     FRAME_IN_CURRENT = 0,
61     FRAME_IN_PREVIOUS,
62     FRAME_IN_STMM,
63     FRAME_OUT_STMM,
64     FRAME_OUT_CURRENT_DN,
65     FRAME_OUT_CURRENT,
66     FRAME_OUT_PREVIOUS,
67     FRAME_OUT_STATISTIC,
68     FRAME_STORE_SUM,
69 };
70
71 enum SURFACE_FORMAT{
72     YCRCB_NORMAL = 0,
73     YCRCB_SWAPUVY,
74     YCRCB_SWAPUV,
75     YCRCB_SWAPY,
76     PLANAR_420_8,  //NV12
77     PACKED_444A_8,
78     PACKED_422_16,
79     R10G10B10A2_UNORM_SRGB,
80     R8G8B8A8_UNORM_SRGB,
81     PACKED_444_16,
82     PLANAR_422_16,
83     Y8_UNORM,
84     PLANAR_420_16,
85     R16G16B16A16,
86     SURFACE_FORMAT_SUM
87 };
88
89 typedef struct veb_frame_store {
90     VASurfaceID surface_id;
91     unsigned int is_internal_surface;
92     struct object_surface *obj_surface;
93 } VEBFrameStore;
94
95 typedef struct veb_buffer {
96     dri_bo  *bo;
97     void *  ptr;
98     unsigned char  valid;
99 } VEBBuffer;
100
101 struct intel_vebox_context
102 {
103     struct intel_batchbuffer *batch;
104
105     struct object_surface *surface_input_object;
106     struct object_surface *surface_output_object;
107     VASurfaceID surface_input_vebox;
108     struct object_surface *surface_input_vebox_object;    
109     VASurfaceID surface_output_vebox;
110     struct object_surface *surface_output_vebox_object;
111     VASurfaceID surface_output_scaled;
112     struct object_surface *surface_output_scaled_object;
113
114     unsigned int fourcc_input;
115     unsigned int fourcc_output;
116
117     int width_input;
118     int height_input;
119     int width_output;
120     int height_output;
121
122     VEBFrameStore frame_store[FRAME_STORE_SUM];
123
124     VEBBuffer dndi_state_table;
125     VEBBuffer iecp_state_table;
126     VEBBuffer gamut_state_table;
127     VEBBuffer vertex_state_table;
128
129     unsigned int  filters_mask;
130     int frame_order;
131     int current_output;
132
133     VAProcPipelineParameterBuffer * pipeline_param;
134     void * filter_dn;
135     void * filter_di;
136     void * filter_iecp_std;
137     void * filter_iecp_ace;
138     void * filter_iecp_tcc;
139     void * filter_iecp_amp;
140
141     unsigned int  filter_iecp_amp_num_elements;
142     unsigned char format_convert_flags;
143 };
144
145 VAStatus gen75_vebox_process_picture(VADriverContextP ctx,
146                          struct intel_vebox_context *proc_ctx);
147
148 void gen75_vebox_context_destroy(VADriverContextP ctx, 
149                           struct intel_vebox_context *proc_ctx);
150
151 struct intel_vebox_context * gen75_vebox_context_init(VADriverContextP ctx);
152
153 VAStatus gen8_vebox_process_picture(VADriverContextP ctx,
154                          struct intel_vebox_context *proc_ctx);
155
156 #endif