annotate libvo/vo_dga.c @ 33273:8c4a81b0bd5f

Update Doxyfile from doxygen 1.3.7 to 1.5.6. The latter is the version available in Debian oldstable and should thus be a suitable baseline that can be expected to be available on all systems. The update makes new Doxygen features available in the configuration file and avoids several deprecation warnings when using newer doxygen versions.
author diego
date Wed, 04 May 2011 14:27:35 +0000
parents fbe5c829c69b
children ddb45e9443ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1 /*
10021
a7ae63354098 Spring cleanup: removed the full yv12 support as it was broken anyway. The BGR/RGB native/non-native case needs some cleanup, too. Currently it works for me (tm)
alex
parents: 9274
diff changeset
2 * X11 DGA Interface
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
3 *
26400
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
4 * Copyright (C) 2001 Andreas Ackermann <acki@acki-netz.de>
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
5 * Sourceforge username: acki2
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
6 *
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
7 * This file is part of MPlayer.
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
8 *
26400
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
9 * MPlayer is free software; you can redistribute it and/or modify
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
10 * it under the terms of the GNU General Public License as published by
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
12 * (at your option) any later version.
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
13 *
26400
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
14 * MPlayer is distributed in the hope that it will be useful,
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
17 * GNU General Public License for more details.
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
18 *
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
19 * You should have received a copy of the GNU General Public License along
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
20 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
5af4096b9fec Replace "all rights reserved" statement with standard GPL license header.
diego
parents: 25220
diff changeset
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
22 */
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
23
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
24 #include <stdio.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
25 #include <stdlib.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
26 #include <string.h>
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4713
diff changeset
27 #include <errno.h>
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
28
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
29 #include "config.h"
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
30 #include "video_out.h"
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
31 #include "video_out_internal.h"
4060
974e028471a4 SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
atmos4
parents: 3852
diff changeset
32 #include "aspect.h"
10021
a7ae63354098 Spring cleanup: removed the full yv12 support as it was broken anyway. The BGR/RGB native/non-native case needs some cleanup, too. Currently it works for me (tm)
alex
parents: 9274
diff changeset
33 #include "x11_common.h"
a7ae63354098 Spring cleanup: removed the full yv12 support as it was broken anyway. The BGR/RGB native/non-native case needs some cleanup, too. Currently it works for me (tm)
alex
parents: 9274
diff changeset
34 #include "fastmemcpy.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 12582
diff changeset
35 #include "mp_msg.h"
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
36
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
37 #include <X11/Xlib.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
38 #include <X11/extensions/xf86dga.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
39
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
40 #ifdef CONFIG_XF86VM
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
41 #include <X11/extensions/xf86vmode.h>
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
42 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
43
25216
3aee342be929 Make vo info structs const
reimar
parents: 18976
diff changeset
44 static const vo_info_t info = {
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
45 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
46 "DGA ( Direct Graphic Access V2.0 )",
533
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
47 #else
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
48 #ifdef CONFIG_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
49 "DGA ( Direct Graphic Access V1.0+XF86VidModeExt. )",
7499
dcb9f392eae4 cosmetics...
arpi
parents: 7498
diff changeset
50 #else
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
51 "DGA ( Direct Graphic Access V1.0 )",
7499
dcb9f392eae4 cosmetics...
arpi
parents: 7498
diff changeset
52 #endif
533
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
53 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
54 "dga",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
55 "Andreas Ackermann <acki@acki-netz.de>",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
56 ""
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
57 };
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
58
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
59 const LIBVO_EXTERN(dga)
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
60 //------------------------------------------------------------------
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
61 //#define BITSPP (vo_dga_modes[vo_dga_active_mode].vdm_bitspp)
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
62 //#define BYTESPP (vo_dga_modes[vo_dga_active_mode].vdm_bytespp)
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
63 #define VO_DGA_INVALID_RES 100000
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
64 #define HW_MODE (vo_dga_modes[vo_dga_hw_mode])
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
65 #define SRC_MODE (vo_dga_modes[vo_dga_src_mode])
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
66 struct vd_modes
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
67 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
68 int vdm_mplayer_depth;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
69 int vdm_supported;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
70 int vdm_depth;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
71 int vdm_bitspp;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
72 int vdm_bytespp;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
73 int vdm_rmask;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
74 int vdm_gmask;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
75 int vdm_bmask;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
76 int vdm_hw_mode;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
77 };
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
78
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
79 //------------------------------------------------------------------
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
80
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
81 static struct vd_modes vo_dga_modes[] = {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
82 // these entries describe HW modes
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
83 // however, we use the same entries to tell mplayer what we support
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
84 // so the last two values describe, which HW mode to use and which conversion
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
85 // function to use for a mode that is not supported by HW
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
86
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
87 {0, 0, 0, 0, 0, 0, 0, 0, 0,},
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
88 {15, 0, 15, 16, 2, 0x7c00, 0x03e0, 0x001f, 2,},
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
89 {16, 0, 16, 16, 2, 0xf800, 0x07e0, 0x001f, 2,},
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
90 {24, 0, 24, 24, 3, 0xff0000, 0x00ff00, 0x0000ff, 4},
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
91 {32, 0, 24, 32, 4, 0x00ff0000, 0x0000ff00, 0x000000ff, 4}
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
92 };
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
93
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
94 static int vo_dga_mode_num =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
95 sizeof(vo_dga_modes) / sizeof(struct vd_modes);
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
96
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
97 // enable a HW mode (by description)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
98 static int vd_EnableMode(int depth, int bitspp,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
99 int rmask, int gmask, int bmask)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
100 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
101 int i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
102
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
103 for (i = 1; i < vo_dga_mode_num; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
104 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
105 if (vo_dga_modes[i].vdm_depth == depth &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
106 vo_dga_modes[i].vdm_bitspp == bitspp &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
107 vo_dga_modes[i].vdm_rmask == rmask &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
108 vo_dga_modes[i].vdm_gmask == gmask &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
109 vo_dga_modes[i].vdm_bmask == bmask)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
110 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
111 vo_dga_modes[i].vdm_supported = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
112 vo_dga_modes[i].vdm_hw_mode = i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
113 return i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
114 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
115 }
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
116 return 0;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
117 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
118
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
119 static int vd_ModeEqual(int depth, int bitspp,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
120 int rmask, int gmask, int bmask, int index)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
121 {
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 26400
diff changeset
122 return (vo_dga_modes[index].vdm_depth == depth &&
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
123 vo_dga_modes[index].vdm_bitspp == bitspp &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
124 vo_dga_modes[index].vdm_rmask == rmask &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
125 vo_dga_modes[index].vdm_gmask == gmask &&
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 26400
diff changeset
126 vo_dga_modes[index].vdm_bmask == bmask) ? 1 : 0;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
127 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
128
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
129
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
130 // enable a HW mode (mplayer_depth decides which)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
131 static int vd_ValidateMode(int mplayer_depth)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
132 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
133 int i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
134
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
135 if (mplayer_depth == 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
136 return 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
137 for (i = 1; i < vo_dga_mode_num; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
138 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
139 if (vo_dga_modes[i].vdm_mplayer_depth == mplayer_depth)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
140 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
141 vo_dga_modes[i].vdm_supported = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
142 vo_dga_modes[i].vdm_hw_mode = i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
143 return i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
144 }
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
145 }
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
146 return 0;
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
147 }
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
148
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
149 // do we support this mode? (not important whether native or conversion)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
150 static int vd_ModeValid(int mplayer_depth)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
151 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
152 int i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
153
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
154 if (mplayer_depth == 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
155 return 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
156 for (i = 1; i < vo_dga_mode_num; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
157 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
158 if (vo_dga_modes[i].vdm_mplayer_depth == mplayer_depth &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
159 vo_dga_modes[i].vdm_supported != 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
160 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
161 return i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
162 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
163 }
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
164 return 0;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
165 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
166
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
167 static char *vd_GetModeString(int index)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
168 {
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
169
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
170 #define VO_DGA_MAX_STRING_LEN 100
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
171 static char stringbuf[VO_DGA_MAX_STRING_LEN];
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
172
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
173 stringbuf[VO_DGA_MAX_STRING_LEN - 1] = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
174 snprintf(stringbuf, VO_DGA_MAX_STRING_LEN - 2,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
175 "depth=%d, bpp=%d, r=%06x, g=%06x, b=%06x, %s (-bpp %d)",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
176 vo_dga_modes[index].vdm_depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
177 vo_dga_modes[index].vdm_bitspp,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
178 vo_dga_modes[index].vdm_rmask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
179 vo_dga_modes[index].vdm_gmask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
180 vo_dga_modes[index].vdm_bmask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
181 vo_dga_modes[index].
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
182 vdm_supported ? "native" : "not supported",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
183 vo_dga_modes[index].vdm_mplayer_depth);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
184 return stringbuf;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
185 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
186
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
187 //-----------------------------------------------------------------
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
188
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
189 #if defined(CONFIG_XF86VM) && !defined(CONFIG_DGA2)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
190 static XF86VidModeModeInfo **vo_dga_vidmodes = NULL;
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
191 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
192
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
193
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
194 static int vo_dga_src_format;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
195 static int vo_dga_width; // bytes per line in framebuffer
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
196 static int vo_dga_vp_width; // visible pixels per line in
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
197
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
198 // framebuffer
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
199 static int vo_dga_vp_height; // visible lines in framebuffer
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
200 static int vo_dga_is_running = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
201 static int vo_dga_src_width; // width of video in pixels
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
202 static int vo_dga_src_height; // height of video in pixels
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
203 static int vo_dga_src_offset = 0; // offset in src
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
204 static int vo_dga_vp_offset = 0; // offset in dest
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
205 static int vo_dga_bytes_per_line; // bytes per line to copy
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
206 static int vo_dga_vp_skip; // dto. for dest
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
207 static int vo_dga_lines; // num of lines to copy
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
208 static int vo_dga_hw_mode = 0; // index in mode list that is actually
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
209
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
210 // used by framebuffer
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
211 static int vo_dga_src_mode = 0; // index in mode list that is used by
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
212
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
213 // codec
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
214 static int vo_dga_XServer_mode = 0; // index in mode list for resolution
8067
482666d4c729 - cleanup
pontscho
parents: 8027
diff changeset
215
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
216 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
217 static XDGAMode *vo_modelines;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
218 static int vo_modecount;
8067
482666d4c729 - cleanup
pontscho
parents: 8027
diff changeset
219 #endif
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
220
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
221 #define MAX_NR_VIDEO_BUFFERS 3
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
222
7575
3a6d7933a6ad flickering fix, patch by Fredrik Noring <noring@nocrew.org>
arpi
parents: 7539
diff changeset
223 #define CURRENT_VIDEO_BUFFER \
3a6d7933a6ad flickering fix, patch by Fredrik Noring <noring@nocrew.org>
arpi
parents: 7539
diff changeset
224 (vo_dga_video_buffer[vo_dga_current_video_buffer])
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
225
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
226 static int vo_dga_nr_video_buffers; // Total number of frame buffers.
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
227 static int vo_dga_current_video_buffer; // Buffer available for rendering.
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
228
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
229 static struct video_buffer
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
230 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
231 int y;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
232 uint8_t *data;
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
233 } vo_dga_video_buffer[MAX_NR_VIDEO_BUFFERS];
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
234
4060
974e028471a4 SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
atmos4
parents: 3852
diff changeset
235 /* saved src and dst dimensions for SwScaler */
974e028471a4 SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
atmos4
parents: 3852
diff changeset
236 static unsigned int scale_srcW = 0,
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
237 scale_dstW = 0, scale_srcH = 0, scale_dstH = 0;
4060
974e028471a4 SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
atmos4
parents: 3852
diff changeset
238
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
239 //---------------------------------------------------------
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
240
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
241 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
242 unsigned char *srca, int stride)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
243 {
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
244
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
245 char *d;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
246 unsigned int offset;
14795
041a13490497 no effect in practice, but strides should always be signed
rfelker
parents: 13787
diff changeset
247 int buffer_stride;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
248
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
249 offset = vo_dga_width * y0 + x0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
250 buffer_stride = vo_dga_width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
251 d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
252
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
253 switch (HW_MODE.vdm_mplayer_depth)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
254 {
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
255
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
256 case 32:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
257 vo_draw_alpha_rgb32(w, h, src, srca, stride, d + 4 * offset,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
258 4 * buffer_stride);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
259 break;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
260 case 24:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
261 vo_draw_alpha_rgb24(w, h, src, srca, stride, d + 3 * offset,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
262 3 * buffer_stride);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
263 break;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
264 case 15:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
265 vo_draw_alpha_rgb15(w, h, src, srca, stride, d + 2 * offset,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
266 2 * buffer_stride);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
267 break;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
268 case 16:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
269 vo_draw_alpha_rgb16(w, h, src, srca, stride, d + 2 * offset,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
270 2 * buffer_stride);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
271 break;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
272 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
273 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
274
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
275
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
276 //---------------------------------------------------------
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
277
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
278
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
279
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
280
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
281 // quick & dirty - for debugging only
10495
81e99e4c6640 10l & warning fixes
alex
parents: 10286
diff changeset
282 #if 0
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
283 static void fillblock(char *strt, int yoff, int lines, int val)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
284 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
285 char *i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
286
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
287 for (i = strt + yoff * vo_dga_width * HW_MODE.vdm_bytespp;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
288 i < strt + (lines + yoff) * vo_dga_width * HW_MODE.vdm_bytespp;)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
289 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
290 *i++ = val;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
291 }
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
292 }
10495
81e99e4c6640 10l & warning fixes
alex
parents: 10286
diff changeset
293 #endif
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
294
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
295 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
296
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
297 static int draw_frame(uint8_t * src[])
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
298 {
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
299
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
300 int numlines = vo_dga_lines;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
301
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
302 char *s, *d;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
303
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
304 s = *src;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
305 d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
306
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
307 mem2agpcpy_pic(d, s,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
308 vo_dga_bytes_per_line,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
309 numlines,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
310 vo_dga_bytes_per_line + vo_dga_vp_skip,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
311 vo_dga_bytes_per_line);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
312
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
313 // DBG-COde
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
314
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
315 #if 0
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
316 d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
317 fillblock(d, 0, 10, 0x800000ff);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
318 fillblock(d, 10, 10, 0x8000ff00);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
319 fillblock(d, 20, 10, 0x80ff0000);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
320 fillblock(d, 30, 10, 0xff0000ff);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
321 fillblock(d, 40, 10, 0x800000ff);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
322 fillblock(d, 50, 10, 0x0f0000ff);
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
323 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
324 return 0;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
325 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
326
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
327 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
328
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
329 static void check_events(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
330 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
331 vo_x11_check_events(mDisplay);
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
332 }
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
333
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
334 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
335
32467
fbe5c829c69b Move libvo/sub.[ch] from libvo to sub.
cigaes
parents: 29263
diff changeset
336 #include "sub/sub.h"
612
77e0094f0cce some warnings killed
szabii
parents: 533
diff changeset
337
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1336
diff changeset
338 static void draw_osd(void)
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
339 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
340 vo_draw_text(vo_dga_src_width, vo_dga_src_height, draw_alpha);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
341 }
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1336
diff changeset
342
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
343 static void switch_video_buffers(void)
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
344 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
345 vo_dga_current_video_buffer =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
346 (vo_dga_current_video_buffer + 1) % vo_dga_nr_video_buffers;
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
347 }
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
348
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
349 static void flip_page(void)
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
350 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
351 if (1 < vo_dga_nr_video_buffers)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
352 {
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
353 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
354 XDGASetViewport(mDisplay, mScreen,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
355 0, CURRENT_VIDEO_BUFFER.y, XDGAFlipRetrace);
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
356 #else
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
357 XF86DGASetViewPort(mDisplay, mScreen, 0, CURRENT_VIDEO_BUFFER.y);
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
358 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
359 switch_video_buffers();
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
360 }
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
361 }
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
362
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
363 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
364
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
365 static int draw_slice(uint8_t * src[], int stride[],
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
366 int w, int h, int x, int y)
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
367 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
368 return 0;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
369 };
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
370
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
371 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
372
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
373 static int query_format(uint32_t format)
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
374 {
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
375
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
376 if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
377 vd_ModeValid(format & 0xff))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
378 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
379 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
380 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
381
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
382 return 0;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
383 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
384
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
385 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
386
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
387 static void uninit(void)
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
388 {
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
389
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
390 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
391 XDGADevice *dgadevice;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
392 #endif
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
393
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
394 if (!vo_config_count)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
395 return;
8067
482666d4c729 - cleanup
pontscho
parents: 8027
diff changeset
396
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
397 if (vo_dga_is_running)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
398 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
399 vo_dga_is_running = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
400 mp_msg(MSGT_VO, MSGL_V, "vo_dga: in uninit\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
401 if (vo_grabpointer)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
402 XUngrabPointer(mDisplay, CurrentTime);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
403 XUngrabKeyboard(mDisplay, CurrentTime);
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
404 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
405 XDGACloseFramebuffer(mDisplay, mScreen);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
406 dgadevice = XDGASetMode(mDisplay, mScreen, 0);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
407 if (dgadevice != NULL)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
408 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
409 XFree(dgadevice);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
410 }
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
411 #else
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
412 XF86DGADirectVideo(mDisplay, mScreen, 0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
413 // first disable DirectVideo and then switch mode back!
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
414 #ifdef CONFIG_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
415 if (vo_dga_vidmodes != NULL)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
416 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
417 int screen;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
418
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
419 screen = XDefaultScreen(mDisplay);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
420 mp_msg(MSGT_VO, MSGL_V,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
421 "vo_dga: VidModeExt: Switching back..\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
422 // seems some graphics adaptors need this more than once ...
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
423 XF86VidModeSwitchToMode(mDisplay, screen, vo_dga_vidmodes[0]);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
424 XF86VidModeSwitchToMode(mDisplay, screen, vo_dga_vidmodes[0]);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
425 XF86VidModeSwitchToMode(mDisplay, screen, vo_dga_vidmodes[0]);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
426 XF86VidModeSwitchToMode(mDisplay, screen, vo_dga_vidmodes[0]);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
427 XFree(vo_dga_vidmodes);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
428 }
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
429 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
430 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
431 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
432 vo_x11_uninit();
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
433 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
434
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
435
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
436 //----------------------------------------------------------
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
437 // TODO: check for larger maxy value
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
438 // (useful for double buffering!!!)
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
439
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
440 static int check_res(int num, int x, int y, int bpp,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
441 int new_x, int new_y, int new_vbi, int new_maxy,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
442 int *old_x, int *old_y, int *old_vbi, int *old_maxy)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
443 {
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
444
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
445 mp_msg(MSGT_VO, MSGL_V,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
446 "vo_dga: (%3d) Trying %4d x %4d @ %3d Hz @ depth %2d ..", num,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
447 new_x, new_y, new_vbi, bpp);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
448 mp_msg(MSGT_VO, MSGL_V, "(old: %dx%d@%d).", *old_x, *old_y, *old_vbi);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
449 if ((new_x >= x) && (new_y >= y) && (
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
450 // prefer a better resolution either in X or in Y
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
451 // as long as the other dimension is at least the same
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
452 //
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
453 // hmm ... MAYBE it would be more clever to focus on the
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
454 // x-resolution; I had 712x400 and 640x480 and the movie
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
455 // was 640x360; 640x480 would be the 'right thing' here
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
456 // but since 712x400 was queried first I got this one.
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
457 // I think there should be a cmd-line switch to let the
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
458 // user choose the mode he likes ... (acki2)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
459 (((new_x < *old_x) &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
460 !(new_y > *old_y)) ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
461 ((new_y < *old_y) &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
462 !(new_x > *old_x)))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
463 // but if we get an identical resolution choose
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
464 // the one with the lower refreshrate (saves bandwidth !!!)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
465 // as long as it's above 50 Hz (acki2 on 30/3/2001)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
466 ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
467 (((new_x == *old_x) &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
468 (new_y == *old_y) &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
469 ((new_vbi >= *old_vbi
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
470 && *old_vbi < 50)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
471 || (*old_vbi >= 50
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
472 && new_vbi < *old_vbi
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
473 && new_vbi >= 50))) ||
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
474 // if everything is equal, then use the mode with the lower
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
475 // stride
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
476 ((new_x == *old_x) &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
477 (new_y == *old_y) &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
478 (new_vbi == *old_vbi) &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
479 (new_maxy > *old_maxy)))))
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
480 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
481 *old_x = new_x;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
482 *old_y = new_y;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
483 *old_maxy = new_maxy;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
484 *old_vbi = new_vbi;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
485 mp_msg(MSGT_VO, MSGL_V, ".ok!!\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
486 return 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
487 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
488 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
489 mp_msg(MSGT_VO, MSGL_V, ".no\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
490 return 0;
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
491 }
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
492 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
493
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
494
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
495
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
496 //---------------------------------------------------------
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
497
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
498 static void init_video_buffers(uint8_t * buffer_base,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
499 int view_port_height,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
500 int bytes_per_scanline,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
501 int max_view_port_y,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
502 int use_multiple_buffers)
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
503 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
504 int bytes_per_buffer = view_port_height * bytes_per_scanline;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
505 int i;
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
506
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
507 if (use_multiple_buffers)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
508 vo_dga_nr_video_buffers = max_view_port_y / view_port_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
509 else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
510 vo_dga_nr_video_buffers = 1;
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
511
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
512 if (vo_dga_nr_video_buffers > MAX_NR_VIDEO_BUFFERS)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
513 vo_dga_nr_video_buffers = MAX_NR_VIDEO_BUFFERS;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
514 if (vo_dga_nr_video_buffers <= 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
515 vo_dga_nr_video_buffers = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
516
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
517 vo_dga_current_video_buffer = 0;
9274
737c44487ebc 10l, avoid getting num_of_buffers=0
alex
parents: 8148
diff changeset
518
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
519 for (i = 0; i < vo_dga_nr_video_buffers; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
520 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
521 vo_dga_video_buffer[i].y = i * view_port_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
522 vo_dga_video_buffer[i].data = buffer_base + i * bytes_per_buffer;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
523
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
524 // Clear video buffer.
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
525 memset(vo_dga_video_buffer[i].data, 0, bytes_per_buffer);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
526 }
7498
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
527 }
2b4190fb8218 Attached patch improves the vertical retrace synchronisation (vsync)
arpi
parents: 7124
diff changeset
528
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
529 static int config(uint32_t width, uint32_t height,
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
530 uint32_t d_width, uint32_t d_height,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
531 uint32_t flags, char *title, uint32_t format)
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
532 {
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
533
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
534 int x_off, y_off;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
535 int wanted_width, wanted_height;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
536
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
537 static unsigned char *vo_dga_base;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
538 static int prev_width, prev_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
539
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
540 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
541 // needed to change DGA video mode
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
542 int mX = VO_DGA_INVALID_RES, mY = VO_DGA_INVALID_RES, mVBI =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
543 100000, mMaxY = 0, i, j = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
544 int dga_modenum;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
545 XDGAMode *modeline;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
546 XDGADevice *dgadevice;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
547 #else
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
548 #ifdef CONFIG_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
549 unsigned int vm_event, vm_error;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
550 unsigned int vm_ver, vm_rev;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
551 int i, j = 0, have_vm = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
552 int mX = VO_DGA_INVALID_RES, mY = VO_DGA_INVALID_RES, mVBI =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
553 100000, mMaxY = 0, dga_modenum;
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
554 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
555 int bank, ram;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
556 #endif
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
557
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
558 vo_dga_src_format = format;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
559
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
560 wanted_width = d_width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
561 wanted_height = d_height;
4060
974e028471a4 SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
atmos4
parents: 3852
diff changeset
562
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
563 if (!wanted_height)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
564 wanted_height = height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
565 if (!wanted_width)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
566 wanted_width = width;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
567
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
568 if (!vo_dbpp)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
569 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
570 if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
571 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
572 vo_dga_src_mode = vd_ModeValid(format & 0xff);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
573 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
574 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
575 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
576 vo_dga_src_mode = vd_ModeValid(vo_dbpp);
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
577 }
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
578 vo_dga_hw_mode = SRC_MODE.vdm_hw_mode;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
579
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
580 if (!vo_dga_src_mode)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
581 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
582 mp_msg(MSGT_VO, MSGL_ERR, "vo_dga: unsupported video format!\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
583 return 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
584 }
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
585
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
586 vo_dga_vp_width = vo_screenwidth;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
587 vo_dga_vp_height = vo_screenheight;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
588
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
589 mp_msg(MSGT_VO, MSGL_V, "vo_dga: XServer res: %dx%d\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
590 vo_dga_vp_width, vo_dga_vp_height);
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
591
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
592 // choose a suitable mode ...
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
593
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
594 #ifdef CONFIG_DGA2
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
595 // Code to change the video mode added by Michael Graffam
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
596 // mgraffam@idsi.net
3318
a3739b590cf2 do not crash if can't get modelines (dga2.0)
alex
parents: 2732
diff changeset
597
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
598 mp_msg(MSGT_VO, MSGL_V, "vo_dga: vo_modelines=%p, vo_modecount=%d\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
599 vo_modelines, vo_modecount);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
600
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
601 if (vo_modelines == NULL)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
602 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
603 mp_msg(MSGT_VO, MSGL_ERR, "vo_dga: can't get modelines\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
604 return 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
605 }
3318
a3739b590cf2 do not crash if can't get modelines (dga2.0)
alex
parents: 2732
diff changeset
606
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
607 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
608 "vo_dga: DGA 2.0 available :-) Can switch resolution AND depth!\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
609 for (i = 0; i < vo_modecount; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
610 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
611 if (vd_ModeEqual(vo_modelines[i].depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
612 vo_modelines[i].bitsPerPixel,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
613 vo_modelines[i].redMask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
614 vo_modelines[i].greenMask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
615 vo_modelines[i].blueMask, vo_dga_hw_mode))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
616 {
272
8ffe2f459851 - still more debug output to be able to fix 15/16 bpp problem
acki2
parents: 266
diff changeset
617
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
618 mp_msg(MSGT_VO, MSGL_V, "maxy: %4d, depth: %2d, %4dx%4d, ",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
619 vo_modelines[i].maxViewportY, vo_modelines[i].depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
620 vo_modelines[i].imageWidth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
621 vo_modelines[i].imageHeight);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
622 if (check_res
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
623 (i, wanted_width, wanted_height, vo_modelines[i].depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
624 vo_modelines[i].viewportWidth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
625 vo_modelines[i].viewportHeight,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
626 (unsigned) vo_modelines[i].verticalRefresh,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
627 vo_modelines[i].maxViewportY, &mX, &mY, &mVBI, &mMaxY))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
628 j = i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
629 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
630 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
631 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
632 "vo_dga: Selected hardware mode %4d x %4d @ %3d Hz @ depth %2d, bitspp %2d.\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
633 mX, mY, mVBI, HW_MODE.vdm_depth, HW_MODE.vdm_bitspp);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
634 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
635 "vo_dga: Video parameters by codec: %3d x %3d, depth %2d, bitspp %2d.\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
636 width, height, SRC_MODE.vdm_depth, SRC_MODE.vdm_bitspp);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
637 vo_dga_vp_width = mX;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
638 vo_dga_vp_height = mY;
4060
974e028471a4 SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
atmos4
parents: 3852
diff changeset
639
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14795
diff changeset
640 if ((flags & VOFLAG_SWSCALE) || (flags & VOFLAG_FULLSCREEN))
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
641 { /* -zoom or -fs */
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
642 scale_dstW = (d_width + 7) & ~7;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
643 scale_dstH = d_height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
644 scale_srcW = width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
645 scale_srcH = height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
646 aspect_save_screenres(mX, mY);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
647 aspect_save_orig(scale_srcW, scale_srcH);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
648 aspect_save_prescale(scale_dstW, scale_dstH);
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14795
diff changeset
649 if (flags & VOFLAG_FULLSCREEN) /* -fs */
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
650 aspect(&scale_dstW, &scale_dstH, A_ZOOM);
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14795
diff changeset
651 else if (flags & VOFLAG_SWSCALE) /* -fs */
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
652 aspect(&scale_dstW, &scale_dstH, A_NOZOOM);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
653 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
654 "vo_dga: Aspect corrected size for SwScaler: %4d x %4d.\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
655 scale_dstW, scale_dstH);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
656 /* XXX this is a hack, but I'm lazy ;-) :: atmos */
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
657 width = scale_dstW;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
658 height = scale_dstH;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
659 }
4060
974e028471a4 SwScaler support for vo_png by Kim Minh, SwScale w/aspecz for vo_dga by me
atmos4
parents: 3852
diff changeset
660
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
661 vo_dga_width = vo_modelines[j].bytesPerScanline / HW_MODE.vdm_bytespp;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
662 dga_modenum = vo_modelines[j].num;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
663 modeline = vo_modelines + j;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
664
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
665 #else
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
666
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
667 #ifdef CONFIG_XF86VM
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
668
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
669 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
670 "vo_dga: DGA 1.0 compatibility code: Using XF86VidMode for mode switching!\n");
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
671
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
672 if (XF86VidModeQueryExtension(mDisplay, &vm_event, &vm_error))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
673 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
674 XF86VidModeQueryVersion(mDisplay, &vm_ver, &vm_rev);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
675 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
676 "vo_dga: XF86VidMode Extension v%i.%i\n", vm_ver, vm_rev);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
677 have_vm = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
678 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
679 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
680 mp_msg(MSGT_VO, MSGL_ERR,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
681 "vo_dga: XF86VidMode Extension not available.\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
682 }
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
683
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
684 #define GET_VREFRESH(dotclk, x, y)( (((dotclk)/(x))*1000)/(y) )
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
685
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
686 if (have_vm)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
687 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
688 int modecount;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
689
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
690 XF86VidModeGetAllModeLines(mDisplay, mScreen, &modecount,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
691 &vo_dga_vidmodes);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
692
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
693 if (vo_dga_vidmodes != NULL)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
694 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
695 for (i = 0; i < modecount; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
696 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
697 if (check_res(i, wanted_width, wanted_height,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
698 vo_dga_modes[vo_dga_hw_mode].vdm_depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
699 vo_dga_vidmodes[i]->hdisplay,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
700 vo_dga_vidmodes[i]->vdisplay,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
701 GET_VREFRESH(vo_dga_vidmodes[i]->dotclock,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
702 vo_dga_vidmodes[i]->htotal,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
703 vo_dga_vidmodes[i]->vtotal),
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
704 0, &mX, &mY, &mVBI, &mMaxY))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
705 j = i;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
706 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
707
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
708 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
709 "vo_dga: Selected video mode %4d x %4d @ %3d Hz @ depth %2d, bitspp %2d, video %3d x %3d.\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
710 mX, mY, mVBI,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
711 vo_dga_modes[vo_dga_hw_mode].vdm_depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
712 vo_dga_modes[vo_dga_hw_mode].vdm_bitspp, width, height);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
713 } else
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
714 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
715 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
716 "vo_dga: XF86VidMode returned no screens - using current resolution.\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
717 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
718 dga_modenum = j;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
719 vo_dga_vp_width = mX;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
720 vo_dga_vp_height = mY;
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
721 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
722
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
723 #else
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
724 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
725 "vo_dga: Only have DGA 1.0 extension and no XF86VidMode :-(\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
726 mp_msg(MSGT_VO, MSGL_INFO,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
727 " Thus, resolution switching is NOT possible.\n");
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
728
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
729 #endif
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
730 #endif
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
731
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
732 vo_dga_src_width = width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
733 vo_dga_src_height = height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
734
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
735 if (vo_dga_src_width > vo_dga_vp_width ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
736 vo_dga_src_height > vo_dga_vp_height)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
737 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
738 mp_msg(MSGT_VO, MSGL_ERR,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
739 "vo_dga: Sorry, video larger than viewport is not yet supported!\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
740 // ugly, do something nicer in the future ...
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
741 #ifndef CONFIG_DGA2
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
742 #ifdef CONFIG_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
743 if (vo_dga_vidmodes)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
744 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
745 XFree(vo_dga_vidmodes);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
746 vo_dga_vidmodes = NULL;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
747 }
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
748 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
749 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
750 return 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
751 }
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
752
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
753 if (vo_dga_vp_width == VO_DGA_INVALID_RES)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
754 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
755 mp_msg(MSGT_VO, MSGL_ERR,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
756 "vo_dga: Something is wrong with your DGA. There doesn't seem to be a\n"
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
757 " single suitable mode!\n"
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
758 " Please file a bug report (see DOCS/HTML/en/bugreports.html)\n");
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
759 #ifndef CONFIG_DGA2
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
760 #ifdef CONFIG_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
761 if (vo_dga_vidmodes)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
762 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
763 XFree(vo_dga_vidmodes);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
764 vo_dga_vidmodes = NULL;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
765 }
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
766 #endif
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
767 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
768 return 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
769 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
770 // now let's start the DGA thing
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
771
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
772 if (!vo_config_count || width != prev_width || height != prev_height)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
773 {
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
774 #ifdef CONFIG_DGA2
8067
482666d4c729 - cleanup
pontscho
parents: 8027
diff changeset
775
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
776 if (!XDGAOpenFramebuffer(mDisplay, mScreen))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
777 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
778 mp_msg(MSGT_VO, MSGL_ERR,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
779 "vo_dga: Framebuffer mapping failed!!!\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
780 return 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
781 }
8067
482666d4c729 - cleanup
pontscho
parents: 8027
diff changeset
782
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
783 dgadevice = XDGASetMode(mDisplay, mScreen, dga_modenum);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
784 XDGASync(mDisplay, mScreen);
221
3daeae4a4aa6 Added support to vo_dga to change the video mode to the lowest resolution
mgraffam
parents: 31
diff changeset
785
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
786 vo_dga_base = dgadevice->data;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
787 XFree(dgadevice);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
788
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
789 XDGASetViewport(mDisplay, mScreen, 0, 0, XDGAFlipRetrace);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
790
233
f62ccacbe1e5 Changes to configure to autodetect DGA 2.0 functionality, and to only use
mgraffam
parents: 221
diff changeset
791 #else
8067
482666d4c729 - cleanup
pontscho
parents: 8027
diff changeset
792
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
793 #ifdef CONFIG_XF86VM
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
794 if (have_vm)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
795 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
796 XF86VidModeLockModeSwitch(mDisplay, mScreen, 0);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
797 // Two calls are needed to switch modes on my ATI Rage 128. Why?
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
798 // for riva128 one call is enough!
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
799 XF86VidModeSwitchToMode(mDisplay, mScreen,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
800 vo_dga_vidmodes[dga_modenum]);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
801 XF86VidModeSwitchToMode(mDisplay, mScreen,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
802 vo_dga_vidmodes[dga_modenum]);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
803 }
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
804 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
805
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
806 XF86DGAGetViewPortSize(mDisplay, mScreen,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
807 &vo_dga_vp_width, &vo_dga_vp_height);
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
808
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
809 XF86DGAGetVideo(mDisplay, mScreen,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
810 (char **) &vo_dga_base, &vo_dga_width, &bank,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
811 &ram);
233
f62ccacbe1e5 Changes to configure to autodetect DGA 2.0 functionality, and to only use
mgraffam
parents: 221
diff changeset
812
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
813 XF86DGADirectVideo(mDisplay, mScreen,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
814 XF86DGADirectGraphics | XF86DGADirectMouse |
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
815 XF86DGADirectKeyb);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
816
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
817 XF86DGASetViewPort(mDisplay, mScreen, 0, 0);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
818
233
f62ccacbe1e5 Changes to configure to autodetect DGA 2.0 functionality, and to only use
mgraffam
parents: 221
diff changeset
819 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
820 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
821 // do some more checkings here ...
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
822
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
823 mp_msg(MSGT_VO, MSGL_V,
17366
934380353fd6 massive attack: mp_msg printf format fixes
rathann
parents: 16301
diff changeset
824 "vo_dga: bytes/line: %d, screen res: %dx%d, depth: %d, base: %p, bpp: %d\n",
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
825 vo_dga_width, vo_dga_vp_width, vo_dga_vp_height,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
826 HW_MODE.vdm_bytespp, vo_dga_base, HW_MODE.vdm_bitspp);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
827
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
828 x_off = (vo_dga_vp_width - vo_dga_src_width) >> 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
829 y_off = (vo_dga_vp_height - vo_dga_src_height) >> 1;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
830
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
831 vo_dga_bytes_per_line = vo_dga_src_width * HW_MODE.vdm_bytespp;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
832 vo_dga_lines = vo_dga_src_height;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
833
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
834 vo_dga_src_offset = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
835 vo_dga_vp_offset =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
836 (y_off * vo_dga_width + x_off) * HW_MODE.vdm_bytespp;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
837
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
838 vo_dga_vp_skip = (vo_dga_width - vo_dga_src_width) * HW_MODE.vdm_bytespp; // todo
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
839
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
840 mp_msg(MSGT_VO, MSGL_V, "vo_dga: vp_off=%d, vp_skip=%d, bpl=%d\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
841 vo_dga_vp_offset, vo_dga_vp_skip, vo_dga_bytes_per_line);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
842
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
843
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
844 XGrabKeyboard(mDisplay, DefaultRootWindow(mDisplay), True,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
845 GrabModeAsync, GrabModeAsync, CurrentTime);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
846 if (vo_grabpointer)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
847 XGrabPointer(mDisplay, DefaultRootWindow(mDisplay), True,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
848 ButtonPressMask, GrabModeAsync, GrabModeAsync,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
849 None, None, CurrentTime);
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
850
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
851 if (!vo_config_count || width != prev_width || height != prev_height)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
852 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
853 init_video_buffers(vo_dga_base,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
854 vo_dga_vp_height,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
855 vo_dga_width * HW_MODE.vdm_bytespp,
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
856 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
857 modeline->maxViewportY,
7515
72dd0b05d562 DGA1 fix by Fredrik Noring <noring@nocrew.org>
arpi
parents: 7500
diff changeset
858 #else
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
859 vo_dga_vp_height,
7515
72dd0b05d562 DGA1 fix by Fredrik Noring <noring@nocrew.org>
arpi
parents: 7500
diff changeset
860 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
861 vo_doublebuffering);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
862 prev_width = width;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
863 prev_height = height;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
864 }
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
865
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
866 mp_msg(MSGT_VO, MSGL_V, "vo_dga: Using %d frame buffer%s.\n",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
867 vo_dga_nr_video_buffers,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
868 vo_dga_nr_video_buffers == 1 ? "" : "s");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
869
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
870 vo_dga_is_running = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
871 return 0;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
872 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
873
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
874 static int dga_depths_init = 0;
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
875
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
876 static int preinit(const char *arg)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
877 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
878 if (arg)
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4713
diff changeset
879 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
880 mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: Unknown subdevice: %s\n", arg);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
881 return ENOSYS;
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4713
diff changeset
882 }
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
883
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
884 if (!vo_init())
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
885 return -1; // Can't open X11
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
886
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
887 if (dga_depths_init == 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
888 { // FIXME!?
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
889 int i;
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
890
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
891 vo_dga_XServer_mode = vd_ValidateMode(vo_depthonscreen);
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
892
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
893 if (vo_dga_XServer_mode == 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
894 {
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
895 #ifndef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
896 mp_msg(MSGT_VO, MSGL_ERR,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
897 "vo_dga: Your X-Server is not running in a ");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
898 mp_msg(MSGT_VO, MSGL_ERR,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
899 "resolution supported by DGA driver!\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
900 #endif
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
901 } //else{
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
902 // mp_msg(MSGT_VO, MSGL_V, "vo_dga: X running at: %s\n",
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
903 // vd_GetModeString(vo_dga_XServer_mode));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27377
diff changeset
904 //}
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
905
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 26755
diff changeset
906 #ifdef CONFIG_DGA2
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
907 vo_modelines = XDGAQueryModes(mDisplay, mScreen, &vo_modecount);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
908 if (vo_modelines)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
909 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
910 for (i = 0; i < vo_modecount; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
911 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
912 mp_msg(MSGT_VO, MSGL_V,
17366
934380353fd6 massive attack: mp_msg printf format fixes
rathann
parents: 16301
diff changeset
913 "vo_dga: (%03d) depth=%d, bpp=%d, r=%08lx, g=%08lx, b=%08lx, %d x %d\n",
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
914 i, vo_modelines[i].depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
915 vo_modelines[i].bitsPerPixel,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
916 vo_modelines[i].redMask, vo_modelines[i].greenMask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
917 vo_modelines[i].blueMask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
918 vo_modelines[i].viewportWidth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
919 vo_modelines[i].viewportHeight);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
920 vd_EnableMode(vo_modelines[i].depth,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
921 vo_modelines[i].bitsPerPixel,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
922 vo_modelines[i].redMask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
923 vo_modelines[i].greenMask,
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
924 vo_modelines[i].blueMask);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
925 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
926 }
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
927 #endif
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
928 dga_depths_init = 1;
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
929
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
930 if (!vo_dga_modes[1].vdm_supported
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
931 && vo_dga_modes[2].vdm_supported)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
932 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
933 vo_dga_modes[1].vdm_supported = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
934 }
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
935
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
936 if (!vo_dga_modes[3].vdm_supported
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
937 && vo_dga_modes[4].vdm_supported)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
938 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
939 vo_dga_modes[3].vdm_supported = 1;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
940 }
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
941
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
942 for (i = 1; i < vo_dga_mode_num; i++)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
943 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
944 mp_msg(MSGT_VO, MSGL_INFO, "vo_dga: Mode: %s",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
945 vd_GetModeString(i));
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
946 if (vo_dbpp && vo_dbpp != vo_dga_modes[i].vdm_mplayer_depth)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
947 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
948 vo_dga_modes[i].vdm_supported = 0;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
949 mp_msg(MSGT_VO, MSGL_INFO, " ...disabled by -bpp %d",
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
950 vo_dbpp);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
951 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
952 mp_msg(MSGT_VO, MSGL_INFO, "\n");
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
953 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
954 }
7930
a77aff3d7ac0 mode detection && vo_init() moved to preinit()
arpi
parents: 7652
diff changeset
955
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4713
diff changeset
956 return 0;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
957 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
958
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
959 static uint32_t get_image(mp_image_t * mpi)
8084
c524ca26ace1 arpi add direct render support
pontscho
parents: 8067
diff changeset
960 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
961 if (!IMGFMT_IS_BGR(mpi->imgfmt) ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
962 (IMGFMT_BGR_DEPTH(mpi->imgfmt) !=
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
963 vo_dga_modes[vo_dga_hw_mode].vdm_mplayer_depth)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
964 || (mpi->type == MP_IMGTYPE_STATIC && vo_dga_nr_video_buffers > 1)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
965 || (mpi->type == MP_IMGTYPE_IP && vo_dga_nr_video_buffers < 2)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
966 || (mpi->type == MP_IMGTYPE_IPB))
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 26400
diff changeset
967 return VO_FALSE;
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
968
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
969 if ((mpi->flags & MP_IMGFLAG_ACCEPT_STRIDE) ||
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
970 (mpi->flags & MP_IMGFLAG_ACCEPT_WIDTH &&
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
971 ((vo_dga_bytes_per_line + vo_dga_vp_skip) % (mpi->bpp / 8)) == 0)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
972 || (mpi->width * (mpi->bpp / 8) ==
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
973 (vo_dga_bytes_per_line + vo_dga_vp_skip)))
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
974 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
975
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
976 mpi->planes[0] = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
977 mpi->stride[0] = vo_dga_bytes_per_line + vo_dga_vp_skip;
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
978 mpi->width =
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
979 (vo_dga_bytes_per_line + vo_dga_vp_skip) / (mpi->bpp / 8);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
980 mpi->flags |= MP_IMGFLAG_DIRECT;
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 26400
diff changeset
981 return VO_TRUE;
8084
c524ca26ace1 arpi add direct render support
pontscho
parents: 8067
diff changeset
982 }
c524ca26ace1 arpi add direct render support
pontscho
parents: 8067
diff changeset
983
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 26400
diff changeset
984 return VO_FALSE;
8084
c524ca26ace1 arpi add direct render support
pontscho
parents: 8067
diff changeset
985 }
c524ca26ace1 arpi add direct render support
pontscho
parents: 8067
diff changeset
986
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15212
diff changeset
987 static int control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
988 {
12582
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
989 switch (request)
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
990 {
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
991 case VOCTRL_GET_IMAGE:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
992 return get_image(data);
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
993 case VOCTRL_QUERY_FORMAT:
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
994 return query_format(*((uint32_t *) data));
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
995 }
162c80b2d432 major reindentation of x11 code try #2
attila
parents: 11183
diff changeset
996 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
997 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4060
diff changeset
998
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
999 //---------------------------------------------------------