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