Mercurial > mplayer.hg
annotate libvo/vo_xvidix.c @ 28511:db19e31a2c7c
Add a calc_src_dst_rects that calculates from window size, panscan etc.
which part of the video source must be scaled onto which part of the window.
Direct3D and (future) VDPAU need this, for XvMC it makes it easier to add
cropping support and Xv is changed to keep the diff to XvMC small.
author | reimar |
---|---|
date | Thu, 12 Feb 2009 17:40:53 +0000 |
parents | 7681eab10aea |
children | ad274a5b093b |
rev | line source |
---|---|
4123 | 1 /* |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
2 * VIDIX-accelerated overlay in an X window |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
3 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
4 * copyright (C) Alex Beregszaszi & Zoltan Ponekker & Nick Kurshev |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
5 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
6 * WS window manager by Pontscho/Fresh! |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
7 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
8 * based on vo_gl.c and vo_vesa.c and vo_xmga.c (.so mastah! ;)) |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
9 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
10 * This file is part of MPlayer. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
11 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
12 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
13 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
14 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
15 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
16 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
17 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
20 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
21 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
22 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
23 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28051
diff
changeset
|
25 */ |
4123 | 26 |
27 #include <stdio.h> | |
28 #include <stdlib.h> | |
29 #include <string.h> | |
30 #include <math.h> | |
31 #include <errno.h> | |
32 | |
33 #include "config.h" | |
34 #include "video_out.h" | |
35 #include "video_out_internal.h" | |
36 | |
37 #include <X11/Xlib.h> | |
38 #include <X11/Xutil.h> | |
39 //#include <X11/keysym.h> | |
40 | |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
41 #ifdef CONFIG_XINERAMA |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
42 #include <X11/extensions/Xinerama.h> |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
43 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
44 |
4123 | 45 #include "x11_common.h" |
46 #include "aspect.h" | |
47 #include "mp_msg.h" | |
48 | |
49 #include "vosub_vidix.h" | |
27079 | 50 #include "vidix/vidix.h" |
4123 | 51 |
27343 | 52 #ifdef CONFIG_GUI |
23077 | 53 #include "gui/interface.h" |
6009 | 54 #endif |
55 | |
4123 | 56 |
25216 | 57 static const vo_info_t info = { |
4123 | 58 "X11 (VIDIX)", |
59 "xvidix", | |
60 "Alex Beregszaszi", | |
61 "" | |
62 }; | |
63 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
64 LIBVO_EXTERN(xvidix) |
12582 | 65 #define UNUSED(x) ((void)(x)) /* Removes warning about unused arguments */ |
4123 | 66 /* X11 related variables */ |
4363 | 67 /* Colorkey handling */ |
10988 | 68 static int colorkey; |
4363 | 69 static vidix_grkey_t gr_key; |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
70 |
4363 | 71 /* VIDIX related */ |
72 static char *vidix_name; | |
4123 | 73 |
74 /* Image parameters */ | |
75 static uint32_t image_width; | |
76 static uint32_t image_height; | |
77 static uint32_t image_format; | |
78 | |
79 /* Window parameters */ | |
6299
4446af3c1a75
set_window() fixing detection of changement of the window position
attila
parents:
6095
diff
changeset
|
80 static uint32_t window_x, window_y; |
4123 | 81 static uint32_t window_width, window_height; |
82 | |
4363 | 83 /* used by XGetGeometry & XTranslateCoordinates for moving/resizing window */ |
4123 | 84 static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth, |
4981 | 85 drwDepth, drwcX, drwcY, dwidth, dheight; |
4123 | 86 |
28051 | 87 void set_video_eq(int cap); |
6755 | 88 |
8991 | 89 |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6953
diff
changeset
|
90 static void set_window(int force_update) |
4123 | 91 { |
6095 | 92 Window mRoot; |
12582 | 93 |
94 if (WinID) | |
95 { | |
96 XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth, | |
97 &drwHeight, &drwBorderWidth, &drwDepth); | |
98 drwX = drwY = 0; | |
6307 | 99 |
12582 | 100 XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0, |
101 &drwcX, &drwcY, &mRoot); | |
102 aspect(&dwidth, &dheight, A_NOZOOM); | |
103 if (!vo_fs) | |
104 mp_msg(MSGT_VO, MSGL_V, | |
105 "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", | |
106 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); | |
4123 | 107 |
12582 | 108 /* following stuff copied from vo_xmga.c */ |
109 } else | |
110 { | |
111 aspect(&dwidth, &dheight, A_NOZOOM); | |
112 drwcX = drwX = vo_dx; | |
113 drwcY = drwY = vo_dy; | |
114 drwWidth = vo_dwidth; | |
115 drwHeight = vo_dheight; | |
116 } | |
6043 | 117 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
118 #if X11_FULLSCREEN |
4981 | 119 if (vo_fs) |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
120 { |
12582 | 121 aspect(&dwidth, &dheight, A_ZOOM); |
122 drwX = | |
123 (vo_screenwidth - | |
124 (dwidth > vo_screenwidth ? vo_screenwidth : dwidth)) / 2; | |
125 drwcX = drwX; | |
126 drwY = | |
127 (vo_screenheight - | |
128 (dheight > vo_screenheight ? vo_screenheight : dheight)) / 2; | |
129 drwcY = drwY; | |
130 drwWidth = (dwidth > vo_screenwidth ? vo_screenwidth : dwidth); | |
131 drwHeight = | |
132 (dheight > vo_screenheight ? vo_screenheight : dheight); | |
133 mp_msg(MSGT_VO, MSGL_V, | |
134 "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", | |
135 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
136 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
137 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
138 |
12582 | 139 vo_dwidth = drwWidth; |
140 vo_dheight = drwHeight; | |
6307 | 141 |
27748 | 142 update_xinerama_info(); |
143 drwcX -= xinerama_x; | |
144 drwcY -= xinerama_y; | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
145 |
12582 | 146 if (vo_panscan > 0.0f && vo_fs) |
147 { | |
148 drwcX -= vo_panscan_x >> 1; | |
149 drwcY -= vo_panscan_y >> 1; | |
150 drwX -= vo_panscan_x >> 1; | |
151 drwY -= vo_panscan_y >> 1; | |
152 drwWidth += vo_panscan_x; | |
153 drwHeight += vo_panscan_y; | |
154 } | |
6307 | 155 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
156 /* set new values in VIDIX */ |
6299
4446af3c1a75
set_window() fixing detection of changement of the window position
attila
parents:
6095
diff
changeset
|
157 if (force_update || (window_x != drwcX) || (window_y != drwcY) || |
12582 | 158 (window_width != drwWidth) || (window_height != drwHeight)) |
4123 | 159 { |
12582 | 160 // do a backup of window coordinates |
161 window_x = drwcX; | |
162 window_y = drwcY; | |
163 vo_dx = drwcX; | |
164 vo_dy = drwcY; | |
165 window_width = drwWidth; | |
166 window_height = drwHeight; | |
4198
7e2bf04c9a7c
added vidix_start() and vidix_stop() for better runtime-resize support ;)
alex
parents:
4194
diff
changeset
|
167 |
12582 | 168 /* FIXME: implement runtime resize/move if possible, this way is very ugly! */ |
169 vidix_stop(); | |
170 if (vidix_init(image_width, image_height, vo_dx, vo_dy, | |
171 window_width, window_height, image_format, | |
172 vo_depthonscreen, vo_screenwidth, | |
173 vo_screenheight) != 0) | |
4123 | 174 { |
12582 | 175 mp_msg(MSGT_VO, MSGL_FATAL, |
176 "Can't initialize VIDIX driver: %s\n", strerror(errno)); | |
177 abort(); | |
178 } | |
179 vidix_start(); | |
4123 | 180 } |
12582 | 181 |
182 mp_msg(MSGT_VO, MSGL_V, | |
183 "[xvidix] window properties: pos: %dx%d, size: %dx%d\n", vo_dx, | |
184 vo_dy, window_width, window_height); | |
4123 | 185 |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
186 /* mDrawColorKey: */ |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
187 |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
188 /* fill drawable with specified color */ |
11216 | 189 if (!(vo_colorkey & 0xff000000)) |
11158
85f4534d1edb
Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents:
10988
diff
changeset
|
190 { |
12582 | 191 XSetBackground(mDisplay, vo_gc, 0L); |
192 XClearWindow(mDisplay, vo_window); | |
193 XSetForeground(mDisplay, vo_gc, colorkey); | |
194 XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, | |
195 (vo_fs ? drwHeight - 1 : drwHeight)); | |
11158
85f4534d1edb
Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents:
10988
diff
changeset
|
196 } |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
197 /* flush, update drawable */ |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
198 XFlush(mDisplay); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
199 |
4123 | 200 return; |
201 } | |
202 | |
203 /* connect to server, create and map window, | |
204 * allocate colors and (shared) memory | |
205 */ | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
206 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
12582 | 207 uint32_t d_height, uint32_t flags, char *title, |
208 uint32_t format) | |
4123 | 209 { |
210 XVisualInfo vinfo; | |
12582 | 211 |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
7931
diff
changeset
|
212 // XSizeHints hint; |
4123 | 213 XSetWindowAttributes xswa; |
214 unsigned long xswamask; | |
215 XWindowAttributes attribs; | |
10988 | 216 int window_depth, r, g, b; |
4125 | 217 |
5738 | 218 title = "MPlayer VIDIX X11 Overlay"; |
4123 | 219 |
220 image_height = height; | |
221 image_width = width; | |
222 image_format = format; | |
4459 | 223 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
224 window_width = d_width; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
225 window_height = d_height; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
226 |
6009 | 227 // vo_fs = flags&0x01; |
228 // if (vo_fs) | |
229 // { vo_old_width=d_width; vo_old_height=d_height; } | |
4123 | 230 |
10988 | 231 r = (vo_colorkey & 0x00ff0000) >> 16; |
232 g = (vo_colorkey & 0x0000ff00) >> 8; | |
233 b = vo_colorkey & 0x000000ff; | |
12582 | 234 switch (vo_depthonscreen) |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
235 { |
12582 | 236 case 32: |
237 colorkey = vo_colorkey; | |
238 break; | |
239 case 24: | |
240 colorkey = vo_colorkey & 0x00ffffff; | |
241 break; | |
242 case 16: | |
243 colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); | |
244 break; | |
245 case 15: | |
246 colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); | |
247 break; | |
248 default: | |
249 mp_msg(MSGT_VO, MSGL_ERR, | |
250 "Sorry, this (%d) color depth is not supported\n", | |
251 vo_depthonscreen); | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
252 } |
13946 | 253 mp_msg(MSGT_VO, MSGL_V, "Using colorkey: %x\n", colorkey); |
4123 | 254 |
27343 | 255 #ifdef CONFIG_GUI |
12582 | 256 if (use_gui) |
257 guiGetEvent(guiSetShVideo, 0); // the GUI will set up / resize the window | |
258 else | |
259 { | |
4123 | 260 #endif |
261 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
262 #ifdef X11_FULLSCREEN |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
263 if ((flags & VOFLAG_FULLSCREEN) || (flags & VOFLAG_SWSCALE)) |
12582 | 264 aspect(&d_width, &d_height, A_ZOOM); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
265 #endif |
12582 | 266 dwidth = d_width; |
267 dheight = d_height; | |
268 /* Make the window */ | |
269 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), | |
270 &attribs); | |
4123 | 271 |
12582 | 272 /* from vo_x11 */ |
273 window_depth = attribs.depth; | |
274 if ((window_depth != 15) && (window_depth != 16) | |
275 && (window_depth != 24) && (window_depth != 32)) | |
276 window_depth = 24; | |
277 XMatchVisualInfo(mDisplay, mScreen, window_depth, TrueColor, | |
278 &vinfo); | |
4123 | 279 |
12582 | 280 xswa.background_pixel = BlackPixel(mDisplay, mScreen); |
281 xswa.border_pixel = 0; | |
282 xswa.colormap = | |
283 XCreateColormap(mDisplay, RootWindow(mDisplay, mScreen), | |
284 vinfo.visual, AllocNone); | |
27927
6f199f065e15
Factor common code like -wid handling, vo_gc creation etc. out into
reimar
parents:
27903
diff
changeset
|
285 xswamask = CWBackPixel | CWBorderPixel | CWColormap; |
4123 | 286 |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
287 vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
288 window_width, window_height, flags, |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
289 CopyFromParent, "xvidix", title); |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
290 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); |
12582 | 291 |
27343 | 292 #ifdef CONFIG_GUI |
12582 | 293 } |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
294 #endif |
4123 | 295 |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
296 if ((!WinID) && (flags & VOFLAG_FULLSCREEN)) |
12582 | 297 { |
298 vo_dx = 0; | |
299 vo_dy = 0; | |
300 vo_dwidth = vo_screenwidth; | |
301 vo_dheight = vo_screenheight; | |
302 vo_fs = 1; | |
303 } | |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
304 |
4255 | 305 if (vidix_grkey_support()) |
306 { | |
12582 | 307 vidix_grkey_get(&gr_key); |
308 gr_key.key_op = KEYS_PUT; | |
309 if (!(vo_colorkey & 0xff000000)) | |
310 { | |
311 gr_key.ckey.op = CKEY_TRUE; | |
312 gr_key.ckey.red = r; | |
313 gr_key.ckey.green = g; | |
314 gr_key.ckey.blue = b; | |
315 } else | |
316 gr_key.ckey.op = CKEY_FALSE; | |
317 vidix_grkey_set(&gr_key); | |
4255 | 318 } |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
319 |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6953
diff
changeset
|
320 set_window(1); |
6755 | 321 |
4805 | 322 XSync(mDisplay, False); |
4123 | 323 |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6311
diff
changeset
|
324 panscan_calc(); |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6311
diff
changeset
|
325 |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
326 return 0; |
4123 | 327 } |
328 | |
329 static void check_events(void) | |
330 { | |
331 const int event = vo_x11_check_events(mDisplay); | |
4125 | 332 |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
333 if ((event & VO_EVENT_RESIZE) || (event & VO_EVENT_EXPOSE)) |
12582 | 334 set_window(0); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
335 |
4125 | 336 return; |
4123 | 337 } |
338 | |
339 /* draw_osd, flip_page, draw_slice, draw_frame should be | |
340 overwritten with vidix functions (vosub_vidix.c) */ | |
341 static void draw_osd(void) | |
342 { | |
12582 | 343 mp_msg(MSGT_VO, MSGL_FATAL, |
344 "[xvidix] error: didn't used vidix draw_osd!\n"); | |
4123 | 345 return; |
346 } | |
347 | |
348 static void flip_page(void) | |
349 { | |
12582 | 350 mp_msg(MSGT_VO, MSGL_FATAL, |
351 "[xvidix] error: didn't used vidix flip_page!\n"); | |
4123 | 352 return; |
353 } | |
354 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
355 static int draw_slice(uint8_t * src[], int stride[], |
12582 | 356 int w, int h, int x, int y) |
4123 | 357 { |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
358 UNUSED(src); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
359 UNUSED(stride); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
360 UNUSED(w); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
361 UNUSED(h); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
362 UNUSED(x); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
363 UNUSED(y); |
12582 | 364 mp_msg(MSGT_VO, MSGL_FATAL, |
365 "[xvidix] error: didn't used vidix draw_slice!\n"); | |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
366 return -1; |
4123 | 367 } |
368 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
369 static int draw_frame(uint8_t * src[]) |
4123 | 370 { |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
371 UNUSED(src); |
12582 | 372 mp_msg(MSGT_VO, MSGL_FATAL, |
373 "[xvidix] error: didn't used vidix draw_frame!\n"); | |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
374 return -1; |
4123 | 375 } |
376 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
377 static int query_format(uint32_t format) |
4123 | 378 { |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
379 return vidix_query_fourcc(format); |
4123 | 380 } |
381 | |
382 static void uninit(void) | |
383 { | |
12582 | 384 if (!vo_config_count) |
385 return; | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
386 vidix_term(); |
12582 | 387 |
8577 | 388 if (vidix_name) |
389 { | |
12582 | 390 free(vidix_name); |
391 vidix_name = NULL; | |
8577 | 392 } |
4441
90814d64a840
removed obosolete Terminate_Display_Process. using vo_x11_uninit. support UYVY format
alex
parents:
4434
diff
changeset
|
393 |
6095 | 394 vo_x11_uninit(); |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
395 } |
4352 | 396 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
397 static int preinit(const char *arg) |
4352 | 398 { |
6016 | 399 |
4363 | 400 if (arg) |
401 vidix_name = strdup(arg); | |
402 else | |
403 { | |
12582 | 404 mp_msg(MSGT_VO, MSGL_INFO, |
405 "No vidix driver name provided, probing available ones (-v option for details)!\n"); | |
406 vidix_name = NULL; | |
4363 | 407 } |
408 | |
12582 | 409 if (!vo_init()) |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
410 return -1; |
7777 | 411 |
4363 | 412 if (vidix_preinit(vidix_name, &video_out_xvidix) != 0) |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
413 return 1; |
4363 | 414 |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25216
diff
changeset
|
415 return 0; |
4352 | 416 } |
417 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
418 static int control(uint32_t request, void *data, ...) |
4352 | 419 { |
12582 | 420 switch (request) |
421 { | |
422 case VOCTRL_QUERY_FORMAT: | |
423 return query_format(*((uint32_t *) data)); | |
424 case VOCTRL_GUISUPPORT: | |
425 return VO_TRUE; | |
426 case VOCTRL_GET_PANSCAN: | |
427 if (!vo_config_count || !vo_fs) | |
428 return VO_FALSE; | |
429 return VO_TRUE; | |
430 case VOCTRL_ONTOP: | |
431 vo_x11_ontop(); | |
432 return VO_TRUE; | |
433 case VOCTRL_FULLSCREEN: | |
434 vo_x11_fullscreen(); | |
435 case VOCTRL_SET_PANSCAN: | |
436 if (vo_fs && (vo_panscan != vo_panscan_amount)) | |
437 { | |
438 panscan_calc(); | |
439 set_window(0); | |
440 } | |
441 return VO_TRUE; | |
442 case VOCTRL_SET_EQUALIZER: | |
443 { | |
444 va_list ap; | |
445 int value; | |
6786 | 446 |
12582 | 447 va_start(ap, data); |
448 value = va_arg(ap, int); | |
449 | |
450 va_end(ap); | |
6786 | 451 |
20110 | 452 return vidix_control(request, data, value); |
12582 | 453 } |
454 case VOCTRL_GET_EQUALIZER: | |
455 { | |
456 va_list ap; | |
457 int *value; | |
458 | |
459 va_start(ap, data); | |
460 value = va_arg(ap, int *); | |
461 | |
462 va_end(ap); | |
463 | |
464 return vidix_control(request, data, value); | |
465 } | |
22232 | 466 case VOCTRL_UPDATE_SCREENINFO: |
467 aspect_save_screenres(vo_screenwidth, vo_screenheight); | |
468 return VO_TRUE; | |
469 | |
12582 | 470 } |
471 return vidix_control(request, data); | |
6531 | 472 // return VO_NOTIMPL; |
4352 | 473 } |