Mercurial > mplayer.hg
annotate libvo/vo_xvidix.c @ 26730:41794a5fb100
Add a new suboption to -vo xv and -vo xvmc that allows selection
of XVideo adaptor to be used (instead of default one, which is #0).
This is useful for example if you'd rather like to use the original
Overlay renderer of your GPU instead of the texture blitting engine
(which is usually default), which is number one cause of nasty
video tearing effects.
author | ben |
---|---|
date | Tue, 13 May 2008 17:52:25 +0000 |
parents | 3aee342be929 |
children | 46f0b4d34fa1 |
rev | line source |
---|---|
4123 | 1 /* |
2 VIDIX accelerated overlay in a X window | |
3 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
4 (C) Alex Beregszaszi & Zoltan Ponekker & Nick Kurshev |
4123 | 5 |
6 WS window manager by Pontscho/Fresh! | |
7 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
8 Based on vo_gl.c and vo_vesa.c and vo_xmga.c (.so mastah! ;)) |
4123 | 9 */ |
10 | |
11 #include <stdio.h> | |
12 #include <stdlib.h> | |
13 #include <string.h> | |
14 #include <math.h> | |
15 #include <errno.h> | |
16 | |
17 #include "config.h" | |
18 #include "video_out.h" | |
19 #include "video_out_internal.h" | |
20 | |
21 #include <X11/Xlib.h> | |
22 #include <X11/Xutil.h> | |
23 //#include <X11/keysym.h> | |
24 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
25 #ifdef HAVE_XINERAMA |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
26 #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
|
27 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
28 |
4123 | 29 #include "x11_common.h" |
30 #include "aspect.h" | |
31 #include "mp_msg.h" | |
32 | |
33 #include "vosub_vidix.h" | |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13056
diff
changeset
|
34 #include "vidix/vidixlib.h" |
4123 | 35 |
6009 | 36 #ifdef HAVE_NEW_GUI |
23077 | 37 #include "gui/interface.h" |
6009 | 38 #endif |
39 | |
4123 | 40 |
25216 | 41 static const vo_info_t info = { |
4123 | 42 "X11 (VIDIX)", |
43 "xvidix", | |
44 "Alex Beregszaszi", | |
45 "" | |
46 }; | |
47 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
48 LIBVO_EXTERN(xvidix) |
12582 | 49 #define UNUSED(x) ((void)(x)) /* Removes warning about unused arguments */ |
4123 | 50 /* X11 related variables */ |
4363 | 51 /* Colorkey handling */ |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
52 static XGCValues mGCV; |
10988 | 53 static int colorkey; |
4363 | 54 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
|
55 |
4363 | 56 /* VIDIX related */ |
57 static char *vidix_name; | |
4123 | 58 |
59 /* Image parameters */ | |
60 static uint32_t image_width; | |
61 static uint32_t image_height; | |
62 static uint32_t image_format; | |
63 | |
64 /* Window parameters */ | |
6299
4446af3c1a75
set_window() fixing detection of changement of the window position
attila
parents:
6095
diff
changeset
|
65 static uint32_t window_x, window_y; |
4123 | 66 static uint32_t window_width, window_height; |
67 | |
4363 | 68 /* used by XGetGeometry & XTranslateCoordinates for moving/resizing window */ |
4123 | 69 static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth, |
4981 | 70 drwDepth, drwcX, drwcY, dwidth, dheight; |
4123 | 71 |
12582 | 72 extern void set_video_eq(int cap); |
6755 | 73 |
8991 | 74 |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6953
diff
changeset
|
75 static void set_window(int force_update) |
4123 | 76 { |
6095 | 77 Window mRoot; |
12582 | 78 |
79 if (WinID) | |
80 { | |
81 XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth, | |
82 &drwHeight, &drwBorderWidth, &drwDepth); | |
83 drwX = drwY = 0; | |
6307 | 84 |
12582 | 85 XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0, |
86 &drwcX, &drwcY, &mRoot); | |
87 aspect(&dwidth, &dheight, A_NOZOOM); | |
88 if (!vo_fs) | |
89 mp_msg(MSGT_VO, MSGL_V, | |
90 "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", | |
91 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); | |
4123 | 92 |
12582 | 93 /* following stuff copied from vo_xmga.c */ |
94 } else | |
95 { | |
96 aspect(&dwidth, &dheight, A_NOZOOM); | |
97 drwcX = drwX = vo_dx; | |
98 drwcY = drwY = vo_dy; | |
99 drwWidth = vo_dwidth; | |
100 drwHeight = vo_dheight; | |
101 } | |
6043 | 102 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
103 #if X11_FULLSCREEN |
4981 | 104 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
|
105 { |
12582 | 106 aspect(&dwidth, &dheight, A_ZOOM); |
107 drwX = | |
108 (vo_screenwidth - | |
109 (dwidth > vo_screenwidth ? vo_screenwidth : dwidth)) / 2; | |
110 drwcX = drwX; | |
111 drwY = | |
112 (vo_screenheight - | |
113 (dheight > vo_screenheight ? vo_screenheight : dheight)) / 2; | |
114 drwcY = drwY; | |
115 drwWidth = (dwidth > vo_screenwidth ? vo_screenwidth : dwidth); | |
116 drwHeight = | |
117 (dheight > vo_screenheight ? vo_screenheight : dheight); | |
118 mp_msg(MSGT_VO, MSGL_V, | |
119 "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", | |
120 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
|
121 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
122 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
123 |
12582 | 124 vo_dwidth = drwWidth; |
125 vo_dheight = drwHeight; | |
6307 | 126 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
127 #ifdef HAVE_XINERAMA |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
128 if (XineramaIsActive(mDisplay)) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
129 { |
12582 | 130 XineramaScreenInfo *screens; |
131 int num_screens; | |
132 int i = 0; | |
133 | |
134 screens = XineramaQueryScreens(mDisplay, &num_screens); | |
135 | |
136 /* find the screen we are on */ | |
137 while (i < num_screens && | |
138 ((screens[i].x_org < drwcX) || (screens[i].y_org < drwcY) || | |
139 (screens[i].x_org + screens[i].width >= drwcX) || | |
140 (screens[i].y_org + screens[i].height >= drwcY))) | |
141 { | |
142 i++; | |
143 } | |
8991 | 144 |
12582 | 145 if (i < num_screens) |
146 { | |
147 /* save the screen we are on */ | |
148 xinerama_screen = i; | |
149 } else | |
150 { | |
151 /* oops.. couldnt find the screen we are on | |
152 * because the upper left corner left the | |
153 * visual range. assume we are still on the | |
154 * same screen | |
155 */ | |
156 i = xinerama_screen; | |
157 } | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
158 |
12582 | 159 /* set drwcX and drwcY to the right values */ |
160 drwcX = drwcX - screens[i].x_org; | |
161 drwcY = drwcY - screens[i].y_org; | |
162 XFree(screens); | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
163 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
164 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
165 |
12582 | 166 if (vo_panscan > 0.0f && vo_fs) |
167 { | |
168 drwcX -= vo_panscan_x >> 1; | |
169 drwcY -= vo_panscan_y >> 1; | |
170 drwX -= vo_panscan_x >> 1; | |
171 drwY -= vo_panscan_y >> 1; | |
172 drwWidth += vo_panscan_x; | |
173 drwHeight += vo_panscan_y; | |
174 } | |
6307 | 175 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
176 /* set new values in VIDIX */ |
6299
4446af3c1a75
set_window() fixing detection of changement of the window position
attila
parents:
6095
diff
changeset
|
177 if (force_update || (window_x != drwcX) || (window_y != drwcY) || |
12582 | 178 (window_width != drwWidth) || (window_height != drwHeight)) |
4123 | 179 { |
12582 | 180 // do a backup of window coordinates |
181 window_x = drwcX; | |
182 window_y = drwcY; | |
183 vo_dx = drwcX; | |
184 vo_dy = drwcY; | |
185 window_width = drwWidth; | |
186 window_height = drwHeight; | |
4198
7e2bf04c9a7c
added vidix_start() and vidix_stop() for better runtime-resize support ;)
alex
parents:
4194
diff
changeset
|
187 |
12582 | 188 /* FIXME: implement runtime resize/move if possible, this way is very ugly! */ |
189 vidix_stop(); | |
190 if (vidix_init(image_width, image_height, vo_dx, vo_dy, | |
191 window_width, window_height, image_format, | |
192 vo_depthonscreen, vo_screenwidth, | |
193 vo_screenheight) != 0) | |
4123 | 194 { |
12582 | 195 mp_msg(MSGT_VO, MSGL_FATAL, |
196 "Can't initialize VIDIX driver: %s\n", strerror(errno)); | |
197 abort(); | |
198 } | |
199 vidix_start(); | |
4123 | 200 } |
12582 | 201 |
202 mp_msg(MSGT_VO, MSGL_V, | |
203 "[xvidix] window properties: pos: %dx%d, size: %dx%d\n", vo_dx, | |
204 vo_dy, window_width, window_height); | |
4123 | 205 |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
206 /* mDrawColorKey: */ |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
207 |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
208 /* fill drawable with specified color */ |
11216 | 209 if (!(vo_colorkey & 0xff000000)) |
11158
85f4534d1edb
Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents:
10988
diff
changeset
|
210 { |
12582 | 211 XSetBackground(mDisplay, vo_gc, 0L); |
212 XClearWindow(mDisplay, vo_window); | |
213 XSetForeground(mDisplay, vo_gc, colorkey); | |
214 XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, | |
215 (vo_fs ? drwHeight - 1 : drwHeight)); | |
11158
85f4534d1edb
Colorkeying can be disabled. Fbdev, svga and vesa vidix colorkeying support
alex
parents:
10988
diff
changeset
|
216 } |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
217 /* flush, update drawable */ |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
218 XFlush(mDisplay); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
219 |
4123 | 220 return; |
221 } | |
222 | |
223 /* connect to server, create and map window, | |
224 * allocate colors and (shared) memory | |
225 */ | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
226 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
12582 | 227 uint32_t d_height, uint32_t flags, char *title, |
228 uint32_t format) | |
4123 | 229 { |
230 XVisualInfo vinfo; | |
12582 | 231 |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
7931
diff
changeset
|
232 // XSizeHints hint; |
4123 | 233 XSetWindowAttributes xswa; |
234 unsigned long xswamask; | |
235 XWindowAttributes attribs; | |
10988 | 236 int window_depth, r, g, b; |
4125 | 237 |
5738 | 238 title = "MPlayer VIDIX X11 Overlay"; |
4123 | 239 |
240 image_height = height; | |
241 image_width = width; | |
242 image_format = format; | |
12582 | 243 vo_mouse_autohide = 1; |
4459 | 244 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
245 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
|
246 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
|
247 |
6009 | 248 // vo_fs = flags&0x01; |
249 // if (vo_fs) | |
250 // { vo_old_width=d_width; vo_old_height=d_height; } | |
4123 | 251 |
10988 | 252 r = (vo_colorkey & 0x00ff0000) >> 16; |
253 g = (vo_colorkey & 0x0000ff00) >> 8; | |
254 b = vo_colorkey & 0x000000ff; | |
12582 | 255 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
|
256 { |
12582 | 257 case 32: |
258 colorkey = vo_colorkey; | |
259 break; | |
260 case 24: | |
261 colorkey = vo_colorkey & 0x00ffffff; | |
262 break; | |
263 case 16: | |
264 colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); | |
265 break; | |
266 case 15: | |
267 colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); | |
268 break; | |
269 default: | |
270 mp_msg(MSGT_VO, MSGL_ERR, | |
271 "Sorry, this (%d) color depth is not supported\n", | |
272 vo_depthonscreen); | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
273 } |
13946 | 274 mp_msg(MSGT_VO, MSGL_V, "Using colorkey: %x\n", colorkey); |
4123 | 275 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
276 #ifdef HAVE_NEW_GUI |
12582 | 277 if (use_gui) |
278 guiGetEvent(guiSetShVideo, 0); // the GUI will set up / resize the window | |
279 else | |
280 { | |
4123 | 281 #endif |
282 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
283 #ifdef X11_FULLSCREEN |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
284 if ((flags & VOFLAG_FULLSCREEN) || (flags & VOFLAG_SWSCALE)) |
12582 | 285 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
|
286 #endif |
12582 | 287 dwidth = d_width; |
288 dheight = d_height; | |
289 /* Make the window */ | |
290 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), | |
291 &attribs); | |
4123 | 292 |
12582 | 293 /* from vo_x11 */ |
294 window_depth = attribs.depth; | |
295 if ((window_depth != 15) && (window_depth != 16) | |
296 && (window_depth != 24) && (window_depth != 32)) | |
297 window_depth = 24; | |
298 XMatchVisualInfo(mDisplay, mScreen, window_depth, TrueColor, | |
299 &vinfo); | |
4123 | 300 |
12582 | 301 xswa.background_pixel = BlackPixel(mDisplay, mScreen); |
302 xswa.border_pixel = 0; | |
303 xswa.colormap = | |
304 XCreateColormap(mDisplay, RootWindow(mDisplay, mScreen), | |
305 vinfo.visual, AllocNone); | |
306 xswa.event_mask = | |
307 StructureNotifyMask | ExposureMask | KeyPressMask | | |
308 PropertyChangeMask | ((WinID == 0) ? 0 | |
309 : (ButtonPressMask | ButtonReleaseMask | | |
310 PointerMotionMask)); | |
311 xswamask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; | |
4123 | 312 |
12582 | 313 if (WinID >= 0) |
314 { | |
315 vo_window = | |
316 WinID ? ((Window) WinID) : RootWindow(mDisplay, mScreen); | |
317 if (WinID) | |
318 { | |
319 XUnmapWindow(mDisplay, vo_window); | |
320 XChangeWindowAttributes(mDisplay, vo_window, xswamask, | |
321 &xswa); | |
322 vo_x11_selectinput_witherr(mDisplay, vo_window, | |
323 StructureNotifyMask | | |
324 KeyPressMask | | |
325 PropertyChangeMask | | |
326 PointerMotionMask | | |
327 ButtonPressMask | | |
328 ButtonReleaseMask | | |
329 ExposureMask); | |
15540 | 330 XMapWindow(mDisplay, vo_window); |
12582 | 331 } else |
332 XSelectInput(mDisplay, vo_window, ExposureMask); | |
333 } else | |
334 { | |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
335 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
|
336 window_width, window_height, flags, |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
337 CopyFromParent, "xvidix", title); |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
338 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); |
12582 | 339 } |
340 | |
341 if (vo_gc != None) | |
342 XFreeGC(mDisplay, vo_gc); | |
343 vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV); | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
344 #ifdef HAVE_NEW_GUI |
12582 | 345 } |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
346 #endif |
4123 | 347 |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
348 if ((!WinID) && (flags & VOFLAG_FULLSCREEN)) |
12582 | 349 { |
350 vo_dx = 0; | |
351 vo_dy = 0; | |
352 vo_dwidth = vo_screenwidth; | |
353 vo_dheight = vo_screenheight; | |
354 vo_fs = 1; | |
355 } | |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
356 |
4255 | 357 if (vidix_grkey_support()) |
358 { | |
12582 | 359 vidix_grkey_get(&gr_key); |
360 gr_key.key_op = KEYS_PUT; | |
361 if (!(vo_colorkey & 0xff000000)) | |
362 { | |
363 gr_key.ckey.op = CKEY_TRUE; | |
364 gr_key.ckey.red = r; | |
365 gr_key.ckey.green = g; | |
366 gr_key.ckey.blue = b; | |
367 } else | |
368 gr_key.ckey.op = CKEY_FALSE; | |
369 vidix_grkey_set(&gr_key); | |
4255 | 370 } |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
371 |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6953
diff
changeset
|
372 set_window(1); |
6755 | 373 |
4805 | 374 XSync(mDisplay, False); |
4123 | 375 |
6382
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6311
diff
changeset
|
376 panscan_calc(); |
86d5fc5b54e2
fix panscan support and add Jesper Svennevid's <mplayer@svennevid.net> patch
pontscho
parents:
6311
diff
changeset
|
377 |
12582 | 378 if (vo_ontop) |
379 vo_x11_setlayer(mDisplay, vo_window, vo_ontop); | |
11542 | 380 |
12582 | 381 return (0); |
4123 | 382 } |
383 | |
384 static void check_events(void) | |
385 { | |
386 const int event = vo_x11_check_events(mDisplay); | |
4125 | 387 |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
388 if ((event & VO_EVENT_RESIZE) || (event & VO_EVENT_EXPOSE)) |
12582 | 389 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
|
390 |
4125 | 391 return; |
4123 | 392 } |
393 | |
394 /* draw_osd, flip_page, draw_slice, draw_frame should be | |
395 overwritten with vidix functions (vosub_vidix.c) */ | |
396 static void draw_osd(void) | |
397 { | |
12582 | 398 mp_msg(MSGT_VO, MSGL_FATAL, |
399 "[xvidix] error: didn't used vidix draw_osd!\n"); | |
4123 | 400 return; |
401 } | |
402 | |
403 static void flip_page(void) | |
404 { | |
12582 | 405 mp_msg(MSGT_VO, MSGL_FATAL, |
406 "[xvidix] error: didn't used vidix flip_page!\n"); | |
4123 | 407 return; |
408 } | |
409 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
410 static int draw_slice(uint8_t * src[], int stride[], |
12582 | 411 int w, int h, int x, int y) |
4123 | 412 { |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
413 UNUSED(src); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
414 UNUSED(stride); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
415 UNUSED(w); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
416 UNUSED(h); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
417 UNUSED(x); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
418 UNUSED(y); |
12582 | 419 mp_msg(MSGT_VO, MSGL_FATAL, |
420 "[xvidix] error: didn't used vidix draw_slice!\n"); | |
421 return (-1); | |
4123 | 422 } |
423 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
424 static int draw_frame(uint8_t * src[]) |
4123 | 425 { |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
426 UNUSED(src); |
12582 | 427 mp_msg(MSGT_VO, MSGL_FATAL, |
428 "[xvidix] error: didn't used vidix draw_frame!\n"); | |
429 return (-1); | |
4123 | 430 } |
431 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
432 static int query_format(uint32_t format) |
4123 | 433 { |
12582 | 434 return (vidix_query_fourcc(format)); |
4123 | 435 } |
436 | |
437 static void uninit(void) | |
438 { | |
12582 | 439 if (!vo_config_count) |
440 return; | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
441 vidix_term(); |
12582 | 442 |
8577 | 443 if (vidix_name) |
444 { | |
12582 | 445 free(vidix_name); |
446 vidix_name = NULL; | |
8577 | 447 } |
4441
90814d64a840
removed obosolete Terminate_Display_Process. using vo_x11_uninit. support UYVY format
alex
parents:
4434
diff
changeset
|
448 |
6095 | 449 vo_x11_uninit(); |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
450 } |
4352 | 451 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
452 static int preinit(const char *arg) |
4352 | 453 { |
6016 | 454 |
4363 | 455 if (arg) |
456 vidix_name = strdup(arg); | |
457 else | |
458 { | |
12582 | 459 mp_msg(MSGT_VO, MSGL_INFO, |
460 "No vidix driver name provided, probing available ones (-v option for details)!\n"); | |
461 vidix_name = NULL; | |
4363 | 462 } |
463 | |
12582 | 464 if (!vo_init()) |
465 return (-1); | |
7777 | 466 |
4363 | 467 if (vidix_preinit(vidix_name, &video_out_xvidix) != 0) |
12582 | 468 return (1); |
4363 | 469 |
12582 | 470 return (0); |
4352 | 471 } |
472 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
473 static int control(uint32_t request, void *data, ...) |
4352 | 474 { |
12582 | 475 switch (request) |
476 { | |
477 case VOCTRL_QUERY_FORMAT: | |
478 return query_format(*((uint32_t *) data)); | |
479 case VOCTRL_GUISUPPORT: | |
480 return VO_TRUE; | |
481 case VOCTRL_GET_PANSCAN: | |
482 if (!vo_config_count || !vo_fs) | |
483 return VO_FALSE; | |
484 return VO_TRUE; | |
485 case VOCTRL_ONTOP: | |
486 vo_x11_ontop(); | |
487 return VO_TRUE; | |
488 case VOCTRL_FULLSCREEN: | |
489 vo_x11_fullscreen(); | |
490 case VOCTRL_SET_PANSCAN: | |
491 if (vo_fs && (vo_panscan != vo_panscan_amount)) | |
492 { | |
493 panscan_calc(); | |
494 set_window(0); | |
495 } | |
496 return VO_TRUE; | |
497 case VOCTRL_SET_EQUALIZER: | |
498 { | |
499 va_list ap; | |
500 int value; | |
6786 | 501 |
12582 | 502 va_start(ap, data); |
503 value = va_arg(ap, int); | |
504 | |
505 va_end(ap); | |
6786 | 506 |
20110 | 507 return vidix_control(request, data, value); |
12582 | 508 } |
509 case VOCTRL_GET_EQUALIZER: | |
510 { | |
511 va_list ap; | |
512 int *value; | |
513 | |
514 va_start(ap, data); | |
515 value = va_arg(ap, int *); | |
516 | |
517 va_end(ap); | |
518 | |
519 return vidix_control(request, data, value); | |
520 } | |
22232 | 521 case VOCTRL_UPDATE_SCREENINFO: |
522 aspect_save_screenres(vo_screenwidth, vo_screenheight); | |
523 return VO_TRUE; | |
524 | |
12582 | 525 } |
526 return vidix_control(request, data); | |
6531 | 527 // return VO_NOTIMPL; |
4352 | 528 } |