Mercurial > mplayer.hg
annotate vidix/vidix.h @ 23039:d5e23946d776
added a new value for alpha colorkey (will be needed by further ati vidix driver upgrade)
author | ben |
---|---|
date | Sat, 21 Apr 2007 12:03:41 +0000 |
parents | d74001dbe2a6 |
children | 82216ef041e0 |
rev | line source |
---|---|
3991 | 1 /* |
2 * vidix.h | |
3 * VIDIX - VIDeo Interface for *niX | |
4 * This interface is introduced as universal one to MPEG decoder, | |
5 * BES == Back End Scaler and YUV2RGB hw accelerators. | |
6 * In the future it may be expanded up to capturing and audio things. | |
7 * Main goal of this this interface imlpementation is providing DGA | |
8 * everywhere where it's possible (unlike X11 and other). | |
22902 | 9 * Copyright 2002 Nick Kurshev, 2007 Benjamin Zores |
3991 | 10 * Licence: GPL |
11 * This interface is based on v4l2, fbvid.h, mga_vid.h projects | |
12 * and personally my ideas. | |
13 * NOTE: This interface is introduces as driver interface. | |
14 * Don't use it for APP. | |
15 */ | |
16 #ifndef VIDIX_H | |
17 #define VIDIX_H | |
18 | |
19 #ifdef __cplusplus | |
20 extern "C" { | |
21 #endif | |
22 | |
23 #define VIDIX_VERSION 100 | |
24 | |
22860
efe51e2b81c3
removed references to no longer used internal drivers functions
ben
parents:
22859
diff
changeset
|
25 #define PROBE_NORMAL 0 /* normal probing */ |
efe51e2b81c3
removed references to no longer used internal drivers functions
ben
parents:
22859
diff
changeset
|
26 #define PROBE_FORCE 1 /* ignore device_id but recognize device if it's known */ |
efe51e2b81c3
removed references to no longer used internal drivers functions
ben
parents:
22859
diff
changeset
|
27 |
22859 | 28 typedef enum vidix_dev_type { |
29 TYPE_OUTPUT = 0x00000000, /* Is a video playback device */ | |
30 TYPE_CAPTURE = 0x00000001, /* Is a capture device */ | |
31 TYPE_CODEC = 0x00000002, /* Device supports hw (de)coding */ | |
32 TYPE_FX = 0x00000004, /* Is a video effects device */ | |
33 } vidix_dev_type_t; | |
34 | |
35 typedef enum vidix_dev_flag { | |
36 FLAG_NONE = 0x00000000, /* No flags defined */ | |
37 FLAG_DMA = 0x00000001, /* Card can use DMA */ | |
38 /* Card can use DMA only if src pitch == dest pitch */ | |
39 FLAG_EQ_DMA = 0x00000002, | |
40 /* Possible to wait for DMA to finish. See BM_DMA_SYNC and BM_DMA_BLOCK */ | |
41 FLAG_SYNC_DMA = 0x00000004, | |
42 FLAG_UPSCALER = 0x00000010, /* Card supports hw upscaling */ | |
43 FLAG_DOWNSCALER = 0x00000020, /* Card supports hw downscaling */ | |
44 FLAG_SUBPIC = 0x00001000, /* Card supports DVD subpictures */ | |
45 FLAG_EQUALIZER = 0x00002000, /* Card supports equalizer */ | |
46 } vidix_dev_flag_t; | |
47 | |
3991 | 48 typedef struct vidix_capability_s |
49 { | |
22859 | 50 char name[64]; /* Driver name */ |
51 char author[64]; /* Author name */ | |
52 vidix_dev_type_t type; | |
53 unsigned reserved0[4]; | |
54 int maxwidth; | |
55 int maxheight; | |
56 int minwidth; | |
57 int minheight; | |
58 int maxframerate; /* -1 if unlimited */ | |
59 vidix_dev_flag_t flags; | |
60 unsigned short vendor_id; | |
61 unsigned short device_id; | |
62 unsigned reserved1[4]; | |
63 } vidix_capability_t; | |
64 | |
65 typedef enum vidix_depth { | |
66 VID_DEPTH_NONE = 0x0000, | |
67 VID_DEPTH_1BPP = 0x0001, | |
68 VID_DEPTH_2BPP = 0x0002, | |
69 VID_DEPTH_4BPP = 0x0004, | |
70 VID_DEPTH_8BPP = 0x0008, | |
71 VID_DEPTH_12BPP = 0x0010, | |
72 VID_DEPTH_15BPP = 0x0020, | |
73 VID_DEPTH_16BPP = 0x0040, | |
74 VID_DEPTH_24BPP = 0x0080, | |
75 VID_DEPTH_32BPP = 0x0100, | |
76 VID_DEPTH_ALL = VID_DEPTH_1BPP | VID_DEPTH_2BPP | \ | |
77 VID_DEPTH_4BPP | VID_DEPTH_8BPP | \ | |
78 VID_DEPTH_12BPP | VID_DEPTH_15BPP | \ | |
79 VID_DEPTH_16BPP | VID_DEPTH_24BPP | \ | |
80 VID_DEPTH_32BPP, | |
81 } vidix_depth_t; | |
82 | |
83 typedef enum vidix_cap { | |
84 VID_CAP_NONE = 0x0000, | |
85 /* if overlay can be bigger than source */ | |
86 VID_CAP_EXPAND = 0x0001, | |
87 /* if overlay can be smaller than source */ | |
88 VID_CAP_SHRINK = 0x0002, | |
89 /* if overlay can be blended with framebuffer */ | |
90 VID_CAP_BLEND = 0x0004, | |
91 /* if overlay can be restricted to a colorkey */ | |
92 VID_CAP_COLORKEY = 0x0008, | |
93 /* if overlay can be restricted to an alpha channel */ | |
94 VID_CAP_ALPHAKEY = 0x0010, | |
95 /* if the colorkey can be a range */ | |
96 VID_CAP_COLORKEY_ISRANGE = 0x0020, | |
97 /* if the alphakey can be a range */ | |
98 VID_CAP_ALPHAKEY_ISRANGE = 0x0040, | |
99 /* colorkey is checked against framebuffer */ | |
100 VID_CAP_COLORKEY_ISMAIN = 0x0080, | |
101 /* colorkey is checked against overlay */ | |
102 VID_CAP_COLORKEY_ISOVERLAY = 0x0100, | |
103 /* alphakey is checked against framebuffer */ | |
104 VID_CAP_ALPHAKEY_ISMAIN = 0x0200, | |
105 /* alphakey is checked against overlay */ | |
106 VID_CAP_ALPHAKEY_ISOVERLAY = 0x0400, | |
107 } vidix_cap_t; | |
3991 | 108 |
109 typedef struct vidix_fourcc_s | |
110 { | |
22859 | 111 unsigned fourcc; /* input: requested fourcc */ |
112 vidix_depth_t depth; /* output: screen depth for given fourcc */ | |
113 vidix_cap_t flags; /* output: capability */ | |
114 } vidix_fourcc_t; | |
3991 | 115 |
116 typedef struct vidix_yuv_s | |
117 { | |
22859 | 118 unsigned y,u,v; |
119 } vidix_yuv_t; | |
3991 | 120 |
121 typedef struct vidix_rect_s | |
122 { | |
22859 | 123 unsigned x,y,w,h; /* in pixels */ |
124 vidix_yuv_t pitch; /* line-align in bytes */ | |
125 } vidix_rect_t; | |
126 | |
127 typedef enum vidix_color_key_op { | |
128 CKEY_FALSE = 0, | |
129 CKEY_TRUE = 1, | |
130 CKEY_EQ = 2, | |
131 CKEY_NEQ = 3, | |
23039
d5e23946d776
added a new value for alpha colorkey (will be needed by further ati vidix driver upgrade)
ben
parents:
22902
diff
changeset
|
132 CKEY_ALPHA = 4, |
22859 | 133 } vidix_color_key_op_t; |
3991 | 134 |
135 typedef struct vidix_color_key_s | |
136 { | |
22859 | 137 vidix_color_key_op_t op; /* defines logical operation */ |
138 unsigned char red; | |
139 unsigned char green; | |
140 unsigned char blue; | |
141 unsigned char reserved; | |
3991 | 142 }vidix_ckey_t; |
143 | |
22859 | 144 typedef enum vidix_video_key_op { |
145 VKEY_FALSE = 0, | |
146 VKEY_TRUE = 1, | |
147 VKEY_EQ = 2, | |
148 VKEY_NEQ = 3, | |
149 } vidix_video_key_op_t; | |
150 | |
151 typedef struct vidix_video_key_s { | |
152 vidix_video_key_op_t op; /* defines logical operation */ | |
153 unsigned char key[8]; | |
154 } vidix_vkey_t; | |
155 | |
156 typedef enum vidix_interleave { | |
157 VID_PLAY_INTERLEAVED_UV = 0x00000001, | |
158 /* UVUVUVUVUV used by Matrox G200 */ | |
159 INTERLEAVING_UV = 0x00001000, | |
160 /* VUVUVUVUVU */ | |
161 INTERLEAVING_VU = 0x00001001, | |
162 } vidix_interleave_t; | |
163 | |
164 #define VID_PLAY_MAXFRAMES 64 /* unreal limitation */ | |
3991 | 165 |
166 typedef struct vidix_playback_s | |
167 { | |
22859 | 168 unsigned fourcc; /* app -> driver: movies's fourcc */ |
169 unsigned capability; /* app -> driver: what capability to use */ | |
170 unsigned blend_factor; /* app -> driver: blending factor */ | |
171 vidix_rect_t src; /* app -> driver: original movie size */ | |
172 vidix_rect_t dest; /* app -> driver: destinition movie size. | |
173 driver->app dest_pitch */ | |
174 vidix_interleave_t flags; /* driver -> app: interleaved UV planes */ | |
175 /* memory model */ | |
176 unsigned frame_size; /* driver -> app: destinition frame size */ | |
177 unsigned num_frames; /* app -> driver: after call: driver -> app */ | |
178 unsigned offsets[VID_PLAY_MAXFRAMES]; /* driver -> app */ | |
179 vidix_yuv_t offset; /* driver -> app: relative offsets | |
180 within frame for yuv planes */ | |
181 void *dga_addr; /* driver -> app: linear address */ | |
182 } vidix_playback_t; | |
3991 | 183 |
22859 | 184 typedef enum vidix_key_op { |
185 KEYS_PUT = 0, | |
186 KEYS_AND = 1, | |
187 KEYS_OR = 2, | |
188 KEYS_XOR = 3, | |
189 } vidix_key_op_t; | |
3991 | 190 |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
191 typedef struct vidix_grkey_s |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
192 { |
22859 | 193 vidix_ckey_t ckey; /* app -> driver: color key */ |
194 vidix_vkey_t vkey; /* app -> driver: video key */ | |
195 vidix_key_op_t key_op; /* app -> driver: keys operations */ | |
196 } vidix_grkey_t; | |
197 | |
198 typedef enum vidix_veq_cap { | |
199 VEQ_CAP_NONE = 0x00000000UL, | |
200 VEQ_CAP_BRIGHTNESS = 0x00000001UL, | |
201 VEQ_CAP_CONTRAST = 0x00000002UL, | |
202 VEQ_CAP_SATURATION = 0x00000004UL, | |
203 VEQ_CAP_HUE = 0x00000008UL, | |
204 VEQ_CAP_RGB_INTENSITY = 0x00000010UL, | |
205 } vidix_veq_cap_t; | |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
206 |
22859 | 207 typedef enum vidix_veq_flag { |
208 VEQ_FLG_ITU_R_BT_601 = 0x00000000, /* ITU-R BT.601 colour space (default) */ | |
209 VEQ_FLG_ITU_R_BT_709 = 0x00000001, /* ITU-R BT.709 colour space */ | |
210 VEQ_FLG_ITU_MASK = 0x0000000f, | |
211 } vidix_veq_flag_t; | |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
212 |
22859 | 213 typedef struct vidix_video_eq_s { |
214 vidix_veq_cap_t cap; /* on get_eq should contain capability of | |
215 equalizer on set_eq should contain using fields */ | |
216 /* end-user app can have presets like: cold-normal-hot picture and so on */ | |
217 int brightness; /* -1000 : +1000 */ | |
218 int contrast; /* -1000 : +1000 */ | |
219 int saturation; /* -1000 : +1000 */ | |
220 int hue; /* -1000 : +1000 */ | |
221 int red_intensity; /* -1000 : +1000 */ | |
222 int green_intensity; /* -1000 : +1000 */ | |
223 int blue_intensity; /* -1000 : +1000 */ | |
224 vidix_veq_flag_t flags; /* currently specifies ITU YCrCb color | |
225 space to use */ | |
226 } vidix_video_eq_t; | |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
227 |
22859 | 228 typedef enum vidix_interlace_flag { |
229 /* stream is not interlaced */ | |
230 CFG_NON_INTERLACED = 0x00000000, | |
231 /* stream is interlaced */ | |
232 CFG_INTERLACED = 0x00000001, | |
233 /* first frame contains even fields but second - odd */ | |
234 CFG_EVEN_ODD_INTERLACING = 0x00000002, | |
235 /* first frame contains odd fields but second - even */ | |
236 CFG_ODD_EVEN_INTERLACING = 0x00000004, | |
237 /* field deinterlace_pattern is valid */ | |
238 CFG_UNIQUE_INTERLACING = 0x00000008, | |
239 /* unknown deinterlacing - use adaptive if it's possible */ | |
240 CFG_UNKNOWN_INTERLACING = 0x0000000f, | |
241 } vidix_interlace_flag_t; | |
3991 | 242 |
22859 | 243 typedef struct vidix_deinterlace_s { |
244 vidix_interlace_flag_t flags; | |
245 unsigned deinterlace_pattern; /* app -> driver: deinterlace pattern if | |
246 flag CFG_UNIQUE_INTERLACING is set */ | |
247 } vidix_deinterlace_t; | |
248 | |
249 typedef struct vidix_slice_s { | |
250 void *address; /* app -> driver */ | |
251 unsigned size; /* app -> driver */ | |
252 vidix_rect_t slice; /* app -> driver */ | |
253 } vidix_slice_t; | |
4191 | 254 |
22859 | 255 typedef enum vidix_bm_flag { |
256 LVO_DMA_NOSYNC = 0, | |
257 /* waits for vsync or hsync */ | |
258 LVO_DMA_SYNC = 1, | |
259 } vidix_dma_flag_t; | |
3991 | 260 |
261 typedef struct vidix_dma_s | |
262 { | |
22859 | 263 vidix_slice_t src; /* app -> driver */ |
264 vidix_slice_t dest; /* app -> driver */ | |
265 vidix_dma_flag_t flags; /* app -> driver */ | |
266 } vidix_dma_t; | |
267 | |
268 typedef enum vidix_fx_type { | |
269 FX_TYPE_BOOLEAN = 0x00000000, | |
270 FX_TYPE_INTEGER = 0x00000001, | |
271 } vidix_fx_type_t; | |
3991 | 272 |
4191 | 273 /* |
274 This structure is introdused to support OEM effects like: | |
275 - sharpness | |
276 - exposure | |
277 - (auto)gain | |
278 - H(V)flip | |
279 - black level | |
280 - white balance | |
281 and many other | |
282 */ | |
283 typedef struct vidix_oem_fx_s | |
284 { | |
22859 | 285 vidix_fx_type_t type; /* type of effects */ |
286 int num; /* app -> driver: effect number. | |
287 From 0 to max number of effects */ | |
288 int minvalue; /* min value of effect. 0 - for boolean */ | |
289 int maxvalue; /* max value of effect. 1 - for boolean */ | |
290 int value; /* current value of effect on get; required on set */ | |
291 char *name[80]; /* effect name to display */ | |
292 } vidix_oem_fx_t; | |
4191 | 293 |
3991 | 294 #ifdef __cplusplus |
295 } | |
296 #endif | |
297 | |
298 #endif |