mpv/DOCS/DGA

129 lines
4.4 KiB
Plaintext

Contents
~~~~~~~~
1. Summary
2. What is DGA
3. Resolution switching
4. DGA & MPlayer
5. Features of the DGA driver
6. Speed issues
7. Known bugs
8. Future work
A. Some modelines
1. Summary
~~~~~~~~~~
This document tries to explain in some words what DGA is in general and
what the DGA video output driver for mplayer can do (and what it can't).
2. What is DGA?
~~~~~~~~~~~~~~~
DGA is short for Direct Graphics Access and is a method for a program to
bypass the X-Server and directly modify the framebuffer memory.
Technically spoken this happens by mapping the framebuffer memory into
the memory range of your process. This is only allowed by the kernel
if you have superuser privileges. You can get these either by logging in
as root or by setting the suid bit on the mplayer executable (NOT
recommended!).
There are two versions of DGA: DGA1 is used by XFree 3.x.x and DGA2 was
introduced with XFree 4.0.1.
DGA1 provides only the direct framebuffer access as described above. For
switching the resolution of the video signal you have to rely on the
XVidMode extension.
DGA2 incorporated the features of XVidMode extension and also allows
switching the depth of the display. So you may, although basically
running a 32 bit depth XServer, switch to a depth of 15 bits and vice
versa.
However DGA has some drawbacks. It seems it is somewhat dependent on the
graphics chip you use and on the implementation of the XServer's video
driver that controls this chip. So it does not work on every system ...
3. Resolution switching
~~~~~~~~~~~~~~~~~~~~~~~
The DGA driver allows for switching the resolution of the output signal.
This avoids the need for doing (slow) software scaling and at the same
time provides a fullscreen image. Ideally it would switch to the exact
resolution (except for honouring aspect ratio) of the video data, but the
XServer only allows switching to resolutions predefined in
/etc/X11/XF86Config (/etc/X11/XF86Config-4 for XFree 4.0.X respectively).
Those are defined by so-called modelines and depend on the capabilites
of your video hardware. The XServer scans this config file on startup and
disables the modelines not suitable for your hardware. You can find
out which modes survive with the X11 log file. It can be found at:
/var/log/XFree86.0.log
See appendix A for some sample modeline definitions.
4. DGA & MPlayer
~~~~~~~~~~~~~~~~
DGA is used in two places with MPlayer: The SDL driver can be made to make
use of it (-vo sdl -sdl dga) and within the DGA driver (-vo dga).
The above said is true for both; in the following sections I'll explain
how the DGA driver for MPlayer works.
5. Features of the DGA driver
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The DGA driver is invoked by specifying -vo dga at the command line.
... to be continued during the next days ...
# An advantage of this method is that you are in full control of the
# framebuffer and can put your hand on the code that is used for copying
# to the framebuffer. However there are two disadvantages:
# First, you control the screen - no more windowmanager functionally - just
# the one application that uses DGA is visible.
# Second you
# Do it like this (you got to be root for this):
# chown root /usr/local/bin/mplayer
# chmod 750 /usr/local/bin/mplayer
# chmod +s /usr/local/bin/mplayer
# Now it works for simple users, too.
# !!!! BUT STAY TUNED !!!!
# This is a BIG security risk! Never do this on a server or on a computer
# can be accessed by more people than only you because they can gain root
# privilegies through suid root mplayer.
# !!!! SO YOU HAVE BEEN WARNED ... !!!!
#
A. Sample modelines
~~~~~~~~~~~~~~~~~~~
Section "Modes"
Identifier "Modes[0]"
# 800x600 @ 60 Hz, 37.8 kHz hsync
Modeline "800x600" 40 800 840 968 1056 600 601 605 628
Modeline "712x600" 35.0 712 740 850 900 400 410 412 425
Modeline "640x480" 25.175 640 664 760 800 480 491 493 525
Modeline "400x300" 20 400 416 480 528 300 301 303 314 Doublescan
Modeline "352x288" 25.10 352 368 416 432 288 296 290 310
Modeline "352x240" 15.750 352 368 416 432 240 244 246 262 Doublescan
Modeline "320x240" 12.588 320 336 384 400 240 245 246 262 Doublescan
EndSection
These entries work fine with my Riva128 chip, using nv.o XServer driver
module.
Acki (acki@acki-netz.de, www.acki-netz.de) 17.5.2001