Mercurial > mplayer.hg
annotate libvo/vo_xvidix.c @ 4978:ae66f5ca2225
small bugfix.
author | pontscho |
---|---|
date | Thu, 07 Mar 2002 14:16:43 +0000 |
parents | 79b753e2e84a |
children | bfc652fc7f43 |
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" | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
34 #include "../vidix/vidixlib.h" |
4123 | 35 |
36 LIBVO_EXTERN(xvidix) | |
37 | |
38 static vo_info_t vo_info = | |
39 { | |
40 "X11 (VIDIX)", | |
41 "xvidix", | |
42 "Alex Beregszaszi", | |
43 "" | |
44 }; | |
45 | |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
46 #define UNUSED(x) ((void)(x)) /* Removes warning about unused arguments */ |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
47 |
4123 | 48 /* X11 related variables */ |
49 static int X_already_started = 0; | |
50 | |
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; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
53 static uint32_t fgColor; |
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; | |
4434 | 58 static vo_tune_info_t vtune; |
4123 | 59 |
60 /* Image parameters */ | |
61 static uint32_t image_width; | |
62 static uint32_t image_height; | |
63 static uint32_t image_format; | |
64 static uint32_t image_depth; | |
65 | |
66 /* Window parameters */ | |
67 static uint32_t window_x, window_y; | |
68 static uint32_t window_width, window_height; | |
69 | |
4363 | 70 /* used by XGetGeometry & XTranslateCoordinates for moving/resizing window */ |
4123 | 71 static Window mRoot; |
72 static uint32_t drwX, drwY, drwWidth, drwHeight, drwBorderWidth, | |
73 drwDepth, drwcX, drwcY, dwidth, dheight, mFullscreen; | |
74 | |
4434 | 75 static void set_window(int force_update,const vo_tune_info_t *info) |
4123 | 76 { |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
77 #ifdef HAVE_NEW_GUI |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
78 if (vo_window != None) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
79 { |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
80 if ((vo_dwidth == vo_screenwidth) && (vo_dheight == vo_screenheight)) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
81 { |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
82 mFullscreen = 1; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
83 dwidth = vo_screenwidth; |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
84 dheight = vo_screenwidth * vo_dheight / vo_dwidth; |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
85 } |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
86 else |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
87 { |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
88 mFullscreen = 0; |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
89 dwidth = vo_dwidth; |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
90 dheight = vo_dheight; |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
91 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
92 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
93 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
94 |
4805 | 95 XGetGeometry(mDisplay, vo_window, &mRoot, &drwX, &drwY, &drwWidth, |
4123 | 96 &drwHeight, &drwBorderWidth, &drwDepth); |
97 drwX = drwY = 0; | |
4805 | 98 XTranslateCoordinates(mDisplay, vo_window, mRoot, 0, 0, |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
99 &drwcX, &drwcY, &mRoot); |
4123 | 100 |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
101 if (!mFullscreen) |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
102 mp_msg(MSGT_VO, MSGL_V, "[xvidix] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
103 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); |
4123 | 104 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
105 /* following stuff copied from vo_xmga.c */ |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
106 aspect(&dwidth, &dheight, A_NOZOOM); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
107 #if X11_FULLSCREEN |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
108 if (mFullscreen) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
109 { |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
110 aspect(&dwidth, &dheight, A_ZOOM); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
111 drwX = (vo_screenwidth - (dwidth > vo_screenwidth ? vo_screenwidth : dwidth)) / 2; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
112 drwcX += drwX; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
113 drwY = (vo_screenheight - (dheight > vo_screenheight ? vo_screenheight : dheight)) / 2; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
114 drwcY += drwY; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
115 drwWidth = (dwidth > vo_screenwidth ? vo_screenwidth : dwidth); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
116 drwHeight = (dheight > vo_screenheight ? vo_screenheight : dheight); |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
117 mp_msg(MSGT_VO, MSGL_V, "[xvidix-fs] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n", |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
118 drwcX, drwcY, drwX, drwY, drwWidth, drwHeight); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
119 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
120 #endif |
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 #ifdef HAVE_XINERAMA |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
123 if (XineramaIsActive(mDisplay)) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
124 { |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
125 XineramaScreenInfo *screens; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
126 int num_screens; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
127 int i = 0; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
128 |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
129 screens = XineramaQueryScreens(mDisplay, &num_screens); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
130 |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
131 /* find the screen we are on */ |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
132 while ((screens[i].x_org <= drwcX) || (screens[i].y_org <= drwcY) || |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
133 (screens[i].x_org + screens[i].width >= drwcX) || |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
134 (screens[i].y_org + screens[i].height >= drwcY)) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
135 i++; |
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 /* set drwcX and drwcY to the right values */ |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
138 drwcX = drwcX - screens[i].x_org; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
139 drwcY = drwcY - screens[i].y_org; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
140 XFree(screens); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
141 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
142 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
143 |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
144 /* set new values in VIDIX */ |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
145 if (force_update || (window_x != drwcX) || (window_y != drwcY) || |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
146 (window_width != drwWidth) || (window_height != drwHeight)) |
4123 | 147 { |
4194 | 148 window_x = drwcX; |
149 window_y = drwcY; | |
150 window_width = drwWidth; | |
151 window_height = drwHeight; | |
4198
7e2bf04c9a7c
added vidix_start() and vidix_stop() for better runtime-resize support ;)
alex
parents:
4194
diff
changeset
|
152 |
4123 | 153 /* FIXME: implement runtime resize/move if possible, this way is very ugly! */ |
4198
7e2bf04c9a7c
added vidix_start() and vidix_stop() for better runtime-resize support ;)
alex
parents:
4194
diff
changeset
|
154 vidix_stop(); |
4123 | 155 if (vidix_init(image_width, image_height, window_x, window_y, |
4434 | 156 window_width, window_height, image_format, vo_depthonscreen, |
157 vo_screenwidth, vo_screenheight,info) != 0) | |
4123 | 158 { |
159 mp_msg(MSGT_VO, MSGL_FATAL, "Can't initialize VIDIX driver: %s: %s\n", | |
160 vidix_name, strerror(errno)); | |
161 vidix_term(); | |
162 uninit(); | |
163 exit(1); /* !!! */ | |
164 } | |
4198
7e2bf04c9a7c
added vidix_start() and vidix_stop() for better runtime-resize support ;)
alex
parents:
4194
diff
changeset
|
165 vidix_start(); |
4123 | 166 } |
167 | |
168 mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] window properties: pos: %dx%d, size: %dx%d\n", | |
169 window_x, window_y, window_width, window_height); | |
170 | |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
171 /* mDrawColorKey: */ |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
172 |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
173 /* fill drawable with specified color */ |
4805 | 174 XSetBackground( mDisplay,vo_gc,0 ); |
175 XClearWindow( mDisplay,vo_window ); | |
176 XSetForeground(mDisplay, vo_gc, fgColor); | |
177 XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, | |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
178 (mFullscreen ? drwHeight - 1 : drwHeight)); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
179 /* flush, update drawable */ |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
180 XFlush(mDisplay); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
181 |
4123 | 182 return; |
183 } | |
184 | |
185 /* connect to server, create and map window, | |
186 * allocate colors and (shared) memory | |
187 */ | |
4433 | 188 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, |
189 uint32_t d_height, uint32_t flags, char *title, uint32_t format,const vo_tune_info_t *info) | |
4123 | 190 { |
191 XVisualInfo vinfo; | |
192 XSizeHints hint; | |
193 XSetWindowAttributes xswa; | |
194 unsigned long xswamask; | |
195 XWindowAttributes attribs; | |
196 int window_depth; | |
4125 | 197 |
198 // if (title) | |
199 // free(title); | |
200 title = strdup("MPlayer VIDIX X11 Overlay"); | |
4123 | 201 |
202 image_height = height; | |
203 image_width = width; | |
204 image_format = format; | |
4459 | 205 |
4123 | 206 if (IMGFMT_IS_RGB(format)) |
207 { | |
208 image_depth = IMGFMT_RGB_DEPTH(format); | |
209 } | |
210 else | |
211 if (IMGFMT_IS_BGR(format)) | |
212 { | |
213 image_depth = IMGFMT_BGR_DEPTH(format); | |
214 } | |
215 else | |
216 switch(format) | |
217 { | |
218 case IMGFMT_IYUV: | |
219 case IMGFMT_I420: | |
220 case IMGFMT_YV12: | |
221 image_depth = 12; | |
222 break; | |
4441
90814d64a840
removed obosolete Terminate_Display_Process. using vo_x11_uninit. support UYVY format
alex
parents:
4434
diff
changeset
|
223 case IMGFMT_UYVY: |
4123 | 224 case IMGFMT_YUY2: |
225 image_depth = 16; | |
226 break; | |
227 default: | |
4459 | 228 image_depth = 16; |
4441
90814d64a840
removed obosolete Terminate_Display_Process. using vo_x11_uninit. support UYVY format
alex
parents:
4434
diff
changeset
|
229 mp_msg(MSGT_VO, MSGL_FATAL, "Unknown image format: %s\n", |
4123 | 230 vo_format_name(format)); |
4459 | 231 break; |
4123 | 232 } |
233 | |
234 if (X_already_started) | |
235 return(-1); | |
236 if (!vo_init()) | |
237 return(-1); | |
238 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
239 aspect_save_orig(width, height); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
240 aspect_save_prescale(d_width, d_height); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
241 aspect_save_screenres(vo_screenwidth, vo_screenheight); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
242 |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
243 window_x = 0; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
244 window_y = 0; |
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 |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
248 mFullscreen = flags&0x01; |
4123 | 249 |
250 X_already_started++; | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
251 |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
252 /* from xmga.c */ |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
253 switch(vo_depthonscreen) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
254 { |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
255 case 32: |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
256 case 24: |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
257 fgColor = 0x00ff00ffL; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
258 break; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
259 case 16: |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
260 fgColor = 0xf81fL; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
261 break; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
262 case 15: |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
263 fgColor = 0x7c1fL; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
264 break; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
265 default: |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
266 mp_msg(MSGT_VO, MSGL_ERR, "Sorry, this (%d) color depth is not supported\n", |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
267 vo_depthonscreen); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
268 } |
4123 | 269 |
270 aspect(&d_width, &d_height, A_NOZOOM); | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
271 |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
272 #ifdef HAVE_NEW_GUI |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
273 if (vo_window == None) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
274 { |
4123 | 275 #endif |
276 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
277 #ifdef X11_FULLSCREEN |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
278 if (mFullscreen) /* fullscreen */ |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
279 { |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
280 if (flags & 0x04) |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
281 { |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
282 aspect(&d_width, &d_height, A_ZOOM); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
283 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
284 else |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
285 { |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
286 d_width = vo_screenwidth; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
287 d_height = vo_screenheight; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
288 } |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
289 } |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
290 #endif |
4123 | 291 |
292 /* Make the window */ | |
293 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs); | |
294 | |
295 /* from vo_x11 */ | |
296 window_depth = attribs.depth; | |
297 if ((window_depth != 15) && (window_depth != 16) && (window_depth != 24) | |
298 && (window_depth != 32)) | |
299 window_depth = 24; | |
300 XMatchVisualInfo(mDisplay, mScreen, window_depth, TrueColor, &vinfo); | |
301 | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
302 xswa.background_pixel = BlackPixel(mDisplay, mScreen); |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
303 xswa.border_pixel = 0; |
4123 | 304 xswa.colormap = XCreateColormap(mDisplay, RootWindow(mDisplay, mScreen), |
305 vinfo.visual, AllocNone); | |
4784 | 306 xswa.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask; |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
307 xswamask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; |
4123 | 308 |
309 if (WinID >= 0) | |
310 { | |
4805 | 311 vo_window = WinID ? ((Window)WinID) : RootWindow(mDisplay, mScreen); |
312 XUnmapWindow(mDisplay, vo_window); | |
313 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa); | |
4123 | 314 } |
315 else | |
4805 | 316 vo_window = XCreateWindow(mDisplay, RootWindow(mDisplay, mScreen), |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
317 window_x, window_y, window_width, window_height, xswa.border_pixel, |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
318 vinfo.depth, InputOutput, vinfo.visual, xswamask, &xswa); |
4123 | 319 |
4805 | 320 vo_x11_classhint(mDisplay, vo_window, "xvidix"); |
321 vo_hidecursor(mDisplay, vo_window); | |
4123 | 322 |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
323 #ifdef X11_FULLSCREEN |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
324 if (mFullscreen) /* fullscreen */ |
4805 | 325 vo_x11_decoration(mDisplay, vo_window, 0); |
4125 | 326 #endif |
4123 | 327 |
4805 | 328 XGetNormalHints(mDisplay, vo_window, &hint); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
329 hint.x = window_x; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
330 hint.y = window_y; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
331 hint.base_width = hint.width = window_width; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
332 hint.base_height = hint.height = window_height; |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
333 hint.flags = USPosition | USSize; |
4805 | 334 XSetNormalHints(mDisplay, vo_window, &hint); |
4762 | 335 |
4805 | 336 XStoreName(mDisplay, vo_window, title); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
337 /* Map window. */ |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
338 |
4805 | 339 XMapWindow(mDisplay, vo_window); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
340 #ifdef HAVE_XINERAMA |
4805 | 341 vo_x11_xinerama_move(mDisplay, vo_window); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
342 #endif |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
343 |
4805 | 344 vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &mGCV); |
4123 | 345 |
4805 | 346 XSelectInput( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | ButtonPressMask | ButtonReleaseMask ); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
347 #ifdef HAVE_NEW_GUI |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
348 } |
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
349 #endif |
4123 | 350 |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
351 mp_msg(MSGT_VO, MSGL_INFO, "[xvidix] image properties: %dx%d depth: %d\n", |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
352 image_width, image_height, image_depth); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
353 |
4255 | 354 if (vidix_grkey_support()) |
355 { | |
356 vidix_grkey_get(&gr_key); | |
357 gr_key.key_op = KEYS_PUT; | |
358 gr_key.ckey.op = CKEY_TRUE; | |
359 gr_key.ckey.red = 255; | |
360 gr_key.ckey.green = 0; | |
361 gr_key.ckey.blue = 255; | |
362 vidix_grkey_set(&gr_key); | |
363 } | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
364 |
4434 | 365 set_window(1,info); |
366 if(info) memcpy(&vtune,info,sizeof(vo_tune_info_t)); | |
367 else memset(&vtune,0,sizeof(vo_tune_info_t)); | |
4805 | 368 XFlush(mDisplay); |
369 XSync(mDisplay, False); | |
4123 | 370 |
371 saver_off(mDisplay); /* turning off screen saver */ | |
372 | |
373 return(0); | |
374 } | |
375 | |
376 static const vo_info_t *get_info(void) | |
377 { | |
378 return(&vo_info); | |
379 } | |
380 | |
381 static void check_events(void) | |
382 { | |
383 const int event = vo_x11_check_events(mDisplay); | |
4125 | 384 |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
385 if ((event & VO_EVENT_RESIZE) || (event & VO_EVENT_EXPOSE)) |
4434 | 386 set_window(0,&vtune); |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
387 |
4125 | 388 return; |
4123 | 389 } |
390 | |
391 /* draw_osd, flip_page, draw_slice, draw_frame should be | |
392 overwritten with vidix functions (vosub_vidix.c) */ | |
393 static void draw_osd(void) | |
394 { | |
395 mp_msg(MSGT_VO, MSGL_FATAL, "[xvidix] error: didn't used vidix draw_osd!\n"); | |
396 return; | |
397 } | |
398 | |
399 static void flip_page(void) | |
400 { | |
401 mp_msg(MSGT_VO, MSGL_FATAL, "[xvidix] error: didn't used vidix flip_page!\n"); | |
402 return; | |
403 } | |
404 | |
405 static uint32_t draw_slice(uint8_t *src[], int stride[], | |
406 int w, int h, int x, int y) | |
407 { | |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
408 UNUSED(src); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
409 UNUSED(stride); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
410 UNUSED(w); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
411 UNUSED(h); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
412 UNUSED(x); |
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
413 UNUSED(y); |
4123 | 414 mp_msg(MSGT_VO, MSGL_FATAL, "[xvidix] error: didn't used vidix draw_slice!\n"); |
415 return(0); | |
416 } | |
417 | |
418 static uint32_t draw_frame(uint8_t *src[]) | |
419 { | |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
420 UNUSED(src); |
4123 | 421 mp_msg(MSGT_VO, MSGL_FATAL, "[xvidix] error: didn't used vidix draw_frame!\n"); |
422 return(0); | |
423 } | |
424 | |
425 static uint32_t query_format(uint32_t format) | |
426 { | |
4363 | 427 return(vidix_query_fourcc(format)); |
4123 | 428 } |
429 | |
430 static void uninit(void) | |
431 { | |
4241
817742049fa0
updated based vo_xmga, using colorkey, working with gui, fixed xinerama and window moving/resizing
alex
parents:
4198
diff
changeset
|
432 vidix_term(); |
4441
90814d64a840
removed obosolete Terminate_Display_Process. using vo_x11_uninit. support UYVY format
alex
parents:
4434
diff
changeset
|
433 |
4316 | 434 saver_on(mDisplay); /* screen saver back on */ |
4805 | 435 vo_x11_uninit(mDisplay, vo_window); |
4271
2c7e6c87fb6f
reworked, picture moves when window moved, fullscreen working with gui, fixed some annoying bugs
alex
parents:
4255
diff
changeset
|
436 } |
4352 | 437 |
438 static uint32_t preinit(const char *arg) | |
439 { | |
4363 | 440 if (arg) |
441 vidix_name = strdup(arg); | |
442 else | |
443 { | |
444 mp_msg(MSGT_VO, MSGL_INFO, "No vidix driver name provided, probing available ones!\n"); | |
445 vidix_name = NULL; | |
446 } | |
447 | |
448 if (vidix_preinit(vidix_name, &video_out_xvidix) != 0) | |
449 return(1); | |
450 | |
451 return(0); | |
4352 | 452 } |
453 | |
4596 | 454 static uint32_t control(uint32_t request, void *data, ...) |
4352 | 455 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4570
diff
changeset
|
456 switch (request) { |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4570
diff
changeset
|
457 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4570
diff
changeset
|
458 return query_format(*((uint32_t*)data)); |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4570
diff
changeset
|
459 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4570
diff
changeset
|
460 return VO_NOTIMPL; |
4352 | 461 } |