annotate libvo/vo_dga.c @ 25317:7f3cb5408f28

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