OSDN Git Service

360ded4f5af6835296d6fc0f4a36a52d7e8e9e1b
[android-x86/hardware-intel-common-libva.git] / i965_drv_video / i965_post_processing.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  *    Xiang Haihao <haihao.xiang@intel.com>
26  *
27  */
28
29 #ifndef __I965_POST_PROCESSING_H__
30 #define __I965_POST_PROCESSING_H__
31
32 #define MAX_PP_SURFACES 32
33
34 #define I965_PP_FLAG_DEINTERLACING      1
35 #define I965_PP_FLAG_AVS                2
36
37 enum
38 {
39     PP_NULL = 0,
40     PP_NV12_LOAD_SAVE,
41     PP_NV12_SCALING,
42     PP_NV12_AVS,
43     PP_NV12_DNDI,
44 };
45
46 struct pp_load_save_context
47 {
48     int dest_w;
49     int dest_h;
50 };
51
52 struct pp_scaling_context
53 {
54     int dest_w;
55     int dest_h;
56 };
57
58 struct pp_avs_context
59 {
60     int dest_w;
61     int dest_h;
62     int src_w;
63     int src_h;
64 };
65
66 struct pp_dndi_context
67 {
68     int dest_w;
69     int dest_h;
70
71 };
72
73 struct i965_post_processing_context
74 {
75     int current_pp;
76
77     struct {
78         dri_bo *bo;
79     } curbe;
80
81     struct {
82         dri_bo *ss_bo;
83         dri_bo *s_bo;
84     } surfaces[MAX_PP_SURFACES];
85
86     struct {
87         dri_bo *bo;
88     } binding_table;
89
90     struct {
91         dri_bo *bo;
92     } idrt;
93
94     struct {
95         dri_bo *bo;
96     } vfe_state;
97
98     struct {
99         dri_bo *bo;
100         dri_bo *bo_8x8;
101         dri_bo *bo_8x8_uv;
102     } sampler_state_table;
103
104     struct {
105         unsigned int size;
106
107         unsigned int vfe_start;
108         unsigned int cs_start;
109
110         unsigned int num_vfe_entries;
111         unsigned int num_cs_entries;
112
113         unsigned int size_vfe_entry;
114         unsigned int size_cs_entry;
115     } urb;
116
117     struct {
118         dri_bo *bo;
119     } stmm;
120
121     union {
122         struct pp_load_save_context pp_load_save_context;
123         struct pp_scaling_context pp_scaling_context;
124         struct pp_avs_context pp_avs_context;
125         struct pp_dndi_context pp_dndi_context;
126     } private_context;
127
128     int (*pp_x_steps)(void *private_context);
129     int (*pp_y_steps)(void *private_context);
130     int (*pp_set_block_parameter)(void *private_context, int x, int y);
131 };
132
133 void
134 i965_post_processing(VADriverContextP ctx,
135                      VASurfaceID surface,
136                      short srcx,
137                      short srcy,
138                      unsigned short srcw,
139                      unsigned short srch,
140                      short destx,
141                      short desty,
142                      unsigned short destw,
143                      unsigned short desth,
144                      unsigned int pp_index);
145 void
146 i965_post_processing_once_init(VADriverContextP ctx);
147 Bool
148 i965_post_processing_terminate(VADriverContextP ctx);
149
150 #endif /* __I965_POST_PROCESSING_H__ */