annotate libvo/vo_dga.c @ 1346:d6e6132bff35

AUDIO_ENCODING_LINEAR8 format is not available on sunos 5.5. Format is unsupported in mplayer for now, to get the code compiled on that old version of the OS.
author jkeil
date Thu, 19 Jul 2001 20:04:54 +0000
parents 345165f41f1b
children d40f2b686846
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1 #define DISP
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
2
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
3 /*
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
4 * $Id$
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
5 *
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
6 * video_out_dga.c, X11 interface
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
7 *
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
8 *
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
9 * Copyright ( C ) 2001, Andreas Ackermann. All Rights Reserved.
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
10 *
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
11 * <acki@acki-netz.de>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
12 *
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
13 * Sourceforge username: acki2
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
14 *
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
15 * note well:
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
16 *
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
17 * - covers only common video card formats i.e.
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
18 * BGR_16_15_555
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
19 * BGR_16_16_565
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
20 * BGR_24_24_888
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
21 * BGR_32_24_888
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
22 *
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
23 * - works only on x86 architectures
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
24 *
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
25 * $Log$
1336
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
26 * Revision 1.29 2001/07/16 18:41:52 jkeil
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
27 * vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
28 *
1268
9877eaacff9e extern vo_doublebuffering cleanup
arpi
parents: 1193
diff changeset
29 * Revision 1.28 2001/07/03 23:45:49 arpi
9877eaacff9e extern vo_doublebuffering cleanup
arpi
parents: 1193
diff changeset
30 * extern vo_doublebuffering cleanup
9877eaacff9e extern vo_doublebuffering cleanup
arpi
parents: 1193
diff changeset
31 *
1193
3f6d86a97541 Fixed pointer->integer cast warning.
atmosfear
parents: 1158
diff changeset
32 * Revision 1.27 2001/06/22 19:51:25 atmosfear
3f6d86a97541 Fixed pointer->integer cast warning.
atmosfear
parents: 1158
diff changeset
33 * Fixed pointer->integer cast warning.
3f6d86a97541 Fixed pointer->integer cast warning.
atmosfear
parents: 1158
diff changeset
34 *
1158
fad3e9babbb6 - just modified an error message
acki2
parents: 1154
diff changeset
35 * Revision 1.26 2001/06/18 16:38:06 acki2
fad3e9babbb6 - just modified an error message
acki2
parents: 1154
diff changeset
36 * - just modified an error message
fad3e9babbb6 - just modified an error message
acki2
parents: 1154
diff changeset
37 *
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
38 * Revision 1.25 2001/06/17 22:21:47 acki2
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
39 * - if DGA fails to report some valid modes, vo_dga now exits gracefully
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
40 * instead of crashing ... (100000x100000 bug ...)
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
41 *
1150
8682a16321db - doublebuffering now can be switched on and off with the -(no)double switch.
acki2
parents: 865
diff changeset
42 * Revision 1.24 2001/06/17 20:59:39 acki2
8682a16321db - doublebuffering now can be switched on and off with the -(no)double switch.
acki2
parents: 865
diff changeset
43 * - doublebuffering now can be switched on and off with the -(no)double switch.
8682a16321db - doublebuffering now can be switched on and off with the -(no)double switch.
acki2
parents: 865
diff changeset
44 * Default in libvo is disabled.
8682a16321db - doublebuffering now can be switched on and off with the -(no)double switch.
acki2
parents: 865
diff changeset
45 *
865
83919c1b9924 removed redundant osd.h includes
arpi_esp
parents: 720
diff changeset
46 * Revision 1.23 2001/05/24 20:48:45 arpi_esp
83919c1b9924 removed redundant osd.h includes
arpi_esp
parents: 720
diff changeset
47 * removed redundant osd.h includes
83919c1b9924 removed redundant osd.h includes
arpi_esp
parents: 720
diff changeset
48 *
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
49 * Revision 1.22 2001/05/07 19:16:04 acki2
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
50 * - now chooses mode with highest ymax (enables doublebuffering in some cases
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
51 * it didn't work before)
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
52 * - use my own memcopy() on non MMX machines again
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
53 * - do memcpy() in one single block if stride==0
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
54 *
691
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
55 * Revision 1.21 2001/05/03 22:39:38 acki2
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
56 * - finally: 15to16 conversion included!!!
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
57 *
690
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
58 * Revision 1.20 2001/05/02 23:21:27 acki2
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
59 * - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
60 *
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
61 * Revision 1.19 2001/05/01 22:37:37 acki2
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
62 * - now features 24->32 conversion (this is actually faster than letting the
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
63 * codec produce depth 32 in the first place for avis :-))) )
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
64 *
677
ee2dac2cc633 - now mpeg is fast again (no more offscreen buffer rubbish) But is it really ok?
acki2
parents: 616
diff changeset
65 * Revision 1.18 2001/05/01 20:24:31 acki2
ee2dac2cc633 - now mpeg is fast again (no more offscreen buffer rubbish) But is it really ok?
acki2
parents: 616
diff changeset
66 * - now mpeg is fast again (no more offscreen buffer rubbish) But is it really ok?
ee2dac2cc633 - now mpeg is fast again (no more offscreen buffer rubbish) But is it really ok?
acki2
parents: 616
diff changeset
67 *
616
41d6eec69b60 clean up
pontscho
parents: 612
diff changeset
68 * Revision 1.17 2001/04/24 11:42:04 pontscho
41d6eec69b60 clean up
pontscho
parents: 612
diff changeset
69 * clean up
41d6eec69b60 clean up
pontscho
parents: 612
diff changeset
70 *
612
77e0094f0cce some warnings killed
szabii
parents: 533
diff changeset
71 * Revision 1.16 2001/04/24 10:21:12 szabii
77e0094f0cce some warnings killed
szabii
parents: 533
diff changeset
72 * some warnings killed
77e0094f0cce some warnings killed
szabii
parents: 533
diff changeset
73 *
533
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
74 * Revision 1.15 2001/04/19 21:39:10 arpi_esp
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
75 * driver info now depends on detected DGA version
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
76 *
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
77 * Revision 1.14 2001/04/17 22:28:09 acki2
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
78 * - now also supports OSD for YV12 (big speed penalty by having to build image
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
79 * in offscreen memory and then copying;
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
80 * - OSD still works just with doublebuffering enabled :-(
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
81 *
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
82 * Revision 1.13 2001/04/17 20:51:58 acki2
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
83 * - query_format() now uses new return value concept
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
84 * - now support for OSD :-))) for RGB modes
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
85 * YV12 is flickering in quite an ugly fashion; have to fix this, but
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
86 * will cost an extra copying of image data ... :-(((
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
87 *
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
88 * Revision 1.12 2001/04/13 22:11:08 acki2
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
89 * - fixed bug with depth and mpg when current bpp of XServer was != 32
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
90 * - when -bpp is selected, I accept only query_modes() for THIS particular depth
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
91 * (if it's supported by hardware)
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
92 *
272
8ffe2f459851 - still more debug output to be able to fix 15/16 bpp problem
acki2
parents: 266
diff changeset
93 * Revision 1.10 2001/04/01 22:01:28 acki2
8ffe2f459851 - still more debug output to be able to fix 15/16 bpp problem
acki2
parents: 266
diff changeset
94 * - still more debug output to be able to fix 15/16 bpp problem
8ffe2f459851 - still more debug output to be able to fix 15/16 bpp problem
acki2
parents: 266
diff changeset
95 *
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
96 * Revision 1.9 2001/04/01 08:07:14 acki2
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
97 * - added detection of memsize of graphics card to check if double buffering is possible
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
98 * - fixed resolution switching a little and added more debug output
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
99 * - resolution switching is still according to d_width and d_height which
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
100 * is not always a good idea ...
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
101 *
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
102 *
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
103 * 30/02/2001
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
104 *
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
105 * o query_format(): with DGA 2.0 it returns all depths it supports
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
106 * (even 16 when running 32 and vice versa)
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
107 * Checks for (hopefully!) compatible RGBmasks in 15/16 bit modes
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
108 * o added some more criterions for resolution switching
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
109 * o cleanup
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
110 * o with DGA2.0 present, ONLY DGA2.0 functions are used
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
111 * o for 15/16 modes ONLY RGB 555 is supported, since the divx-codec
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
112 * happens to map the data this way. If your graphics card supports
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
113 * this, you're well off and may use these modes; for mpeg
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
114 * movies things could be different, but I was too lazy to implement
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
115 * it ...
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
116 * o you may define VO_DGA_FORCE_DEPTH to the depth you desire
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
117 * if you don't like the choice the driver makes
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
118 * Beware: unless you can use DGA2.0 this has to be your X Servers
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
119 * depth!!!
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
120 * o Added double buffering :-))
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
121 * o included VidMode switching support for DGA1.0, written by Michael Graffam
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
122 * mgraffam@idsi.net
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
123 *
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
124 */
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
125
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
126 //#define VO_DGA_DBG 1
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
127 //#undef HAVE_DGA2
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
128 //#undef HAVE_XF86VM
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
129
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
130 #include <stdio.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
131 #include <stdlib.h>
1336
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
132 #include <stdarg.h>
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
133 #include <string.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
134
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
135 #include "config.h"
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
136 #include "video_out.h"
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
137 #include "video_out_internal.h"
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
138 #include "yuv2rgb.h"
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
139
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
140 LIBVO_EXTERN( dga )
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
141
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
142 #include <X11/Xlib.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
143 #include <X11/extensions/xf86dga.h>
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
144
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
145 #ifdef HAVE_XF86VM
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
146 #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
147 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
148
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
149
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
150 #include "x11_common.h"
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
151
690
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
152 #include "fastmemcpy.h"
691
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
153
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
154 extern void rgb15to16_mmx(char* s0,char* d0,int count);
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
155
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
156 static vo_info_t vo_info =
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
157 {
533
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
158 #ifdef HAVE_DGA2
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
159 "DGA ( Direct Graphic Access V2.0 )",
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
160 #else
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
161 "DGA ( Direct Graphic Access V1.0+XF86VidModeExtension )",
ca59ef4ce54d driver info now depends on detected DGA version
arpi_esp
parents: 493
diff changeset
162 #endif
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
163 "dga",
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
164 "Andreas Ackermann <acki@acki-netz.de>",
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
165 ""
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
166 };
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
167
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
168
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
169 //------------------------------------------------------------------
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
170
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
171
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
172 //#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
173 //#define BYTESPP (vo_dga_modes[vo_dga_active_mode].vdm_bytespp)
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
174
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
175 #define VO_DGA_INVALID_RES 100000
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
176
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
177 #define HW_MODE (vo_dga_modes[vo_dga_hw_mode])
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
178 #define SRC_MODE (vo_dga_modes[vo_dga_src_mode])
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
179
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
180 struct vd_modes {
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
181 int vdm_mplayer_depth;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
182 int vdm_supported;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
183 int vdm_depth;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
184 int vdm_bitspp;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
185 int vdm_bytespp;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
186 int vdm_rmask;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
187 int vdm_gmask;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
188 int vdm_bmask;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
189 int vdm_hw_mode;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
190 int vdm_conversion_func;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
191 };
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
192
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
193 //------------------------------------------------------------------
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
194
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
195 #define VDM_CONV_NATIVE 0
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
196 #define VDM_CONV_15TO16 1
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
197 #define VDM_CONV_24TO32 2
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
198
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
199 static struct vd_modes vo_dga_modes[] = {
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
200 // these entries describe HW modes
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
201 // however, we use the same entries to tell mplayer what we support
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
202 // so the last two values describe, which HW mode to use and which conversion
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
203 // function to use for a mode that is not supported by HW
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
204
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
205 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
206 { 15, 0, 15, 16, 2, 0x7c00, 0x03e0, 0x001f, 2, VDM_CONV_15TO16 },
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
207 { 16, 0, 16, 16, 2, 0xf800, 0x07e0, 0x001f, 2, VDM_CONV_NATIVE },
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
208 { 24, 0, 24, 24, 3, 0xff0000, 0x00ff00, 0x0000ff, 4, VDM_CONV_24TO32},
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
209 { 32, 0, 24, 32, 4, 0x00ff0000, 0x0000ff00, 0x000000ff, 4, VDM_CONV_NATIVE}
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
210 };
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
211
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
212 static int vo_dga_mode_num = sizeof(vo_dga_modes)/sizeof(struct vd_modes);
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
213
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
214 // enable a HW mode (by description)
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
215 int vd_EnableMode( int depth, int bitspp,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
216 int rmask, int gmask, int bmask){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
217 int i;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
218 for(i=1; i<vo_dga_mode_num; i++){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
219 if(vo_dga_modes[i].vdm_depth == depth &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
220 vo_dga_modes[i].vdm_bitspp == bitspp &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
221 vo_dga_modes[i].vdm_rmask == rmask &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
222 vo_dga_modes[i].vdm_gmask == gmask &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
223 vo_dga_modes[i].vdm_bmask == bmask){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
224 vo_dga_modes[i].vdm_supported = 1;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
225 vo_dga_modes[i].vdm_hw_mode = i;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
226 vo_dga_modes[i].vdm_conversion_func = VDM_CONV_NATIVE;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
227 return i;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
228 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
229 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
230 return 0;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
231 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
232
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
233 int vd_ModeEqual(int depth, int bitspp,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
234 int rmask, int gmask, int bmask, int index){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
235 return (
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
236 (vo_dga_modes[index].vdm_depth == depth &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
237 vo_dga_modes[index].vdm_bitspp == bitspp &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
238 vo_dga_modes[index].vdm_rmask == rmask &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
239 vo_dga_modes[index].vdm_gmask == gmask &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
240 vo_dga_modes[index].vdm_bmask == bmask)
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
241 ? 1 : 0);
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
242 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
243
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
244
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
245 // enable a HW mode (mplayer_depth decides which)
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
246 int vd_ValidateMode( int mplayer_depth){
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
247 int i;
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
248 if(mplayer_depth == 0)return 0;
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
249 for(i=1; i<vo_dga_mode_num; i++){
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
250 if(vo_dga_modes[i].vdm_mplayer_depth == mplayer_depth ){
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
251 vo_dga_modes[i].vdm_supported = 1;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
252 vo_dga_modes[i].vdm_hw_mode = i;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
253 vo_dga_modes[i].vdm_conversion_func = VDM_CONV_NATIVE;
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
254 return i;
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
255 }
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
256 }
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
257 return 0;
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
258 }
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
259
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
260 // do we support this mode? (not important whether native or conversion)
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
261 int vd_ModeValid( int mplayer_depth){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
262 int i;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
263 if(mplayer_depth == 0)return 0;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
264 for(i=1; i<vo_dga_mode_num; i++){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
265 if(vo_dga_modes[i].vdm_mplayer_depth == mplayer_depth &&
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
266 vo_dga_modes[i].vdm_supported != 0){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
267 return i;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
268 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
269 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
270 return 0;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
271 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
272
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
273 char *vd_GetModeString(int index){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
274
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
275 #define VO_DGA_MAX_STRING_LEN 100
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
276 static char stringbuf[VO_DGA_MAX_STRING_LEN];
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
277 stringbuf[VO_DGA_MAX_STRING_LEN-1]=0;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
278 snprintf(stringbuf, VO_DGA_MAX_STRING_LEN-2,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
279 "depth=%d, bpp=%d, r=%06x, g=%06x, b=%06x, %s (-bpp %d)",
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
280 vo_dga_modes[index].vdm_depth,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
281 vo_dga_modes[index].vdm_bitspp,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
282 vo_dga_modes[index].vdm_rmask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
283 vo_dga_modes[index].vdm_gmask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
284 vo_dga_modes[index].vdm_bmask,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
285 vo_dga_modes[index].vdm_supported ?
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
286 (vo_dga_modes[index].vdm_conversion_func == VDM_CONV_NATIVE ?
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
287 "native (fast), " : "conversion (slow),") :
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
288 "not supported :-( ",
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
289 vo_dga_modes[index].vdm_mplayer_depth);
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
290 return stringbuf;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
291 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
292
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
293 //-----------------------------------------------------------------
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
294
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
295 #ifdef HAVE_XF86VM
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
296 static XF86VidModeModeInfo **vo_dga_vidmodes=NULL;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
297 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
298
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
299
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
300 extern int verbose;
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
301
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
302 static int vo_dga_src_format;
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
303 static int vo_dga_width; // bytes per line in framebuffer
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
304 static int vo_dga_vp_width; // visible pixels per line in
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
305 // framebuffer
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
306 static int vo_dga_vp_height; // visible lines in framebuffer
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
307 static int vo_dga_is_running = 0;
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
308 static int vo_dga_src_width; // width of video in pixels
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
309 static int vo_dga_src_height; // height of video in pixels
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
310 static int vo_dga_src_offset=0; // offset in src
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
311 static int vo_dga_vp_offset=0; // offset in dest
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
312 static int vo_dga_bytes_per_line; // bytes per line to copy
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
313 static int vo_dga_src_skip; // bytes to skip after copying one
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
314 // line
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
315 // (not supported yet) in src
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
316 static int vo_dga_vp_skip; // dto. for dest
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
317 static int vo_dga_lines; // num of lines to copy
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
318 static int vo_dga_hw_mode = 0; // index in mode list that is actually
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
319 // used by framebuffer
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
320 static int vo_dga_src_mode = 0; // index in mode list that is used by
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
321 // codec
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
322 static int vo_dga_XServer_mode = 0;// index in mode list for resolution
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
323 // XServer is running
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
324
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
325 static int vo_dga_dbf_mem_offset; // offset in bytes for alternative
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
326 // framebuffer (0 if dbf is not
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
327 // possible)
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
328 static int vo_dga_dbf_y_offset; // y offset (in scanlines)
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
329 static int
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
330 vo_dga_dbf_current; // current buffer (0 or 1)
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
331
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
332 static unsigned char *vo_dga_base;
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
333 static Display *vo_dga_dpy;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
334
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
335 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
336
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
337 #define VD_INFO 0
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
338 #define VD_ERR 0
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
339 #define VD_DBG 2
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
340 #define VD_RES 1
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
341
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
342 void vd_printf( int level, const char *str, ...){
1336
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
343 va_list ap;
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
344
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
345 #ifndef VO_DGA_DBG
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
346 // show resolution and DBG-messages only in verbose mode ...
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
347 if( !verbose && level)return;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
348 #endif
1336
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
349
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
350 va_start(ap, str);
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
351 vprintf(str, ap);
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
352 va_end(ap);
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
353 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
354
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
355 //---------------------------------------------------------
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
356
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
357 static void draw_alpha( int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride ){
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
358
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
359 char *d;
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
360 unsigned int offset;
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
361 unsigned int buffer_stride;
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
362
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
363 offset = vo_dga_width * y0 +x0;
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
364 buffer_stride = vo_dga_width;
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
365 d = (&((char *)vo_dga_base)[vo_dga_vp_offset + vo_dga_dbf_current * vo_dga_dbf_mem_offset]);
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
366
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
367 switch( HW_MODE.vdm_mplayer_depth ){
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
368
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
369 case 32:
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
370 vo_draw_alpha_rgb32(w,h,src,srca,stride, d+4*offset , 4*buffer_stride);
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
371 break;
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
372 case 24:
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
373 vo_draw_alpha_rgb24(w,h,src,srca,stride, d+3*offset , 3*buffer_stride);
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
374 break;
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
375 case 15:
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
376 vo_draw_alpha_rgb15(w,h,src,srca,stride, d+2*offset , 2*buffer_stride);
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
377 break;
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
378 case 16:
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
379 vo_draw_alpha_rgb16(w,h,src,srca,stride, d+2*offset , 2*buffer_stride);
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
380 break;
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
381 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
382 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
383
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
384
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
385 //---------------------------------------------------------
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
386
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
387
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
388
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
389 // I had tried to work with mmx/3dnow copy code but
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
390 // there was not much speed gain and I didn't know
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
391 // how to save the FPU/mmx registers - so the copy
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
392 // code interferred with sound output ...
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
393 // removed the leftovers
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
394 // acki2 on 30/3/2001
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
395
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
396
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
397 #define rep_movsl(dest, src, numwords, d_add, count) \
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
398 __asm__ __volatile__( \
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
399 " \
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
400 1: \n\t\
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
401 movl %%edx, %%ecx \n\t \
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
402 cld\n\t \
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
403 rep\n\t \
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
404 movsl \n\t\
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
405 add %%eax, %%edi \n\t\
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
406 dec %%ebx \n\t\
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
407 jnz 1b \n\t\
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
408 " \
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
409 : \
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
410 : "a" (d_add), "b" (count), "S" (src), "D" (dest), \
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
411 "d" (numwords) \
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
412 : "memory" )
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
413
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
414 // quick & dirty - for debugging only
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
415
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
416 void fillblock(char *strt, int yoff, int lines, int val){
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
417 char *i;
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
418 for(i = strt + yoff * vo_dga_width *HW_MODE.vdm_bytespp;
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
419 i< strt + (lines+yoff) * vo_dga_width *HW_MODE.vdm_bytespp; ){
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
420 *i++ = val;
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
421 }
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
422 }
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
423
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
424
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
425 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
426
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
427 static uint32_t draw_frame( uint8_t *src[] ){
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
428
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
429 int vp_skip = vo_dga_vp_skip;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
430 int lpl = vo_dga_bytes_per_line >> 2;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
431 int numlines = vo_dga_lines;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
432
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
433 char *s, *d;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
434
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
435 s = *src;
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
436 d = (&((char *)vo_dga_base)[vo_dga_vp_offset + vo_dga_dbf_current * vo_dga_dbf_mem_offset]);
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
437
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
438 switch(SRC_MODE.vdm_conversion_func){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
439 case VDM_CONV_NATIVE:
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
440
1336
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
441 #if defined(HAVE_MMX) || !defined(ARCH_X86)
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
442 // use the code from fastmemcpy.h on x86,
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
443 // or ordinary memcpy on non-x86 cpus.
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
444 if(vo_dga_vp_skip){
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
445 // use some stride ...
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
446 int i;
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
447 for(i=0; i< vo_dga_lines; i++){
690
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
448 memcpy(d, s, vo_dga_bytes_per_line);
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
449 d+=vo_dga_vp_skip;
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
450 d+=vo_dga_bytes_per_line;
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
451 s+=vo_dga_bytes_per_line;
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
452 }
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
453 }else{
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
454 // no stride, cool + fast ...
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
455 memcpy(d,s, vo_dga_bytes_per_line * vo_dga_lines);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
456 }
1336
345165f41f1b vo_dga doesn't compile on non-x86 architecture due to x86 asm usage.
jkeil
parents: 1268
diff changeset
457 #else /* ARCH_X86 and NO_MMX */
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
458 // use some homebrewn assembly code ...
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
459 rep_movsl(d, s, lpl, vo_dga_vp_skip, numlines );
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
460 #endif
690
2094b195a9bc - now we use fastmemcpy() for copying. Saves about 25% of copying time on K6-2+
acki2
parents: 680
diff changeset
461
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
462 // DBG-COde
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
463
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
464 #if 0
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
465 d = (&((char *)vo_dga_base)[vo_dga_vp_offset + vo_dga_dbf_current * vo_dga_dbf_mem_offset]);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
466 fillblock(d, 0, 10, 0x800000ff);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
467 fillblock(d, 10, 10, 0x8000ff00);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
468 fillblock(d, 20, 10, 0x80ff0000);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
469 fillblock(d, 30, 10, 0xff0000ff);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
470 fillblock(d, 40, 10, 0x800000ff);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
471 fillblock(d, 50, 10, 0x0f0000ff);
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
472 #endif
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
473 break;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
474 case VDM_CONV_15TO16:
691
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
475 {
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
476 int i;
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
477 char *e;
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
478 for(i=0; i< vo_dga_lines; i++){
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
479 #ifdef HAVE_MMX
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
480 rgb15to16_mmx( s, d, vo_dga_bytes_per_line);
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
481 d+=vo_dga_bytes_per_line;
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
482 s+=vo_dga_bytes_per_line;
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
483 #else
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
484 e = s+vo_dga_bytes_per_line;
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
485 while( s< e ){
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
486 register uint16_t x = *(((uint16_t *)s)++);
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
487 *(((uint16_t *)d)++)=( x&0x001F )|( ( x&0x7FE0 )<<1 );
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
488 }
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
489
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
490 #endif
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
491 d+= vo_dga_vp_skip;
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
492 }
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
493 }
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
494 break;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
495 case VDM_CONV_24TO32:
691
3693fd4c4ec2 - finally: 15to16 conversion included!!!
acki2
parents: 690
diff changeset
496
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
497 {
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
498 int i,k,l,m;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
499 for(i = 0; i< vo_dga_lines; i++ ){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
500 for(k = 0; k< vo_dga_src_width; k+=2 ){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
501 l = *(((uint32_t *)s)++);
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
502 m = (l & 0xff000000)>> 24 ;
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
503 *(((uint32_t *)d)++) = (l & 0x00ffffff); // | 0x80000000;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
504 m |= *(((uint16_t *)s)++) << 8;
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
505 *(((uint32_t *)d)++) = m; // | 0x80000000 ;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
506 }
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
507 d+= vp_skip;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
508 }
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
509 }
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
510 //printf("vo_dga: 24 to 32 not implemented yet!!!\n");
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
511 break;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
512 }
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
513 return 0;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
514 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
515
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
516 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
517
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
518 static void check_events(void)
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
519 {
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
520 int e=vo_x11_check_events(vo_dga_dpy);
31
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
521 }
1fc618eba830 added check_events() interface
arpi_esp
parents: 13
diff changeset
522
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
523 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
524
616
41d6eec69b60 clean up
pontscho
parents: 612
diff changeset
525 #include "sub.h"
612
77e0094f0cce some warnings killed
szabii
parents: 533
diff changeset
526
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
527 static void flip_page( void ){
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
528
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
529 if(vo_dga_dbf_mem_offset != 0){
1150
8682a16321db - doublebuffering now can be switched on and off with the -(no)double switch.
acki2
parents: 865
diff changeset
530 vo_draw_text(vo_dga_src_width,vo_dga_src_height,draw_alpha);
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
531
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
532 #ifdef HAVE_DGA2
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
533 XDGASetViewport (vo_dga_dpy, XDefaultScreen(vo_dga_dpy),
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
534 0, vo_dga_dbf_current * vo_dga_dbf_y_offset,
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
535 XDGAFlipRetrace);
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
536 #else
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
537 XF86DGASetViewPort (vo_dga_dpy, XDefaultScreen(vo_dga_dpy),
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
538 0, vo_dga_dbf_current * vo_dga_dbf_y_offset);
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
539 #endif
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
540 vo_dga_dbf_current = 1 - vo_dga_dbf_current;
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
541 }
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
542 check_events();
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
543 }
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
544
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
545 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
546
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
547 static uint32_t draw_slice( uint8_t *src[],int stride[],
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
548 int w,int h,int x,int y )
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
549 {
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
550
677
ee2dac2cc633 - now mpeg is fast again (no more offscreen buffer rubbish) But is it really ok?
acki2
parents: 616
diff changeset
551 yuv2rgb( vo_dga_base + vo_dga_dbf_current * vo_dga_dbf_mem_offset + vo_dga_vp_offset +
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
552 (vo_dga_width * y +x) * HW_MODE.vdm_bytespp,
677
ee2dac2cc633 - now mpeg is fast again (no more offscreen buffer rubbish) But is it really ok?
acki2
parents: 616
diff changeset
553 src[0], src[1], src[2],
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
554 w,h, vo_dga_width * HW_MODE.vdm_bytespp,
677
ee2dac2cc633 - now mpeg is fast again (no more offscreen buffer rubbish) But is it really ok?
acki2
parents: 616
diff changeset
555 stride[0],stride[1] );
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
556 return 0;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
557 };
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
558
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
559 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
560
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
561
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
562 static void Terminate_Display_Process( void ){
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
563 vd_printf(VD_DBG, "vo_dga: Terminating display process\n");
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
564 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
565
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
566 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
567
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
568 static const vo_info_t* get_info( void )
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
569 { return &vo_info; }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
570
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
571 //---------------------------------------------------------
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
572
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
573 static uint32_t query_format( uint32_t format )
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
574 {
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
575
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
576 #ifdef HAVE_DGA2
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
577 XDGAMode *modelines;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
578 int modecount;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
579 #endif
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
580 Display *qdisp;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
581
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
582 int i;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
583 static int dga_depths_init = 0;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
584
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
585 if(dga_depths_init == 0){
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
586
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
587 if((qdisp = XOpenDisplay(0))==NULL){
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
588 vd_printf(VD_ERR, "vo_dga: Can't open display!\n");
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
589 return 0;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
590 }
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
591 if( !vo_init() ){
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
592 vd_printf(VD_ERR, "vo_dga: vo_init() failed!\n");
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
593 return 1;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
594 }
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
595 vo_dga_XServer_mode = vd_ValidateMode(vo_depthonscreen);
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
596
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
597 if(vo_dga_XServer_mode ==0){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
598 #ifndef HAVE_DGA2
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
599 vd_printf(VD_ERR, "vo_dga: Your X-Server is not running in a ");
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
600 vd_printf(VD_ERR, "resolution supported by DGA driver!\n");
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
601 #endif
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
602 }//else{
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
603 // vd_printf(VD_INFO, "vo_dga: X running at: %s\n",
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
604 // vd_GetModeString(vo_dga_XServer_mode));
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
605 //}
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
606
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
607 #ifdef HAVE_DGA2
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
608 modelines=XDGAQueryModes(qdisp, XDefaultScreen(qdisp),&modecount);
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
609 if(modelines){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
610 for(i=0; i< modecount; i++){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
611 vd_printf(VD_DBG, "vo_dga: (%03d) depth=%d, bpp=%d, r=%08x, g=%08x, b=%08x, %d x %d\n",
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
612 i,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
613 modelines[i].depth,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
614 modelines[i].bitsPerPixel,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
615 modelines[i].redMask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
616 modelines[i].greenMask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
617 modelines[i].blueMask,
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
618 modelines[i].viewportWidth,
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
619 modelines[i].viewportHeight);
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
620 vd_EnableMode(
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
621 modelines[i].depth,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
622 modelines[i].bitsPerPixel,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
623 modelines[i].redMask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
624 modelines[i].greenMask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
625 modelines[i].blueMask);
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
626 }
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
627 XFree(modelines);
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
628
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
629 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
630 #endif
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
631 dga_depths_init = 1;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
632 XCloseDisplay(qdisp);
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
633
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
634 if( !vo_dga_modes[1].vdm_supported && vo_dga_modes[2].vdm_supported ){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
635 vo_dga_modes[1].vdm_supported = 1;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
636 }
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
637
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
638 if( !vo_dga_modes[3].vdm_supported && vo_dga_modes[4].vdm_supported ){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
639 vo_dga_modes[3].vdm_supported = 1;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
640 }
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
641
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
642 for(i=1; i<vo_dga_mode_num; i++){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
643 vd_printf(VD_INFO, "vo_dga: Mode: %s", vd_GetModeString(i));
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
644 if(vo_dbpp && vo_dbpp != vo_dga_modes[i].vdm_mplayer_depth){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
645 vo_dga_modes[i].vdm_supported = 0;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
646 vd_printf(VD_INFO, " ...disabled by -bpp %d", vo_dbpp );
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
647 }
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
648 vd_printf(VD_INFO, "\n");
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
649 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
650 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
651
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
652 // TODO: respect bit for native/not native
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
653 if( format==IMGFMT_YV12 ) return 7;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
654
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
655 if( (format&IMGFMT_BGR_MASK) == IMGFMT_BGR &&
490
caf5ddb0d19a - query_format() now uses new return value concept
acki2
parents: 395
diff changeset
656 vd_ModeValid(format&0xff)) return 7;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
657
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
658 return 0;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
659 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
660
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
661 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
662
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
663 static void
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
664 uninit(void)
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
665 {
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
666
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
667 #ifdef HAVE_DGA2
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
668 XDGADevice *dgadevice;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
669 #endif
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
670
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
671 if(vo_dga_is_running){
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
672 vo_dga_is_running = 0;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
673 vd_printf( VD_DBG, "vo_dga: in uninit\n");
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
674 XUngrabPointer (vo_dga_dpy, CurrentTime);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
675 XUngrabKeyboard (vo_dga_dpy, CurrentTime);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
676 #ifdef HAVE_DGA2
395
01768a027e7d - fixed bug with depth and mpg when current bpp of XServer was != 32
acki2
parents: 392
diff changeset
677 XDGACloseFramebuffer(vo_dga_dpy, XDefaultScreen(vo_dga_dpy));
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
678 dgadevice = XDGASetMode(vo_dga_dpy, XDefaultScreen(vo_dga_dpy), 0);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
679 if(dgadevice != NULL){
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
680 XFree(dgadevice);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
681 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
682 #else
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
683 XF86DGADirectVideo (vo_dga_dpy, XDefaultScreen(vo_dga_dpy), 0);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
684 // first disable DirectVideo and then switch mode back!
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
685 #ifdef HAVE_XF86VM
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
686 if (vo_dga_vidmodes != NULL ){
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
687 int screen; screen=XDefaultScreen( vo_dga_dpy );
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
688 vd_printf(VD_DBG, "vo_dga: VidModeExt: Switching back..\n");
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
689 // seems some graphics adaptors need this more than once ...
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
690 XF86VidModeSwitchToMode(vo_dga_dpy,screen,vo_dga_vidmodes[0]);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
691 XF86VidModeSwitchToMode(vo_dga_dpy,screen,vo_dga_vidmodes[0]);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
692 XF86VidModeSwitchToMode(vo_dga_dpy,screen,vo_dga_vidmodes[0]);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
693 XF86VidModeSwitchToMode(vo_dga_dpy,screen,vo_dga_vidmodes[0]);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
694 XFree(vo_dga_vidmodes);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
695 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
696 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
697 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
698 XCloseDisplay(vo_dga_dpy);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
699 }
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
700 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
701
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
702
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
703 //----------------------------------------------------------
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
704 // TODO: check for larger maxy value
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
705 // (useful for double buffering!!!)
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
706
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
707 int check_res( int num, int x, int y, int bpp,
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
708 int new_x, int new_y, int new_vbi, int new_maxy,
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
709 int *old_x, int *old_y, int *old_vbi, int *old_maxy){
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
710
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
711 vd_printf(VD_RES, "vo_dga: (%3d) Trying %4d x %4d @ %3d Hz @ depth %2d ..",
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
712 num, new_x, new_y, new_vbi, bpp );
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
713 vd_printf(VD_RES, "(old: %dx%d@%d).", *old_x, *old_y, *old_vbi);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
714 if (
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
715 (new_x >= x) &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
716 (new_y >= y) &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
717 (
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
718 // prefer a better resolution either in X or in Y
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
719 // as long as the other dimension is at least the same
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
720 //
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
721 // hmm ... MAYBE it would be more clever to focus on the
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
722 // x-resolution; I had 712x400 and 640x480 and the movie
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
723 // was 640x360; 640x480 would be the 'right thing' here
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
724 // but since 712x400 was queried first I got this one.
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
725 // I think there should be a cmd-line switch to let the
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
726 // user choose the mode he likes ... (acki2)
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
727
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
728 (
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
729 ((new_x < *old_x) &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
730 !(new_y > *old_y)) ||
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
731 ((new_y < *old_y) &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
732 !(new_x > *old_x))
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
733 )
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
734 // but if we get an identical resolution choose
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
735 // the one with the lower refreshrate (saves bandwidth !!!)
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
736 // as long as it's above 50 Hz (acki2 on 30/3/2001)
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
737 ||
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
738 (
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
739 (new_x == *old_x) &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
740 (new_y == *old_y) &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
741 (
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
742 (
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
743 new_vbi >= *old_vbi && *old_vbi < 50
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
744 )
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
745 ||
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
746 (
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
747 *old_vbi >= 50 &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
748 new_vbi < *old_vbi &&
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
749 new_vbi >= 50
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
750 )
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
751 )
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
752 ||
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
753 // if everything is equal, then use the mode with the lower
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
754 // stride
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
755 (
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
756 (new_x == *old_x) &&
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
757 (new_y == *old_y) &&
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
758 (new_vbi == *old_vbi) &&
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
759 (new_maxy > *old_maxy)
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
760 )
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
761 )
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
762 )
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
763 )
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
764 {
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
765 *old_x = new_x;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
766 *old_y = new_y;
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
767 *old_maxy = new_maxy;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
768 *old_vbi = new_vbi;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
769 vd_printf(VD_RES, ".ok!!\n");
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
770 return 1;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
771 }else{
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
772 vd_printf(VD_RES, ".no\n");
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
773 return 0;
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
774 }
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
775 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
776
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
777
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
778
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
779 //---------------------------------------------------------
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
780
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
781 static uint32_t init( uint32_t width, uint32_t height,
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
782 uint32_t d_width,uint32_t d_height,
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
783 uint32_t fullscreen,char *title,uint32_t format )
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
784 {
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
785
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
786 int x_off, y_off;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
787 int wanted_width, wanted_height;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
788
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
789 #ifdef HAVE_DGA2
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
790 // needed to change DGA video mode
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
791 int modecount, mX=VO_DGA_INVALID_RES, mY=VO_DGA_INVALID_RES , mVBI=100000, mMaxY=0, i,j=0;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
792 int dga_modenum;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
793 XDGAMode *modelines=NULL;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
794 XDGADevice *dgadevice;
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
795 int max_vpy_pos;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
796 #else
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
797 #ifdef HAVE_XF86VM
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
798 unsigned int vm_event, vm_error;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
799 unsigned int vm_ver, vm_rev;
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
800 int i, j=0, have_vm=0;
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
801 int modecount, mX=VO_DGA_INVALID_RES, mY=VO_DGA_INVALID_RES, mVBI=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
802 #endif
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
803 int bank, ram;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
804 #endif
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
805
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
806 if( vo_dga_is_running )return -1;
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
807 vo_dga_src_format = format;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
808 wanted_width = d_width;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
809 wanted_height = d_height;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
810
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
811 if(!wanted_height) wanted_height = height;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
812 if(!wanted_width) wanted_width = width;
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
813
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
814 if( !vo_init() ){
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
815 vd_printf(VD_ERR, "vo_dga: vo_init() failed!\n");
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
816 return 1;
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
817 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
818
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
819 if( !vo_dbpp ){
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
820
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
821 if (format == IMGFMT_YV12){
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
822 vo_dga_src_mode = vo_dga_XServer_mode;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
823 }else if((format & IMGFMT_BGR_MASK) == IMGFMT_BGR){
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
824 vo_dga_src_mode = vd_ModeValid( format & 0xff );
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
825 }
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
826 }else{
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
827 vo_dga_src_mode = vd_ModeValid(vo_dbpp);
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
828 }
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
829 vo_dga_hw_mode = SRC_MODE.vdm_hw_mode;
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
830
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
831 if( format == IMGFMT_YV12 && vo_dga_src_mode != vo_dga_hw_mode ){
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
832 vd_printf(VD_ERR,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
833 "vo_dga: YV12 supports native modes only. Using %d instead of selected %d.\n",
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
834 HW_MODE.vdm_mplayer_depth,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
835 SRC_MODE.vdm_mplayer_depth );
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
836 vo_dga_src_mode = vo_dga_hw_mode;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
837 }
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
838
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
839 if(!vo_dga_src_mode){
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
840 vd_printf(VD_ERR, "vo_dga: unsupported video format!\n");
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
841 return 1;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
842 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
843
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
844 if((vo_dga_dpy = XOpenDisplay(0))==NULL){
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
845 vd_printf (VD_ERR, "vo_dga: Can't open display\n");
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
846 return 1;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
847 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
848
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
849 vo_dga_vp_width = DisplayWidth( vo_dga_dpy, DefaultScreen(vo_dga_dpy));
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
850 vo_dga_vp_height = DisplayHeight( vo_dga_dpy, DefaultScreen(vo_dga_dpy));
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
851
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
852 vd_printf(VD_DBG, "vo_dga: XServer res: %dx%d\n",
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
853 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
854
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
855 // choose a suitable mode ...
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
856
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
857 #ifdef HAVE_DGA2
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
858 // Code to change the video mode added by Michael Graffam
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
859 // mgraffam@idsi.net
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
860 if (modelines==NULL)
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
861 modelines=XDGAQueryModes(vo_dga_dpy, XDefaultScreen(vo_dga_dpy),&modecount);
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
862
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
863 vd_printf(VD_INFO,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
864 "vo_dga: DGA 2.0 available :-) Can switch resolution AND depth!\n");
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
865 for (i=0; i<modecount; i++)
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
866 {
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
867 if(vd_ModeEqual( modelines[i].depth,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
868 modelines[i].bitsPerPixel,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
869 modelines[i].redMask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
870 modelines[i].greenMask,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
871 modelines[i].blueMask,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
872 vo_dga_hw_mode)){
272
8ffe2f459851 - still more debug output to be able to fix 15/16 bpp problem
acki2
parents: 266
diff changeset
873
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
874 vd_printf(VD_DBG, "maxy: %4d, depth: %2d, %4dx%4d, ",
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
875 modelines[i].maxViewportY, modelines[i].depth,
272
8ffe2f459851 - still more debug output to be able to fix 15/16 bpp problem
acki2
parents: 266
diff changeset
876 modelines[i].imageWidth, modelines[i].imageHeight );
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
877 if ( check_res(i, wanted_width, wanted_height, modelines[i].depth,
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
878 modelines[i].viewportWidth,
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
879 modelines[i].viewportHeight,
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
880 (unsigned) modelines[i].verticalRefresh,
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
881 modelines[i].maxViewportY,
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
882 &mX, &mY, &mVBI, &mMaxY )) j = i;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
883 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
884 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
885 vd_printf(VD_INFO,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
886 "vo_dga: Selected hardware mode %4d x %4d @ %3d Hz @ depth %2d, bitspp %2d.\n",
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
887 mX, mY, mVBI,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
888 HW_MODE.vdm_depth,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
889 HW_MODE.vdm_bitspp);
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
890 vd_printf(VD_INFO,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
891 "vo_dga: Video parameters by codec: %3d x %3d, depth %2d, bitspp %2d.\n",
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
892 width, height,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
893 SRC_MODE.vdm_depth,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
894 SRC_MODE.vdm_bitspp);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
895 vo_dga_vp_width =mX;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
896 vo_dga_vp_height = mY;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
897 vo_dga_width = modelines[j].bytesPerScanline / HW_MODE.vdm_bytespp ;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
898 dga_modenum = modelines[j].num;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
899 max_vpy_pos = modelines[j].maxViewportY;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
900
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
901 XFree(modelines);
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
902 modelines = NULL;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
903
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
904 #else
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
905
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
906 #ifdef HAVE_XF86VM
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
907
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
908 vd_printf( VD_INFO,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
909 "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
910
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
911 if (XF86VidModeQueryExtension(vo_dga_dpy, &vm_event, &vm_error)) {
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
912 XF86VidModeQueryVersion(vo_dga_dpy, &vm_ver, &vm_rev);
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
913 vd_printf(VD_INFO, "vo_dga: XF86VidMode Extension v%i.%i\n", vm_ver, vm_rev);
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
914 have_vm=1;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
915 } else {
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
916 vd_printf(VD_ERR, "vo_dga: XF86VidMode Extension not available.\n");
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
917 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
918
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
919 #define GET_VREFRESH(dotclk, x, y)( (((dotclk)/(x))*1000)/(y) )
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
920
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
921 if (have_vm) {
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
922 int screen;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
923 screen=XDefaultScreen(vo_dga_dpy);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
924 XF86VidModeGetAllModeLines(vo_dga_dpy,screen,&modecount,&vo_dga_vidmodes);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
925
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
926 if(vo_dga_vidmodes != NULL ){
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
927 for (i=0; i<modecount; i++){
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
928 if ( check_res(i, wanted_width, wanted_height,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
929 vo_dga_modes[vo_dga_hw_mode].vdm_depth,
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
930 vo_dga_vidmodes[i]->hdisplay,
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
931 vo_dga_vidmodes[i]->vdisplay,
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
932 GET_VREFRESH(vo_dga_vidmodes[i]->dotclock,
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
933 vo_dga_vidmodes[i]->htotal,
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
934 vo_dga_vidmodes[i]->vtotal),
720
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
935 0,
8146b106816a - now chooses mode with highest ymax (enables doublebuffering in some cases
acki2
parents: 691
diff changeset
936 &mX, &mY, &mVBI, &mMaxY )) j = i;
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
937 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
938
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
939 vd_printf(VD_INFO,
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
940 "vo_dga: Selected video mode %4d x %4d @ %3d Hz @ depth %2d, bitspp %2d, video %3d x %3d.\n",
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
941 mX, mY, mVBI,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
942 vo_dga_modes[vo_dga_hw_mode].vdm_depth,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
943 vo_dga_modes[vo_dga_hw_mode].vdm_bitspp,
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
944 width, height);
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
945 }else{
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
946 vd_printf(VD_INFO, "vo_dga: XF86VidMode returned no screens - using current resolution.\n");
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
947 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
948 dga_modenum = j;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
949 vo_dga_vp_width = mX;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
950 vo_dga_vp_height = mY;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
951 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
952
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
953
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
954 #else
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
955 vd_printf( VD_INFO, "vo_dga: Only have DGA 1.0 extension and no XF86VidMode :-(\n");
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
956 vd_printf( VD_INFO, " Thus, resolution switching is NOT possible.\n");
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
957
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
958 #endif
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
959 #endif
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
960
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
961 vo_dga_src_width = width;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
962 vo_dga_src_height = height;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
963
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
964 if(vo_dga_src_width > vo_dga_vp_width ||
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
965 vo_dga_src_height > vo_dga_vp_height)
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
966 {
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
967 vd_printf( VD_ERR, "vo_dga: Sorry, video larger than viewport is not yet supported!\n");
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
968 // 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
969 #ifndef HAVE_DGA2
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
970 #ifdef HAVE_XF86VM
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
971 if(vo_dga_vidmodes){
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
972 XFree(vo_dga_vidmodes);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
973 vo_dga_vidmodes = NULL;
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
974 }
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
975 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
976 #endif
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
977 return 1;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
978 }
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
979
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
980 if(vo_dga_vp_width == VO_DGA_INVALID_RES){
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
981 vd_printf( VD_ERR, "vo_dga: Something is wrong with your DGA. There doesn't seem to be a\n"
1158
fad3e9babbb6 - just modified an error message
acki2
parents: 1154
diff changeset
982 " single suitable mode!\n"
fad3e9babbb6 - just modified an error message
acki2
parents: 1154
diff changeset
983 " Please file a bug report (see DOCS/DGA)\n");
1154
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
984 #ifndef HAVE_DGA2
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
985 #ifdef HAVE_XF86VM
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
986 if(vo_dga_vidmodes){
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
987 XFree(vo_dga_vidmodes);
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
988 vo_dga_vidmodes = NULL;
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
989 }
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
990 #endif
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
991 #endif
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
992 return 1;
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
993 }
4bf4e057c82e - if DGA fails to report some valid modes, vo_dga now exits gracefully
acki2
parents: 1150
diff changeset
994
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
995 // now lets start the DGA thing
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
996
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
997 #ifdef HAVE_DGA2
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
998
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
999 if (!XDGAOpenFramebuffer(vo_dga_dpy, XDefaultScreen(vo_dga_dpy))){
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1000 vd_printf(VD_ERR, "vo_dga: Framebuffer mapping failed!!!\n");
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1001 XCloseDisplay(vo_dga_dpy);
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1002 return 1;
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1003 }
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1004 dgadevice=XDGASetMode(vo_dga_dpy, XDefaultScreen(vo_dga_dpy), dga_modenum);
221
3daeae4a4aa6 Added support to vo_dga to change the video mode to the lowest resolution
mgraffam
parents: 31
diff changeset
1005 XDGASync(vo_dga_dpy, XDefaultScreen(vo_dga_dpy));
3daeae4a4aa6 Added support to vo_dga to change the video mode to the lowest resolution
mgraffam
parents: 31
diff changeset
1006
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1007 vo_dga_base = dgadevice->data;
221
3daeae4a4aa6 Added support to vo_dga to change the video mode to the lowest resolution
mgraffam
parents: 31
diff changeset
1008 XFree(dgadevice);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1009
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1010 XDGASetViewport (vo_dga_dpy, XDefaultScreen(vo_dga_dpy), 0, 0, XDGAFlipRetrace);
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1011
233
f62ccacbe1e5 Changes to configure to autodetect DGA 2.0 functionality, and to only use
mgraffam
parents: 221
diff changeset
1012 #else
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1013
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1014 #ifdef HAVE_XF86VM
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1015 XF86VidModeLockModeSwitch(vo_dga_dpy,XDefaultScreen(vo_dga_dpy),0);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1016 // Two calls are needed to switch modes on my ATI Rage 128. Why?
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1017 // for riva128 one call is enough!
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1018 XF86VidModeSwitchToMode(vo_dga_dpy,XDefaultScreen(vo_dga_dpy),vo_dga_vidmodes[dga_modenum]);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1019 XF86VidModeSwitchToMode(vo_dga_dpy,XDefaultScreen(vo_dga_dpy),vo_dga_vidmodes[dga_modenum]);
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1020 #endif
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1021
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1022 XF86DGAGetViewPortSize(vo_dga_dpy,XDefaultScreen(vo_dga_dpy),
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1023 &vo_dga_vp_width,
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1024 &vo_dga_vp_height);
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1025
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1026 XF86DGAGetVideo (vo_dga_dpy, XDefaultScreen(vo_dga_dpy),
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1027 (char **)&vo_dga_base, &vo_dga_width, &bank, &ram);
233
f62ccacbe1e5 Changes to configure to autodetect DGA 2.0 functionality, and to only use
mgraffam
parents: 221
diff changeset
1028
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1029 XF86DGADirectVideo (vo_dga_dpy, XDefaultScreen(vo_dga_dpy),
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1030 XF86DGADirectGraphics | XF86DGADirectMouse |
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1031 XF86DGADirectKeyb);
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1032
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1033 XF86DGASetViewPort (vo_dga_dpy, XDefaultScreen(vo_dga_dpy), 0, 0);
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1034
233
f62ccacbe1e5 Changes to configure to autodetect DGA 2.0 functionality, and to only use
mgraffam
parents: 221
diff changeset
1035 #endif
f62ccacbe1e5 Changes to configure to autodetect DGA 2.0 functionality, and to only use
mgraffam
parents: 221
diff changeset
1036
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1037 // do some more checkings here ...
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1038
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1039 if( format==IMGFMT_YV12 ){
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1040 yuv2rgb_init( vo_dga_modes[vo_dga_hw_mode].vdm_mplayer_depth , MODE_RGB );
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1041 vd_printf( VD_DBG, "vo_dga: Using mplayer depth %d for YV12\n",
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1042 vo_dga_modes[vo_dga_hw_mode].vdm_mplayer_depth);
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1043 }
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1044
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1045 vd_printf(VD_DBG, "vo_dga: bytes/line: %d, screen res: %dx%d, depth: %d, base: %08x, bpp: %d\n",
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1046 vo_dga_width, vo_dga_vp_width,
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1047 vo_dga_vp_height, HW_MODE.vdm_bytespp, vo_dga_base,
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1048 HW_MODE.vdm_bitspp);
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1049
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1050 x_off = (vo_dga_vp_width - vo_dga_src_width)>>1;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1051 y_off = (vo_dga_vp_height - vo_dga_src_height)>>1;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1052
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1053 vo_dga_bytes_per_line = vo_dga_src_width * HW_MODE.vdm_bytespp;
261
3b7e4bf7c7ed - 32/16 bit mode swtiching with DGA2.0
acki2
parents: 260
diff changeset
1054 vo_dga_lines = vo_dga_src_height;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1055
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1056 vo_dga_src_offset = 0;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1057 vo_dga_vp_offset = (y_off * vo_dga_width + x_off ) * HW_MODE.vdm_bytespp;
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1058
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1059 vo_dga_vp_skip = (vo_dga_width - vo_dga_src_width) * HW_MODE.vdm_bytespp; // todo
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1060
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1061 vd_printf(VD_DBG, "vo_dga: vp_off=%d, vp_skip=%d, bpl=%d\n",
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1062 vo_dga_vp_offset, vo_dga_vp_skip, vo_dga_bytes_per_line);
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1063
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1064
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1065 XGrabKeyboard (vo_dga_dpy, DefaultRootWindow(vo_dga_dpy), True,
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1066 GrabModeAsync,GrabModeAsync, CurrentTime);
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1067 XGrabPointer (vo_dga_dpy, DefaultRootWindow(vo_dga_dpy), True,
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1068 ButtonPressMask,GrabModeAsync, GrabModeAsync,
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1069 None, None, CurrentTime);
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1070 // TODO: chekc if mem of graphics adaptor is large enough for dbf
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1071
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1072 // set up variables for double buffering ...
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1073 // note: set vo_dga_dbf_mem_offset to NULL to disable doublebuffering
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1074
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1075 vo_dga_dbf_y_offset = y_off + vo_dga_src_height;
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1076 vo_dga_dbf_mem_offset = vo_dga_width * HW_MODE.vdm_bytespp * vo_dga_dbf_y_offset;
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1077 vo_dga_dbf_current = 0;
1150
8682a16321db - doublebuffering now can be switched on and off with the -(no)double switch.
acki2
parents: 865
diff changeset
1078
8682a16321db - doublebuffering now can be switched on and off with the -(no)double switch.
acki2
parents: 865
diff changeset
1079
1193
3f6d86a97541 Fixed pointer->integer cast warning.
atmosfear
parents: 1158
diff changeset
1080 if(!vo_doublebuffering) vo_dga_dbf_mem_offset = 0;
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1081
493
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
1082 // if(format ==IMGFMT_YV12 )
b8f1ed2b411b - now also supports OSD for YV12 (big speed penalty by having to build image
acki2
parents: 490
diff changeset
1083 //vo_dga_dbf_mem_offset = 0;
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1084 // disable doublebuffering for YV12
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1085
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1086 #ifdef HAVE_DGA2
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1087 if(vo_dga_vp_height>max_vpy_pos){
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1088 vo_dga_dbf_mem_offset = 0;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1089 vd_printf(VD_INFO, "vo_dga: Not enough memory for double buffering!\n");
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1090 }
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1091 #endif
262
2c7c77d793df - added double buffering :-)
acki2
parents: 261
diff changeset
1092
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1093 // now clear screen
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1094 {
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1095 int size = vo_dga_width *
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1096 (vo_dga_vp_height + (vo_dga_dbf_mem_offset != 0 ?
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1097 (vo_dga_src_height+y_off) : 0)) *
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1098 HW_MODE.vdm_bytespp;
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1099 #ifndef HAVE_DGA2
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1100 vd_printf(VD_DBG, "vo_dga: wanted size=%d, fb-size=%d\n", size, ram);
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1101 if(size>ram*1024){
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1102 vo_dga_dbf_mem_offset = 0;
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1103 vd_printf(VD_INFO, "vo_dga: Not enough memory for double buffering!\n");
680
fbd9327b899b - now features 24->32 conversion (this is actually faster than letting the
acki2
parents: 677
diff changeset
1104 size -= (vo_dga_src_height+y_off) * vo_dga_width * HW_MODE.vdm_bytespp;
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1105 }
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1106 #endif
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1107
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1108 vd_printf(VD_INFO, "vo_dga: Clearing framebuffer (%d bytes). If mplayer exits", size);
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1109 vd_printf(VD_INFO, " here, you haven't enough memory on your card.\n");
266
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1110 fflush(stdout);
336b1559a447 - added detection of memsize of graphics card to check if double buffering is possible
acki2
parents: 263
diff changeset
1111 memset(vo_dga_base, 0, size);
263
78e8925fd6b4 - added VidMode changing support for DGA1.0 (used code from Michael Graffam (mgraffam@idsi.net))
acki2
parents: 262
diff changeset
1112 }
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1113 vd_printf(VD_INFO, "vo_dga: Doublebuffering is %s.\n", vo_dga_dbf_mem_offset ? "enabled" : "disabled");
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1114 vo_dga_is_running = 1;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1115 return 0;
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1116 }
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1117
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1118 //---------------------------------------------------------
13
36314c7bda8d initial version
arpi_esp
parents:
diff changeset
1119
260
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1120 // deleted the old vo_dga_query_event() routine 'cause it is obsolete
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1121 // since using check_events()
1742ea658d0b Source cleanup. Improved resolution selection (I think :-)).
acki2
parents: 233
diff changeset
1122 // acki2 on 30/3/2001
392
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1123
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1124
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1125
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1126
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1127
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1128
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1129
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1130
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1131
50214d6c1826 - completely rewrote depth switching
acki2
parents: 272
diff changeset
1132