Mercurial > mplayer.hg
annotate libvo/vo_xmga.c @ 35418:cedb0ba2b5c6
Move the code to set guiInfo's Track, Chapter and Angle start values.
Set them before checking whether there is any media opened, because
with no media opened we clear the counters.
author | ib |
---|---|
date | Thu, 29 Nov 2012 14:11:03 +0000 |
parents | a93891202051 |
children | 5d3f93051de9 |
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" |
30 #include "video_out_internal.h" | |
31 | |
32 | |
33 #include <sys/ioctl.h> | |
34 #include <unistd.h> | |
35 #include <fcntl.h> | |
36 #include <sys/mman.h> | |
37 | |
38 #include "drivers/mga_vid.h" | |
39 | |
40 #include <X11/Xlib.h> | |
41 #include <X11/Xutil.h> | |
42 #include <errno.h> | |
43 | |
27377
d58d06eafe83
Change a bunch of X11-specific preprocessor directives.
diego
parents:
27343
diff
changeset
|
44 #ifdef CONFIG_XINERAMA |
4017 | 45 #include <X11/extensions/Xinerama.h> |
46 #endif | |
47 | |
31 | 48 #include "x11_common.h" |
32467 | 49 #include "sub/sub.h" |
2057 | 50 #include "aspect.h" |
31 | 51 |
182 | 52 #ifdef SHOW_TIME |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13056
diff
changeset
|
53 #include "osdep/timer.h" |
12582 | 54 static unsigned int timer = 0; |
55 static unsigned int timerd = 0; | |
100 | 56 #endif |
57 | |
25216 | 58 static const vo_info_t info = { |
12582 | 59 "Matrox G200/G4x0/G550 overlay in X11 window (using /dev/mga_vid)", |
60 "xmga", | |
61 "Zoltan Ponekker <pontscho@makacs.poliod.hu>", | |
62 "" | |
1 | 63 }; |
64 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
65 const LIBVO_EXTERN(xmga) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8017
diff
changeset
|
66 |
12582 | 67 static uint32_t mDepth; |
68 static XWindowAttributes attribs; | |
10988 | 69 static int colorkey; |
1 | 70 |
12582 | 71 static uint32_t mvHeight; |
72 static uint32_t mvWidth; | |
1 | 73 |
12582 | 74 static XSetWindowAttributes xWAttribs; |
1 | 75 |
25962 | 76 static int initialized = 0; |
6311
da2dda48b7ec
add mute support ( step 1 ) and fixed panscan bugs (1000l for me)
pontscho
parents:
6307
diff
changeset
|
77 |
4981 | 78 #define VO_XMGA |
31364
317649676214
Rename libvo/mga_common.c --> libvo/mga_template.c.
diego
parents:
28446
diff
changeset
|
79 #include "mga_template.c" |
4981 | 80 #undef VO_XMGA |
1 | 81 |
12582 | 82 static void mDrawColorKey(void) |
1 | 83 { |
12582 | 84 XSetBackground(mDisplay, vo_gc, 0); |
85 XClearWindow(mDisplay, vo_window); | |
86 XSetForeground(mDisplay, vo_gc, colorkey); | |
87 XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth, | |
88 (vo_fs ? drwHeight - 1 : drwHeight)); | |
89 XFlush(mDisplay); | |
1 | 90 } |
91 | |
31 | 92 static void check_events(void) |
1 | 93 { |
12582 | 94 int e = vo_x11_check_events(mDisplay); |
95 | |
32370
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
96 if (e & (VO_EVENT_RESIZE | VO_EVENT_MOVE)) |
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
97 set_window(); |
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
98 if (e & (VO_EVENT_RESIZE | VO_EVENT_EXPOSE)) |
79b1264388b3
Fix xmga event handling: Reconfigure hardware on move and resize,
reimar
parents:
32369
diff
changeset
|
99 mDrawColorKey(); |
1 | 100 } |
101 | |
12582 | 102 static void flip_page(void) |
103 { | |
182 | 104 #ifdef SHOW_TIME |
100 | 105 unsigned int t; |
12582 | 106 |
107 t = GetTimer(); | |
108 mp_msg(MSGT_VO, MSGL_STATUS, | |
109 " [timer: %08X diff: %6d dd: %6d ] \n", t, t - timer, | |
110 (t - timer) - timerd); | |
111 timerd = t - timer; | |
112 timer = t; | |
182 | 113 #endif |
100 | 114 |
12582 | 115 vo_mga_flip_page(); |
31 | 116 } |
1 | 117 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15540
diff
changeset
|
118 static int config(uint32_t width, uint32_t height, uint32_t d_width, |
12582 | 119 uint32_t d_height, uint32_t flags, char *title, |
120 uint32_t format) | |
1 | 121 { |
12582 | 122 XVisualInfo vinfo; |
123 unsigned long xswamask; | |
124 int r, g, b; | |
125 | |
126 if (mga_init(width, height, format)) | |
127 return -1; // ioctl errors? | |
1 | 128 |
12582 | 129 mvWidth = width; |
130 mvHeight = height; | |
1 | 131 |
12582 | 132 r = (vo_colorkey & 0x00ff0000) >> 16; |
133 g = (vo_colorkey & 0x0000ff00) >> 8; | |
134 b = vo_colorkey & 0x000000ff; | |
135 switch (vo_depthonscreen) | |
136 { | |
137 case 32: | |
138 colorkey = vo_colorkey; | |
139 break; | |
140 case 24: | |
141 colorkey = vo_colorkey & 0x00ffffff; | |
142 break; | |
143 case 16: | |
144 colorkey = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); | |
145 break; | |
146 case 15: | |
147 colorkey = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); | |
148 break; | |
149 default: | |
150 mp_msg(MSGT_VO, MSGL_ERR, | |
151 "Sorry, this (%d) color depth not supported.\n", | |
152 vo_depthonscreen); | |
153 return -1; | |
154 } | |
13946 | 155 mp_msg(MSGT_VO, MSGL_V, "Using colorkey: %x\n", colorkey); |
1 | 156 |
25962 | 157 initialized = 1; |
1 | 158 |
12582 | 159 XGetWindowAttributes(mDisplay, mRootWin, &attribs); |
160 mDepth = attribs.depth; | |
161 if (mDepth != 15 && mDepth != 16 && mDepth != 24 && mDepth != 32) | |
162 mDepth = 24; | |
163 XMatchVisualInfo(mDisplay, mScreen, mDepth, TrueColor, &vinfo); | |
164 xWAttribs.colormap = | |
165 XCreateColormap(mDisplay, mRootWin, vinfo.visual, AllocNone); | |
166 xWAttribs.background_pixel = 0; | |
167 xWAttribs.border_pixel = 0; | |
27927
6f199f065e15
Factor common code like -wid handling, vo_gc creation etc. out into
reimar
parents:
27903
diff
changeset
|
168 xswamask = CWBackPixel | CWBorderPixel | CWColormap; |
1 | 169 |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23077
diff
changeset
|
170 vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, d_width, d_height, |
23822 | 171 flags, xWAttribs.colormap, "xmga", title); |
24348
f96e42d494f9
Fix borders for xmga broken by r23675. Tested by Diego.
reimar
parents:
23822
diff
changeset
|
172 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xWAttribs); |
7679 | 173 |
12582 | 174 mga_vid_config.colkey_on = 1; |
175 mga_vid_config.colkey_red = r; | |
176 mga_vid_config.colkey_green = g; | |
177 mga_vid_config.colkey_blue = b; | |
178 | |
179 set_window(); // set up mga_vid_config.dest_width etc | |
180 | |
181 XSync(mDisplay, False); | |
182 | |
183 ioctl(f, MGA_VID_ON, 0); | |
184 | |
185 return 0; | |
1 | 186 } |
187 | |
12582 | 188 static void uninit(void) |
189 { | |
190 mp_msg(MSGT_VO, MSGL_V, "vo: uninit!\n"); | |
191 mga_uninit(); | |
25962 | 192 if (!initialized) |
12582 | 193 return; // no window? |
25962 | 194 initialized = 0; |
12582 | 195 vo_x11_uninit(); // destroy the window |
1 | 196 } |