Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4349 | Serge | 1 | /* |
2 | * Copyright (C) Aaron Holtzman - Aug 1999 |
||
3 | * Strongly modified, most parts rewritten: A'rpi/ESP-team - 2000-2001 |
||
4 | * (C) MPlayer developers |
||
5 | * |
||
6 | * This file is part of MPlayer. |
||
7 | * |
||
8 | * MPlayer is free software; you can redistribute it and/or modify |
||
9 | * it under the terms of the GNU General Public License as published by |
||
10 | * the Free Software Foundation; either version 2 of the License, or |
||
11 | * (at your option) any later version. |
||
12 | * |
||
13 | * MPlayer is distributed in the hope that it will be useful, |
||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
16 | * GNU General Public License for more details. |
||
17 | * |
||
18 | * You should have received a copy of the GNU General Public License along |
||
19 | * with MPlayer; if not, write to the Free Software Foundation, Inc., |
||
20 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||
21 | */ |
||
22 | |||
23 | #ifndef MPLAYER_VIDEO_OUT_H |
||
24 | #define MPLAYER_VIDEO_OUT_H |
||
25 | |||
26 | #include |
||
27 | #include |
||
28 | |||
29 | //#include "sub/font_load.h" |
||
30 | #include "../img_format.h" |
||
31 | //#include "vidix/vidix.h" |
||
32 | |||
33 | #define VO_EVENT_EXPOSE 1 |
||
34 | #define VO_EVENT_RESIZE 2 |
||
35 | #define VO_EVENT_KEYPRESS 4 |
||
36 | #define VO_EVENT_REINIT 8 |
||
37 | #define VO_EVENT_MOVE 16 |
||
38 | |||
39 | /* Obsolete: VOCTRL_QUERY_VAA 1 */ |
||
40 | /* does the device support the required format */ |
||
41 | #define VOCTRL_QUERY_FORMAT 2 |
||
42 | /* signal a device reset seek */ |
||
43 | #define VOCTRL_RESET 3 |
||
44 | /* true if vo driver can use GUI created windows */ |
||
45 | #define VOCTRL_GUISUPPORT 4 |
||
46 | #define VOCTRL_GUI_NOWINDOW 19 |
||
47 | /* used to switch to fullscreen */ |
||
48 | #define VOCTRL_FULLSCREEN 5 |
||
49 | /* signal a device pause */ |
||
50 | #define VOCTRL_PAUSE 7 |
||
51 | /* start/resume playback */ |
||
52 | #define VOCTRL_RESUME 8 |
||
53 | /* libmpcodecs direct rendering: */ |
||
54 | #define VOCTRL_GET_IMAGE 9 |
||
55 | #define VOCTRL_DRAW_IMAGE 13 |
||
56 | #define VOCTRL_SET_SPU_PALETTE 14 |
||
57 | /* decoding ahead: */ |
||
58 | #define VOCTRL_GET_NUM_FRAMES 10 |
||
59 | #define VOCTRL_GET_FRAME_NUM 11 |
||
60 | #define VOCTRL_SET_FRAME_NUM 12 |
||
61 | #define VOCTRL_GET_PANSCAN 15 |
||
62 | #define VOCTRL_SET_PANSCAN 16 |
||
63 | /* equalizer controls */ |
||
64 | #define VOCTRL_SET_EQUALIZER 17 |
||
65 | #define VOCTRL_GET_EQUALIZER 18 |
||
66 | //#define VOCTRL_GUI_NOWINDOW 19 |
||
67 | /* Frame duplication */ |
||
68 | #define VOCTRL_DUPLICATE_FRAME 20 |
||
69 | // ... 21 |
||
70 | #define VOCTRL_START_SLICE 21 |
||
71 | |||
72 | #define VOCTRL_ONTOP 25 |
||
73 | #define VOCTRL_ROOTWIN 26 |
||
74 | #define VOCTRL_BORDER 27 |
||
75 | #define VOCTRL_DRAW_EOSD 28 |
||
76 | #define VOCTRL_GET_EOSD_RES 29 |
||
77 | |||
78 | #define VOCTRL_SET_DEINTERLACE 30 |
||
79 | #define VOCTRL_GET_DEINTERLACE 31 |
||
80 | |||
81 | #define VOCTRL_UPDATE_SCREENINFO 32 |
||
82 | |||
83 | // Vo can be used by xover |
||
84 | #define VOCTRL_XOVERLAY_SUPPORT 22 |
||
85 | |||
86 | #define VOCTRL_XOVERLAY_SET_COLORKEY 24 |
||
87 | typedef struct { |
||
88 | uint32_t x11; // The raw x11 color |
||
89 | uint16_t r,g,b; |
||
90 | } mp_colorkey_t; |
||
91 | |||
92 | #define VOCTRL_XOVERLAY_SET_WIN 23 |
||
93 | typedef struct { |
||
94 | int x,y; |
||
95 | int w,h; |
||
96 | } mp_win_t; |
||
97 | |||
98 | #define VO_TRUE 1 |
||
99 | #define VO_FALSE 0 |
||
100 | #define VO_ERROR -1 |
||
101 | #define VO_NOTAVAIL -2 |
||
102 | #define VO_NOTIMPL -3 |
||
103 | |||
104 | #define VOFLAG_FULLSCREEN 0x01 |
||
105 | #define VOFLAG_MODESWITCHING 0x02 |
||
106 | #define VOFLAG_SWSCALE 0x04 |
||
107 | #define VOFLAG_FLIPPING 0x08 |
||
108 | #define VOFLAG_HIDDEN 0x10 //< Use to create a hidden window |
||
109 | #define VOFLAG_STEREO 0x20 //< Use to create a stereo-capable window |
||
110 | #define VOFLAG_XOVERLAY_SUB_VO 0x10000 |
||
111 | |||
112 | typedef struct vo_info_s |
||
113 | { |
||
114 | /* driver name ("Matrox Millennium G200/G400" */ |
||
115 | const char *name; |
||
116 | /* short name (for config strings) ("mga") */ |
||
117 | const char *short_name; |
||
118 | /* author ("Aaron Holtzman |
||
119 | const char *author; |
||
120 | /* any additional comments */ |
||
121 | const char *comment; |
||
122 | } vo_info_t; |
||
123 | |||
124 | typedef struct vo_functions_s |
||
125 | { |
||
126 | const vo_info_t *info; |
||
127 | /* |
||
128 | * Preinitializes driver (real INITIALIZATION) |
||
129 | * arg - currently it's vo_subdevice |
||
130 | * returns: zero on successful initialization, non-zero on error. |
||
131 | */ |
||
132 | int (*preinit)(const char *arg); |
||
133 | /* |
||
134 | * Initialize (means CONFIGURE) the display driver. |
||
135 | * params: |
||
136 | * width,height: image source size |
||
137 | * d_width,d_height: size of the requested window size, just a hint |
||
138 | * fullscreen: flag, 0=windowd 1=fullscreen, just a hint |
||
139 | * title: window title, if available |
||
140 | * format: fourcc of pixel format |
||
141 | * returns : zero on successful initialization, non-zero on error. |
||
142 | */ |
||
143 | int (*config)(uint32_t width, uint32_t height, uint32_t d_width, |
||
144 | uint32_t d_height, uint32_t fullscreen, char *title, |
||
145 | uint32_t format); |
||
146 | |||
147 | /* |
||
148 | * Control interface |
||
149 | */ |
||
150 | int (*control)(uint32_t request, void *data, ...); |
||
151 | |||
152 | /* |
||
153 | * Display a new RGB/BGR frame of the video to the screen. |
||
154 | * params: |
||
155 | * src[0] - pointer to the image |
||
156 | */ |
||
157 | int (*draw_frame)(uint8_t *src[]); |
||
158 | |||
159 | /* |
||
160 | * Draw a planar YUV slice to the buffer: |
||
161 | * params: |
||
162 | * src[3] = source image planes (Y,U,V) |
||
163 | * stride[3] = source image planes line widths (in bytes) |
||
164 | * w,h = width*height of area to be copied (in Y pixels) |
||
165 | * x,y = position at the destination image (in Y pixels) |
||
166 | */ |
||
167 | int (*draw_slice)(uint8_t *src[], int stride[], int w,int h, int x,int y); |
||
168 | |||
169 | /* |
||
170 | * Draws OSD to the screen buffer |
||
171 | */ |
||
172 | void (*draw_osd)(void); |
||
173 | |||
174 | /* |
||
175 | * Blit/Flip buffer to the screen. Must be called after each frame! |
||
176 | */ |
||
177 | void (*flip_page)(void); |
||
178 | |||
179 | /* |
||
180 | * This func is called after every frames to handle keyboard and |
||
181 | * other events. It's called in PAUSE mode too! |
||
182 | */ |
||
183 | void (*check_events)(void); |
||
184 | |||
185 | /* |
||
186 | * Closes driver. Should restore the original state of the system. |
||
187 | */ |
||
188 | void (*uninit)(void); |
||
189 | } vo_functions_t; |
||
190 | |||
191 | const vo_functions_t* init_best_video_out(char** vo_list); |
||
192 | int config_video_out(const vo_functions_t *vo, uint32_t width, uint32_t height, |
||
193 | uint32_t d_width, uint32_t d_height, uint32_t flags, |
||
194 | char *title, uint32_t format); |
||
195 | void list_video_out(void); |
||
196 | |||
197 | // NULL terminated array of all drivers |
||
198 | extern const vo_functions_t* const video_out_drivers[]; |
||
199 | |||
200 | extern int vo_flags; |
||
201 | |||
202 | extern int vo_config_count; |
||
203 | |||
204 | extern int xinerama_screen; |
||
205 | extern int xinerama_x; |
||
206 | extern int xinerama_y; |
||
207 | |||
208 | // correct resolution/bpp on screen: (should be autodetected by vo_init()) |
||
209 | extern int vo_depthonscreen; |
||
210 | extern int vo_screenwidth; |
||
211 | extern int vo_screenheight; |
||
212 | |||
213 | // requested resolution/bpp: (-x -y -bpp options) |
||
214 | extern int vo_dx; |
||
215 | extern int vo_dy; |
||
216 | extern int vo_dwidth; |
||
217 | extern int vo_dheight; |
||
218 | extern int vo_dbpp; |
||
219 | |||
220 | extern int vo_grabpointer; |
||
221 | extern int vo_doublebuffering; |
||
222 | extern int vo_directrendering; |
||
223 | extern int vo_vsync; |
||
224 | extern int vo_fsmode; |
||
225 | extern float vo_panscan; |
||
226 | extern int vo_adapter_num; |
||
227 | extern int vo_refresh_rate; |
||
228 | extern int vo_keepaspect; |
||
229 | extern int vo_rootwin; |
||
230 | extern int vo_ontop; |
||
231 | extern int vo_border; |
||
232 | |||
233 | extern int vo_gamma_gamma; |
||
234 | extern int vo_gamma_brightness; |
||
235 | extern int vo_gamma_saturation; |
||
236 | extern int vo_gamma_contrast; |
||
237 | extern int vo_gamma_hue; |
||
238 | extern int vo_gamma_red_intensity; |
||
239 | extern int vo_gamma_green_intensity; |
||
240 | extern int vo_gamma_blue_intensity; |
||
241 | |||
242 | extern int vo_nomouse_input; |
||
243 | extern int enable_mouse_movements; |
||
244 | |||
245 | extern int vo_pts; |
||
246 | extern float vo_fps; |
||
247 | |||
248 | extern char *vo_subdevice; |
||
249 | |||
250 | extern int vo_colorkey; |
||
251 | |||
252 | extern char *vo_winname; |
||
253 | extern char *vo_wintitle; |
||
254 | |||
255 | extern int64_t WinID; |
||
256 | |||
257 | typedef struct { |
||
258 | float min; |
||
259 | float max; |
||
260 | } range_t; |
||
261 | |||
262 | float range_max(range_t *r); |
||
263 | int in_range(range_t *r, float f); |
||
264 | range_t *str2range(char *s); |
||
265 | extern char *monitor_hfreq_str; |
||
266 | extern char *monitor_vfreq_str; |
||
267 | extern char *monitor_dotclock_str; |
||
268 | |||
269 | struct mp_keymap { |
||
270 | int from; |
||
271 | int to; |
||
272 | }; |
||
273 | int lookup_keymap_table(const struct mp_keymap *map, int key); |
||
274 | struct vo_rect { |
||
275 | int left, right, top, bottom, width, height; |
||
276 | }; |
||
277 | void calc_src_dst_rects(int src_width, int src_height, struct vo_rect *src, struct vo_rect *dst, |
||
278 | struct vo_rect *borders, const struct vo_rect *crop); |
||
279 | void vo_mouse_movement(int posx, int posy); |
||
280 | |||
281 | #endif /* MPLAYER_VIDEO_OUT_H */>> |