Mercurial > mplayer.hg
annotate libvo/vo_xmga.c @ 36517:5d3f93051de9
Remove empty draw_slice and draw_frame stubs.
Long term, draw_frame should be removed completely.
author | reimar |
---|---|
date | Sat, 18 Jan 2014 21:39:07 +0000 |
parents | a93891202051 |
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 } |