Mercurial > mplayer.hg
annotate vidix/vidix.h @ 4215:14b8bc735bf5
Use 'install' instead of 'cp'
author | nick |
---|---|
date | Thu, 17 Jan 2002 09:01:50 +0000 |
parents | 62a6135d090e |
children | 03879e356f6d |
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). | |
9 * Copyright 2002 Nick Kurshev | |
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 | |
25 /* returns driver version */ | |
26 extern unsigned vixGetVersion( void ); | |
27 | |
4191 | 28 #define PROBE_NORMAL 0 /* normal probing */ |
29 #define PROBE_FORCE 1 /* ignore device_id but recognize device if it's known */ | |
30 /* Probes video hw. | |
31 verbose - specifies verbose level. | |
32 force - specifies force mode - driver should ignore | |
33 device_id (danger but useful for new devices) | |
34 Returns 0 if ok else errno */ | |
35 extern int vixProbe( int verbose, int force ); | |
3991 | 36 /* Initializes driver. Returns 0 if ok else errno */ |
37 extern int vixInit( void ); | |
38 /* Destroys driver */ | |
39 extern void vixDestroy( void ); | |
40 | |
41 typedef struct vidix_capability_s | |
42 { | |
43 char name[32]; /* Driver name */ | |
4191 | 44 #define TYPE_OUTPUT 0x00000000 /* Is a video playback device */ |
45 #define TYPE_CAPTURE 0x00000001 /* Is a capture device */ | |
46 #define TYPE_CODEC 0x00000002 /* Device supports hw (de)coding */ | |
3991 | 47 #define TYPE_FX 0x00000004 /* Is a video effects device */ |
48 int type; /* Device type, see below */ | |
4191 | 49 unsigned reserved0[4]; |
3991 | 50 int maxwidth; |
51 int maxheight; | |
52 int minwidth; | |
53 int minheight; | |
54 int maxframerate; /* -1 if unlimited */ | |
55 #define FLAG_NONE 0x00000000 /* No flags defined */ | |
56 #define FLAG_DMA 0x00000001 /* Card can use DMA */ | |
4191 | 57 #define FLAG_EQ_DMA 0x00000002 /* Card can use DMA only if src pitch == dest pitch */ |
3991 | 58 #define FLAG_UPSCALER 0x00000010 /* Card supports hw upscaling */ |
59 #define FLAG_DOWNSCALER 0x00000020 /* Card supports hw downscaling */ | |
60 #define FLAG_SUBPIC 0x00001000 /* Card supports DVD subpictures */ | |
4191 | 61 unsigned flags; /* Feature flags, see above */ |
3991 | 62 unsigned short vendor_id; |
63 unsigned short device_id; | |
64 unsigned reserved[4]; | |
65 }vidix_capability_t; | |
66 | |
67 /* Should fill at least type before init. | |
68 Returns 0 if ok else errno */ | |
69 extern int vixGetCapability(vidix_capability_t *); | |
70 | |
71 typedef struct vidix_fourcc_s | |
72 { | |
73 unsigned fourcc; | |
74 #define VID_DEPTH_NONE 0x0000 | |
75 #define VID_DEPTH_1BPP 0x0001 | |
76 #define VID_DEPTH_2BPP 0x0002 | |
77 #define VID_DEPTH_4BPP 0x0004 | |
78 #define VID_DEPTH_8BPP 0x0008 | |
79 #define VID_DEPTH_12BPP 0x0010 | |
80 #define VID_DEPTH_15BPP 0x0020 | |
81 #define VID_DEPTH_16BPP 0x0040 | |
82 #define VID_DEPTH_24BPP 0x0080 | |
83 #define VID_DEPTH_32BPP 0x0100 | |
84 unsigned depth; | |
85 #define VID_CAP_NONE 0x0000 | |
86 #define VID_CAP_EXPAND 0x0001 /* if overlay can be bigger than source */ | |
87 #define VID_CAP_SHRINK 0x0002 /* if overlay can be smaller than source */ | |
88 #define VID_CAP_BLEND 0x0004 /* if overlay can be blended with framebuffer */ | |
89 #define VID_CAP_COLORKEY 0x0008 /* if overlay can be restricted to a colorkey */ | |
90 #define VID_CAP_ALPHAKEY 0x0010 /* if overlay can be restricted to an alpha channel */ | |
91 #define VID_CAP_COLORKEY_ISRANGE 0x0020 /* if the colorkey can be a range */ | |
92 #define VID_CAP_ALPHAKEY_ISRANGE 0x0040 /* if the alphakey can be a range */ | |
93 #define VID_CAP_COLORKEY_ISMAIN 0x0080 /* colorkey is checked against framebuffer */ | |
94 #define VID_CAP_COLORKEY_ISOVERLAY 0x0100 /* colorkey is checked against overlay */ | |
95 #define VID_CAP_ALPHAKEY_ISMAIN 0x0200 /* alphakey is checked against framebuffer */ | |
96 #define VID_CAP_ALPHAKEY_ISOVERLAY 0x0400 /* alphakey is checked against overlay */ | |
97 unsigned flags; | |
98 }vidix_fourcc_t; | |
99 | |
100 /* Returns 0 if ok else errno */ | |
101 extern int vixQueryFourcc(vidix_fourcc_t *); | |
102 | |
103 typedef struct vidix_yuv_s | |
104 { | |
105 unsigned y,u,v; | |
106 }vidix_yuv_t; | |
107 | |
108 typedef struct vidix_rect_s | |
109 { | |
110 unsigned x,y,w,h; /* in pixels */ | |
4008 | 111 vidix_yuv_t pitch; /* line-align in bytes */ |
3991 | 112 }vidix_rect_t; |
113 | |
114 typedef struct vidix_color_key_s | |
115 { | |
116 #define CKEY_FALSE 0 | |
117 #define CKEY_TRUE 1 | |
118 #define CKEY_EQ 2 | |
119 #define CKEY_NEQ 3 | |
120 unsigned op; /* defines logical operation */ | |
121 unsigned char red; | |
122 unsigned char green; | |
123 unsigned char blue; | |
124 unsigned char reserved; | |
125 }vidix_ckey_t; | |
126 | |
127 typedef struct vidix_video_key_s | |
128 { | |
129 #define VKEY_FALSE 0 | |
130 #define VKEY_TRUE 1 | |
131 #define VKEY_EQ 2 | |
132 #define VKEY_NEQ 3 | |
133 unsigned op; /* defines logical operation */ | |
134 unsigned char key[8]; | |
135 }vidix_vkey_t; | |
136 | |
137 typedef struct vidix_playback_s | |
138 { | |
139 unsigned fourcc; /* app -> driver: movies's fourcc */ | |
140 unsigned capability; /* app -> driver: what capability to use */ | |
141 unsigned blend_factor; /* app -> driver: blenfing factor */ | |
142 vidix_rect_t src; /* app -> driver: original movie size */ | |
143 vidix_rect_t dest; /* app -> driver: destinition movie size. driver->app dest_pitch */ | |
3995 | 144 /* memory model */ |
4008 | 145 unsigned frame_size; /* driver -> app; destinition frame size */ |
4191 | 146 unsigned num_frames; /* app -> driver: after call: driver -> app */ |
3991 | 147 #define LVO_MAXFRAMES 32 |
148 unsigned offsets[LVO_MAXFRAMES]; /* driver -> app */ | |
149 vidix_yuv_t offset; /* driver -> app: relative offsets within frame for yuv planes */ | |
150 void* dga_addr; /* driver -> app: linear address */ | |
3995 | 151 }vidix_playback_t; |
3991 | 152 |
153 /* Returns 0 if ok else errno */ | |
3995 | 154 extern int vixConfigPlayback(vidix_playback_t *); |
3991 | 155 |
156 /* Returns 0 if ok else errno */ | |
157 extern int vixPlaybackOn( void ); | |
158 | |
159 /* Returns 0 if ok else errno */ | |
160 extern int vixPlaybackOff( void ); | |
161 | |
162 /* Returns 0 if ok else errno */ | |
163 extern int vixPlaybackFrameSelect( unsigned frame_idx ); | |
164 | |
4070
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
165 typedef struct vidix_grkey_s |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
166 { |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
167 vidix_ckey_t ckey; /* app -> driver: color key */ |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
168 vidix_vkey_t vkey; /* app -> driver: video key */ |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
169 #define KEYS_PUT 0 |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
170 #define KEYS_AND 1 |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
171 #define KEYS_OR 2 |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
172 #define KEYS_XOR 3 |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
173 unsigned key_op; /* app -> driver: keys operations */ |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
174 }vidix_grkey_t; |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
175 |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
176 /* Returns 0 if ok else errno */ |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
177 extern int vixGetGrKeys( vidix_grkey_t * ); |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
178 |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
179 /* Returns 0 if ok else errno */ |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
180 extern int vixSetGrKeys( const vidix_grkey_t * ); |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
181 |
b61ba6c256dd
Minor interface changes: color and video keys are moved out from playback configuring
nick
parents:
4008
diff
changeset
|
182 |
3991 | 183 typedef struct vidix_video_eq_s |
184 { | |
185 /* end-user app can have presets like: cold-normal-hot picture and so on */ | |
186 int brightness; /* -1000 : +1000 */ | |
187 int contrast; /* -1000 : +1000 */ | |
188 int saturation; /* -1000 : +1000 */ | |
189 int hue; /* -1000 : +1000 */ | |
190 int red_intense; /* -1000 : +1000 */ | |
191 int green_intense; /* -1000 : +1000 */ | |
192 int blue_intense; /* -1000 : +1000 */ | |
4191 | 193 #define VEQ_FLG_ITU_R_BT_601 0x00000000 /* ITU-R BT.601 colour space (default) */ |
194 #define VEQ_FLG_ITU_R_BT_709 0x00000001 /* ITU-R BT.709 colour space */ | |
195 #define VEQ_FLG_ITU_MASK 0x0000000f | |
196 int flags; /* currently specifies ITU YCrCb color space to use */ | |
3991 | 197 }vidix_video_eq_t; |
198 | |
199 /* Returns 0 if ok else errno */ | |
200 extern int vixPlaybackGetEq( vidix_video_eq_t * ); | |
201 | |
202 /* Returns 0 if ok else errno */ | |
203 extern int vixPlaybackSetEq( const vidix_video_eq_t * ); | |
204 | |
4191 | 205 typedef struct vidix_deinterlace_s |
206 { | |
207 #define CFG_NON_INTERLACED 0x00000000 /* stream is not interlaced */ | |
208 #define CFG_INTERLACED 0x00000001 /* stream is interlaced */ | |
209 #define CFG_EVEN_ODD_INTERLACING 0x00000002 /* first frame contains even fields but second - odd */ | |
210 #define CFG_ODD_EVEN_INTERLACING 0x00000004 /* first frame contains odd fields but second - even */ | |
211 #define CFG_UNIQUE_INTERLACING 0x00000008 /* field deinterlace_pattern is valid */ | |
212 #define CFG_UNKNOWN_INTERLACING 0x0000000f /* unknown deinterlacing - use adaptive if it's possible */ | |
213 unsigned flags; | |
214 unsigned deinterlace_pattern; /* app -> driver: deinterlace pattern if flag CFG_UNIQUE_INTERLACING is set */ | |
215 }vidix_deinterlace_t; | |
216 | |
217 /* Returns 0 if ok else errno */ | |
218 extern int vixPlaybackGetDeint( vidix_deinterlace_t * ); | |
219 | |
220 /* Returns 0 if ok else errno */ | |
221 extern int vixPlaybackSetDeint( const vidix_deinterlace_t * ); | |
222 | |
3991 | 223 typedef struct vidix_slice_s |
224 { | |
225 void* address; /* app -> driver */ | |
226 unsigned size; /* app -> driver */ | |
227 vidix_rect_t slice; /* app -> driver */ | |
228 }vidix_slice_t; | |
229 | |
230 typedef struct vidix_dma_s | |
231 { | |
232 vidix_slice_t src; /* app -> driver */ | |
233 vidix_slice_t dest; /* app -> driver */ | |
234 #define LVO_DMA_NOSYNC 0 | |
235 #define LVO_DMA_SYNC 1 /* means: wait vsync or hsync */ | |
236 unsigned flags; /* app -> driver */ | |
237 }vidix_dma_t; | |
238 | |
239 /* Returns 0 if ok else errno */ | |
240 extern int vixPlaybackCopyFrame( const vidix_dma_t * ); | |
241 | |
4191 | 242 /* |
243 This structure is introdused to support OEM effects like: | |
244 - sharpness | |
245 - exposure | |
246 - (auto)gain | |
247 - H(V)flip | |
248 - black level | |
249 - white balance | |
250 and many other | |
251 */ | |
252 typedef struct vidix_oem_fx_s | |
253 { | |
254 #define FX_TYPE_BOOLEAN 0x00000000 | |
255 #define FX_TYPE_INTEGER 0x00000001 | |
256 int type; /* type of effects */ | |
257 int num; /* app -> driver: effect number. From 0 to max number of effects */ | |
258 int minvalue; /* min value of effect. 0 - for boolean */ | |
259 int maxvalue; /* max value of effect. 1 - for boolean */ | |
260 int value; /* current value of effect on 'get'; required on set */ | |
261 char * name[80]; /* effect name to display */ | |
262 }vidix_oem_fx_t; | |
263 | |
264 /* Returns 0 if ok else errno */ | |
265 extern int vixQueryNumOemEffects( unsigned * number ); | |
266 | |
267 /* Returns 0 if ok else errno */ | |
268 extern int vixGetOemEffect( vidix_oem_fx_t * ); | |
269 | |
270 /* Returns 0 if ok else errno */ | |
271 extern int vixSetOemEffect( const vidix_oem_fx_t * ); | |
272 | |
3991 | 273 #ifdef __cplusplus |
274 } | |
275 #endif | |
276 | |
277 #endif |