Mercurial > mplayer.hg
annotate libvo/vo_xover.c @ 25317:7f3cb5408f28
Fixed VIDIX color bug that was introduced when Radeon VIDIX driver
was synchronized with vidix.sf.net.
The red color was saturating.
Corrected value fixes the issue and restore the color to the level
it used to have before synchronization.
Meaning of the value remains unknow but was retrieved from
register's value of a Radeon 9000 card, so it may need further testing.
Patch by Guillaume Lecerf (foxcore at gmail dot com)
author | ben |
---|---|
date | Mon, 10 Dec 2007 19:27:46 +0000 |
parents | e82ecde2cbd4 |
children | 46f0b4d34fa1 |
rev | line source |
---|---|
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
1 /* |
9570
602264261d3e
10L the comment header again. That's it when you stole someone else code ;)
albeu
parents:
9569
diff
changeset
|
2 XOver a general x11 vo for mplayer overlay drivers based on : |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
3 VIDIX accelerated overlay in a X window |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
4 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
5 (C) Alex Beregszaszi & Zoltan Ponekker & Nick Kurshev |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
6 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
7 WS window manager by Pontscho/Fresh! |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
8 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
9 Based on vo_gl.c and vo_vesa.c and vo_xmga.c (.so mastah! ;)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
10 */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
11 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
12 #include <stdio.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
13 #include <stdlib.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
14 #include <string.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
15 #include <math.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
16 #include <errno.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
17 #include <unistd.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
18 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
19 #include "config.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
20 #include "video_out.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
21 #include "video_out_internal.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
22 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
23 #include <X11/Xlib.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
24 #include <X11/Xutil.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
25 //#include <X11/keysym.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
26 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
27 #ifdef HAVE_XINERAMA |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
28 #include <X11/extensions/Xinerama.h> |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
29 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
30 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
31 #include "x11_common.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
32 #include "aspect.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
33 #include "mp_msg.h" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
34 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
35 #ifdef HAVE_NEW_GUI |
23077 | 36 #include "gui/interface.h" |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
37 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
38 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
39 |
25216 | 40 static const vo_info_t info = |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
41 { |
12783 | 42 "General X11 driver for overlay capable video output drivers", |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
43 "xover", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
44 "Albeu", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
45 "" |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
46 }; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
47 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
48 LIBVO_EXTERN(xover) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
49 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
50 #define UNUSED(x) ((void)(x)) /* Removes warning about unused arguments */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
51 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
52 /* X11 related variables */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
53 /* Colorkey handling */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
54 static XGCValues mGCV; |
10988 | 55 static int colorkey; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
56 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
57 /* Image parameters */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
58 static uint32_t image_width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
59 static uint32_t image_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
60 static uint32_t image_format; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
61 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
62 /* Window parameters */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
63 static uint32_t window_x, window_y; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
64 static uint32_t window_width, window_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
65 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
66 /* used by XGetGeometry & XTranslateCoordinates for moving/resizing window */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
67 static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
68 drwDepth, drwcX, drwcY, dwidth, dheight; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
69 |
25219
e82ecde2cbd4
Mark several uses of vo_functions_t as const to stop some of the current
reimar
parents:
25216
diff
changeset
|
70 static const vo_functions_t* sub_vo = NULL; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
71 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
72 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
73 static void set_window(int force_update) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
74 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
75 Window mRoot; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
76 if ( WinID ) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
77 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
78 XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
79 &drwHeight, &drwBorderWidth, &drwDepth); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
80 drwX = drwY = 0; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
81 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
82 XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
83 &drwcX, &drwcY, &mRoot); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
84 aspect(&dwidth,&dheight,A_NOZOOM); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
85 if (!vo_fs) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
86 mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
87 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
88 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
89 /* following stuff copied from vo_xmga.c */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
90 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
91 else |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
92 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
93 aspect(&dwidth,&dheight,A_NOZOOM); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
94 drwcX=drwX=vo_dx; drwcY=drwY=vo_dy; drwWidth=vo_dwidth; drwHeight=vo_dheight; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
95 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
96 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
97 #if X11_FULLSCREEN |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
98 if (vo_fs) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
99 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
100 aspect(&dwidth,&dheight,A_ZOOM); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
101 drwX = (vo_screenwidth - ((int)dwidth > vo_screenwidth ? vo_screenwidth : dwidth)) / 2; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
102 drwcX = drwX; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
103 drwY = (vo_screenheight - ((int)dheight > vo_screenheight ? vo_screenheight : dheight)) / 2; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
104 drwcY = drwY; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
105 drwWidth = ((int)dwidth > vo_screenwidth ? vo_screenwidth : dwidth); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
106 drwHeight = ((int)dheight > vo_screenheight ? vo_screenheight : dheight); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
107 mp_msg(MSGT_VO, MSGL_V, "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
108 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
109 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
110 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
111 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
112 vo_dwidth=drwWidth; vo_dheight=drwHeight; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
113 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
114 #ifdef HAVE_XINERAMA |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
115 if (XineramaIsActive(mDisplay)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
116 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
117 XineramaScreenInfo *screens; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
118 int num_screens; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
119 int i = 0; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
120 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
121 screens = XineramaQueryScreens(mDisplay, &num_screens); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
122 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
123 /* find the screen we are on */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
124 while (i<num_screens && |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
125 ((screens[i].x_org < (int)drwcX) || |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
126 (screens[i].y_org < (int)drwcY) || |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
127 (screens[i].x_org + screens[i].width >= (int)drwcX) || |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
128 (screens[i].y_org + screens[i].height >= (int)drwcY))) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
129 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
130 i++; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
131 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
132 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
133 if(i<num_screens) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
134 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
135 /* save the screen we are on */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
136 xinerama_screen = i; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
137 } else { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
138 /* oops.. couldnt find the screen we are on |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
139 * because the upper left corner left the |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
140 * visual range. assume we are still on the |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
141 * same screen |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
142 */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
143 i = xinerama_screen; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
144 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
145 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
146 /* set drwcX and drwcY to the right values */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
147 drwcX = drwcX - screens[i].x_org; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
148 drwcY = drwcY - screens[i].y_org; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
149 XFree(screens); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
150 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
151 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
152 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
153 if ( vo_panscan > 0.0f && vo_fs ) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
154 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
155 drwcX-=vo_panscan_x >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
156 drwcY-=vo_panscan_y >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
157 drwX-=vo_panscan_x >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
158 drwY-=vo_panscan_y >> 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
159 drwWidth+=vo_panscan_x; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
160 drwHeight+=vo_panscan_y; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
161 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
162 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
163 /* set new values in VIDIX */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
164 if (force_update || (window_x != drwcX) || (window_y != drwcY) || |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
165 (window_width != drwWidth) || (window_height != drwHeight)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
166 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
167 mp_win_t w; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
168 // do a backup of window coordinates |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
169 w.x = window_x = drwcX; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
170 w.y = window_y = drwcY; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
171 vo_dx = drwcX; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
172 vo_dy = drwcY; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
173 w.w = window_width = drwWidth; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
174 w.h = window_height = drwHeight; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
175 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
176 if(sub_vo->control(VOCTRL_XOVERLAY_SET_WIN,&w) != VO_TRUE) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
177 mp_msg(MSGT_VO, MSGL_ERR, "xvidx: set_overlay failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
178 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
179 mp_msg(MSGT_VO, MSGL_V, "[xvidix] window properties: pos: %dx%d, size: %dx%d\n", vo_dx, vo_dy, window_width, window_height); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
180 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
181 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
182 /* mDrawColorKey: */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
183 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
184 /* fill drawable with specified color */ |
10988 | 185 XSetBackground(mDisplay, vo_gc, 0L); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
186 XClearWindow( mDisplay,vo_window ); |
10988 | 187 XSetForeground(mDisplay, vo_gc, colorkey); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
188 XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
189 (vo_fs ? drwHeight - 1 : drwHeight)); |
11542 | 190 |
191 if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop); | |
192 | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
193 /* flush, update drawable */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
194 XFlush(mDisplay); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
195 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
196 return; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
197 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
198 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
199 /* connect to server, create and map window, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
200 * allocate colors and (shared) memory |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
201 */ |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
202 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
203 uint32_t d_height, uint32_t flags, char *title, uint32_t format) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
204 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
205 XVisualInfo vinfo; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
206 // XSizeHints hint; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
207 XSetWindowAttributes xswa; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
208 unsigned long xswamask; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
209 XWindowAttributes attribs; |
10988 | 210 int window_depth, r, g, b; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
211 mp_colorkey_t colork; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
212 char _title[255]; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
213 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
214 sprintf(_title,"MPlayer %s X11 Overlay",sub_vo->info->name); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
215 title = _title; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
216 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
217 panscan_init(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
218 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
219 image_height = height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
220 image_width = width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
221 image_format = format; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
222 vo_mouse_autohide=1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
223 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
224 aspect_save_orig(width, height); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
225 aspect_save_prescale(d_width, d_height); |
18116 | 226 update_xinerama_info(); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
227 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
228 window_width = d_width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
229 window_height = d_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
230 |
10988 | 231 r = (vo_colorkey & 0x00ff0000) >> 16; |
232 g = (vo_colorkey & 0x0000ff00) >> 8; | |
233 b = vo_colorkey & 0x000000ff; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
234 switch(vo_depthonscreen) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
235 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
236 case 32: |
10988 | 237 colorkey = vo_colorkey; |
238 break; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
239 case 24: |
10988 | 240 colorkey = vo_colorkey & 0x00ffffff; |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
241 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
242 case 16: |
10988 | 243 colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
244 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
245 case 15: |
10988 | 246 colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
247 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
248 default: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
249 mp_msg(MSGT_VO, MSGL_ERR, "Sorry, this (%d) color depth is not supported\n", |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
250 vo_depthonscreen); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
251 } |
13946 | 252 mp_msg(MSGT_VO, MSGL_V, "Using colorkey: %x\n", colorkey); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
253 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
254 aspect(&d_width, &d_height, A_NOZOOM); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
255 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
256 vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2; |
18116 | 257 vo_dx += xinerama_x; |
258 vo_dy += xinerama_y; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
259 vo_dwidth=d_width; vo_dheight=d_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
260 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
261 #ifdef HAVE_NEW_GUI |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
262 if(use_gui) guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
263 else |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
264 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
265 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
266 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
267 #ifdef X11_FULLSCREEN |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
268 if ( ( flags&VOFLAG_FULLSCREEN )||(flags & VOFLAG_SWSCALE) ) aspect(&d_width, &d_height, A_ZOOM); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
269 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
270 dwidth = d_width; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
271 dheight = d_height; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
272 /* Make the window */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
273 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
274 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
275 /* from vo_x11 */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
276 window_depth = attribs.depth; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
277 if ((window_depth != 15) && (window_depth != 16) && (window_depth != 24) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
278 && (window_depth != 32)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
279 window_depth = 24; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
280 XMatchVisualInfo(mDisplay, mScreen, window_depth, TrueColor, &vinfo); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
281 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
282 xswa.background_pixel = BlackPixel(mDisplay, mScreen); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
283 xswa.border_pixel = 0; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
284 xswa.colormap = XCreateColormap(mDisplay, RootWindow(mDisplay, mScreen), |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
285 vinfo.visual, AllocNone); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
286 xswa.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask | PropertyChangeMask | |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
287 ((WinID==0)?0:(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
288 xswamask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
289 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
290 if (WinID >= 0) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
291 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
292 vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay, mScreen); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
293 if ( WinID ) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
294 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
295 XUnmapWindow(mDisplay, vo_window); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
296 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
297 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask ); |
15540 | 298 XMapWindow(mDisplay, vo_window); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
299 } else XSelectInput( mDisplay,vo_window,ExposureMask ); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
300 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
301 else |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
302 { |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23616
diff
changeset
|
303 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:
23616
diff
changeset
|
304 window_width, window_height, flags, |
23822 | 305 xswa.colormap, "xvidix", title); |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23616
diff
changeset
|
306 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
307 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
308 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
309 if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc ); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
310 vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
311 #ifdef HAVE_NEW_GUI |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
312 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
313 #endif |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
314 |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
13946
diff
changeset
|
315 if ( ( !WinID )&&( flags&VOFLAG_FULLSCREEN ) ) { vo_dx=0; vo_dy=0; vo_dwidth=vo_screenwidth; vo_dheight=vo_screenheight; vo_fs=1; } |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
316 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
317 if(sub_vo->config(image_width,image_height,vo_dwidth,vo_dheight, |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
318 flags | VOFLAG_XOVERLAY_SUB_VO,NULL,format)) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
319 mp_msg(MSGT_VO, MSGL_ERR, "xover: sub vo config failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
320 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
321 } |
10988 | 322 colork.x11 = colorkey; |
323 colork.r = r; | |
324 colork.g = g; | |
325 colork.b = b; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
326 if(sub_vo->control(VOCTRL_XOVERLAY_SET_COLORKEY,&colork) != VO_TRUE) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
327 mp_msg(MSGT_VO, MSGL_WARN, "xover: set_colorkey failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
328 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
329 set_window(1); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
330 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
331 XSync(mDisplay, False); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
332 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
333 panscan_calc(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
334 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
335 return(0); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
336 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
337 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
338 static void check_events(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
339 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
340 const int event = vo_x11_check_events(mDisplay); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
341 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
342 if ((event & VO_EVENT_RESIZE) || (event & VO_EVENT_EXPOSE)) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
343 set_window(0); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
344 sub_vo->check_events(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
345 return; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
346 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
347 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
348 /* draw_osd, flip_page, draw_slice, draw_frame should be |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
349 overwritten with vidix functions (vosub_vidix.c) */ |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
350 static void draw_osd(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
351 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
352 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo draw_osd!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
353 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
354 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
355 static void flip_page(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
356 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
357 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo flip_page!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
358 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
359 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
360 static int draw_slice(uint8_t *src[], int stride[], |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
361 int w, int h, int x, int y) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
362 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
363 UNUSED(src); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
364 UNUSED(stride); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
365 UNUSED(w); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
366 UNUSED(h); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
367 UNUSED(x); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
368 UNUSED(y); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
369 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo draw_slice!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
370 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
371 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
372 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
373 static int draw_frame(uint8_t *src[]) |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
374 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
375 UNUSED(src); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
376 mp_msg(MSGT_VO, MSGL_FATAL, "xover error: didn't used sub vo draw_frame!\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
377 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
378 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
379 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
380 static void uninit(void) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
381 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
382 if(!vo_config_count) return; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
383 if(sub_vo) sub_vo->uninit(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
384 sub_vo = NULL; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
385 vo_x11_uninit(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
386 // Restore our callbacks |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
387 video_out_xover.draw_frame = draw_frame; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
388 video_out_xover.draw_slice = draw_slice; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
389 video_out_xover.flip_page = flip_page; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
390 video_out_xover.draw_osd = draw_osd; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
391 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
392 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
393 static int preinit(const char *arg) |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
394 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
395 int i; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
396 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
397 if(!arg) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
398 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay need a subdriver\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
399 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
400 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
401 |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
402 for(i = 0 ; video_out_drivers[i] != NULL ; i++) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
403 if(!strcmp(video_out_drivers[i]->info->short_name,arg) && |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
404 strcmp(video_out_drivers[i]->info->short_name,"xover")) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
405 break; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
406 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
407 if(!video_out_drivers[i]) { |
10718 | 408 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay: Subdriver %s not found\n", arg); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
409 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
410 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
411 if(video_out_drivers[i]->control(VOCTRL_XOVERLAY_SUPPORT,NULL) != VO_TRUE) { |
10718 | 412 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay: %s doesn't support XOverlay\n", arg); |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
413 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
414 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
415 // X11 init |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
416 if (!vo_init()) return VO_FALSE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
417 if(video_out_drivers[i]->preinit(NULL)) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
418 mp_msg(MSGT_VO, MSGL_ERR, "VO XOverlay: Subvo init failed\n"); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
419 return 1; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
420 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
421 sub_vo = video_out_drivers[i]; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
422 // Setup the sub vo callbacks |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
423 video_out_xover.draw_frame = sub_vo->draw_frame; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
424 video_out_xover.draw_slice = sub_vo->draw_slice; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
425 video_out_xover.flip_page = sub_vo->flip_page; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
426 video_out_xover.draw_osd = sub_vo->draw_osd; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
427 return 0; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
428 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
429 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
430 static int control(uint32_t request, void *data, ...) |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
431 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
432 if(!sub_vo) return VO_ERROR; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
433 switch (request) { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
434 case VOCTRL_GUISUPPORT: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
435 return VO_TRUE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
436 case VOCTRL_GET_PANSCAN: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
437 if ( !vo_config_count || !vo_fs ) return VO_FALSE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
438 return VO_TRUE; |
11542 | 439 case VOCTRL_ONTOP: |
440 vo_x11_ontop(); | |
441 return VO_TRUE; | |
9569
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
442 case VOCTRL_FULLSCREEN: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
443 vo_x11_fullscreen(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
444 case VOCTRL_SET_PANSCAN: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
445 if ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
446 { |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
447 panscan_calc(); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
448 set_window(0); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
449 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
450 return VO_TRUE; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
451 default: |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
452 // Safe atm bcs nothing use more than 1 arg |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
453 return sub_vo->control(request,data); |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
454 } |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
455 return VO_NOTIMPL; |
894d02a6469e
vo_xover is a new vo that should make easy to have x11 support for
albeu
parents:
diff
changeset
|
456 } |