Mercurial > mplayer.hg
annotate libvo/vo_xmga.c @ 36963:e539d330c7be
Remove unnecessary bounds checks in Win32 GUI.
The checks that the rendered potmeter button
doesn't exceed the bounds is not necessary as
the item value is already limited within the
range of 0 to 100.
Patch by Hans-Dieter Kosch, hdkosch kabelbw de.
author | ib |
---|---|
date | Mon, 24 Mar 2014 12:52:01 +0000 |
parents | 5d3f93051de9 |
children |
rev | line source |
---|---|
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
1 /* |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
2 * copyright (C) 2001 Zoltan Ponekker |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
3 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
4 * This file is part of MPlayer. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
5 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
6 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
8 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
9 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
10 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
11 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
14 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
15 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
16 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
19 */ |
100 | 20 |
21 //#define SHOW_TIME | |
1 | 22 |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <string.h> | |
26 | |
27 #include "config.h" | |
34174
a93891202051
Add missing mp_msg.h #includes, remove some unnecessary ones.
diego
parents:
32467
diff
changeset
|
28 #include "mp_msg.h" |
1 | 29 #include "video_out.h" |
36517 | 30 #define NO_DRAW_FRAME |
1 | 31 #include "video_out_internal.h" |
32 | |
33 | |
34 #include <sys/ioctl.h> | |
35 #include <unistd.h> | |
36 #include <fcntl.h> | |
37 #include <sys/mman.h> | |
38 | |
39 #include "drivers/mga_vid.h" | |
40 | |
41 #include <X11/Xlib.h> | |
42 #include <X11/Xutil.h> | |
43 #include <errno.h> | |
44 | |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
45 #ifdef CONFIG_XINERAMA |
4017 | 46 #include <X11/extensions/Xinerama.h> |
47 #endif | |
48 | |
31 | 49 #include "x11_common.h" |
32467 | 50 #include "sub/sub.h" |
2057 | 51 #include "aspect.h" |
31 | 52 |
182 | 53 #ifdef SHOW_TIME |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13056
diff
changeset
|
54 #include "osdep/timer.h" |
12582 | 55 static unsigned int timer = 0; |
56 static unsigned int timerd = 0; | |
100 | 57 #endif |
58 | |
25216 | 59 static const vo_info_t info = { |
12582 | 60 "Matrox G200/G4x0/G550 overlay in X11 window (using /dev/mga_vid)", |
61 "xmga", | |
62 "Zoltan Ponekker <pontscho@makacs.poliod.hu>", | |
63 "" | |
1 | 64 }; |
65 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
66 const LIBVO_EXTERN(xmga) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8017
diff
changeset
|
67 |
12582 | 68 static uint32_t mDepth; |
69 static XWindowAttributes attribs; | |
10988 | 70 static int colorkey; |
1 | 71 |
12582 | 72 static uint32_t mvHeight; |
73 static uint32_t mvWidth; | |
1 | 74 |
12582 | 75 static XSetWindowAttributes xWAttribs; |
1 | 76 |
25962 | 77 static int initialized = 0; |
6311
da2dda48b7ec
add mute support ( step 1 ) and fixed panscan bugs (1000l for me)
pontscho
parents:
6307
diff
changeset
|
78 |
4981 | 79 #define VO_XMGA |
31364
317649676214
Rename libvo/mga_common.c --> libvo/mga_template.c.
diego
parents:
28446
diff
changeset
|
80 #include "mga_template.c" |
4981 | 81 #undef VO_XMGA |
1 | 82 |
12582 | 83 static void mDrawColorKey(void) |
1 | 84 { |
12582 | 85 XSetBackground(mDisplay, vo_gc, 0); |
86 XClearWindow(mDisplay, vo_window); | |
87 XSetForeground(mDisplay, vo_gc, colorkey); | |
88 XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, | |
89 (vo_fs ? drwHeight - 1 : drwHeight)); | |
90 XFlush(mDisplay); | |
1 | 91 } |
92 | |
31 | 93 static void check_events(void) |
1 | 94 { |
12582 | 95 int e = vo_x11_check_events(mDisplay); |
96 | |
32370
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
97 if (e & (VO_EVENT_RESIZE | VO_EVENT_MOVE)) |
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
98 set_window(); |
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
99 if (e & (VO_EVENT_RESIZE | VO_EVENT_EXPOSE)) |
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
100 mDrawColorKey(); |
1 | 101 } |
102 | |
12582 | 103 static void flip_page(void) |
104 { | |
182 | 105 #ifdef SHOW_TIME |
100 | 106 unsigned int t; |
12582 | 107 |
108 t = GetTimer(); | |
109 mp_msg(MSGT_VO, MSGL_STATUS, | |
110 " [timer: %08X diff: %6d dd: %6d ] \n", t, t - timer, | |
111 (t - timer) - timerd); | |
112 timerd = t - timer; | |
113 timer = t; | |
182 | 114 #endif |
100 | 115 |
12582 | 116 vo_mga_flip_page(); |
31 | 117 } |
1 | 118 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
119 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
12582 | 120 uint32_t d_height, uint32_t flags, char *title, |
121 uint32_t format) | |
1 | 122 { |
12582 | 123 XVisualInfo vinfo; |
124 unsigned long xswamask; | |
125 int r, g, b; | |
126 | |
127 if (mga_init(width, height, format)) | |
128 return -1; // ioctl errors? | |
1 | 129 |
12582 | 130 mvWidth = width; |
131 mvHeight = height; | |
1 | 132 |
12582 | 133 r = (vo_colorkey & 0x00ff0000) >> 16; |
134 g = (vo_colorkey & 0x0000ff00) >> 8; | |
135 b = vo_colorkey & 0x000000ff; | |
136 switch (vo_depthonscreen) | |
137 { | |
138 case 32: | |
139 colorkey = vo_colorkey; | |
140 break; | |
141 case 24: | |
142 colorkey = vo_colorkey & 0x00ffffff; | |
143 break; | |
144 case 16: | |
145 colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); | |
146 break; | |
147 case 15: | |
148 colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); | |
149 break; | |
150 default: | |
151 mp_msg(MSGT_VO, MSGL_ERR, | |
152 "Sorry, this (%d) color depth not supported.\n", | |
153 vo_depthonscreen); | |
154 return -1; | |
155 } | |
13946 | 156 mp_msg(MSGT_VO, MSGL_V, "Using colorkey: %x\n", colorkey); |
1 | 157 |
25962 | 158 initialized = 1; |
1 | 159 |
12582 | 160 XGetWindowAttributes(mDisplay, mRootWin, &attribs); |
161 mDepth = attribs.depth; | |
162 if (mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32) | |
163 mDepth = 24; | |
164 XMatchVisualInfo(mDisplay, mScreen, mDepth, TrueColor, &vinfo); | |
165 xWAttribs.colormap = | |
166 XCreateColormap(mDisplay, mRootWin, vinfo.visual, AllocNone); | |
167 xWAttribs.background_pixel = 0; | |
168 xWAttribs.border_pixel = 0; | |
27927
6f199f065e15
Factor common code like -wid handling, vo_gc creation etc. out into
reimar
parents:
27903
diff
changeset
|
169 xswamask = CWBackPixel | CWBorderPixel | CWColormap; |
1 | 170 |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
171 vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, d_width, d_height, |
23822 | 172 flags, xWAttribs.colormap, "xmga", title); |
24348
f96e42d494f9
Fix borders for xmga broken by r23675. Tested by Diego.
reimar
parents:
23822
diff
changeset
|
173 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xWAttribs); |
7679 | 174 |
12582 | 175 mga_vid_config.colkey_on = 1; |
176 mga_vid_config.colkey_red = r; | |
177 mga_vid_config.colkey_green = g; | |
178 mga_vid_config.colkey_blue = b; | |
179 | |
180 set_window(); // set up mga_vid_config.dest_width etc | |
181 | |
182 XSync(mDisplay, False); | |
183 | |
184 ioctl(f, MGA_VID_ON, 0); | |
185 | |
186 return 0; | |
1 | 187 } |
188 | |
12582 | 189 static void uninit(void) |
190 { | |
191 mp_msg(MSGT_VO, MSGL_V, "vo: uninit!\n"); | |
192 mga_uninit(); | |
25962 | 193 if (!initialized) |
12582 | 194 return; // no window? |
25962 | 195 initialized = 0; |
12582 | 196 vo_x11_uninit(); // destroy the window |
1 | 197 } |