BEVEZETÉS. Ez a dokumentum megpróbálja pár szóban elmagyarázni, hogy mi is az a DGA tulajdonképpen és mit tehet a DGA vezérlő az MPlayernek (és mit nem).
MI AZ A DGA.
A DGA a Direct Graphics Access
rövidítése és azt jelenti, hogy egy program az X szerver megkerülésével
direkt eléréssel módosíthatja a framebuffer memóriát. Gyakorlatilag ez úgy
történik, hogy a framebuffer memória a processzed memória tartományába
kerül leképezésre. Ezt a kernel csak superuser jogokkal engedélyezi. Vagy
root
néven történő bejelentkezéssel
vagy az MPlayer futtatható állományának SUID
bitjének beállításával juthatsz ilyen jogokhoz. (nem
javasoljuk).
Két verziója van a DGA-nak: a DGA1 az XFree 3.x.x-ban volt használatos, a DGA2 az XFree 4.0.1-ben került bevezetésre.
A DGA1 csak direkt framebuffer elérést biztosít a fent leírt módszerrel. A videó jel felbontásának megváltoztatásához az XVidMode kiterjesztést kell használnod.
A DGA2 már tartalmazza az XVidMode kiterjesztés képességeit és a képernyő színmélységét is engedi változtatni. Így alaphelyzetben 32 bites színmélységben futtatott X szervert átállíthatsz 15 bites mélységre és vissza.
Ennek ellenére a DGA-nak van néhány hátránya. Úgy tűnik ez az általad használt grafikus chip-től függ és az ezen chip-et irányító vezérlő X szerverben való megvalósításától. Így nem minden rendszeren működik...
DGA TÁMOGATÁS TELEPÍTÉSE AZ MPLAYERHEZ.
Először győződj meg, hogy az X betölti a DGA kiterjesztést: lásd
a /var/log/XFree86.0.log
fájlt:
(II) Loading extension XFree86-DGA
XFree86 4.0.x vagy újabb
nagyon javasolt!
Az MPlayer DGA vezérlőjét a
./configure
automatikusan megtalálja, de elő is írhatod
a használatát a --enable-dga
kapcsolóval.
Ha a vezérlő nem tud kisebb felbontásra váltani, kísérletezz a
-vm
(csak X 3.3.x esetén), -fs
,
-bpp
, -zoom
kapcsolókkal a filmnek
legmegfelelőbb videó mód megtalálásához. Még nincs konverter :(
Lépj be root
ként. A DGA-hoz root
elérés kell, hogy közvetlenül tudjon írni a videó memóriába. Ha felhasználóként
akarod futtatni, telepítsd az MPlayert SUID root-tal:
chown root/usr/local/bin/mplayer
chmod 750/usr/local/bin/mplayer
chmod +s/usr/local/bin/mplayer
Így már egyszerű felhasználók esetében is működik.
Ez nagy biztonsági kockázatot jelent! Soha ne csináld ezt meg egy szerveren vagy egy olyan számítógépen amihez mások is hozzáférnek, mert root jogokat szerezhetnek a SUID root-os MPlayerrel.
Használd a -vo dga
kapcsolót, és már megy is! (reméljük:)
Kipróbálhatod a -vo sdl:driver=dga
kapcsolót is, hogy működik-e!
Sokkal gyorsabb!
FELBONTÁS VÁLTÁS.
A DGA vezérlő lehetővé teszi a kimeneti jel felbontásának megváltoztatását.
Ezzel elkerülhető a (lassú) szoftveres méretezés és ugyanakkor teljes képernyős
képet biztosít. Ideális helyzetben pontosan a videó adat felbontására vált
(kivéve az aspect arányt), de az X szerver csak a
/etc/X11/XF86Config
(/etc/X11/XF86Config-4
XFree 4.X.X esetén)
fájlban előírt felbontásokra enged váltani.
Ezeket modline-oknak nevezik és a videó hardvered tulajdonságain múlik.
Az X szerver átnézi ezt a konfigurációs fájlt indításkor és letiltja a
hardverednek nem megfelelőeket.
Az X11 log fájlból kiderítheted, hogy mely módok engedélyezettek. Megtalálhatóak
a /var/log/XFree86.0.log
fájlban.
Ezek a bejegyzések tudvalevőleg működnek Riva128 chip-en, az nv.o X szerver vezérlő modul használatával.
Section "Modes" Identifier "Modes[0]" 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
DGA & MPLAYER.
A DGA két helyen használható az MPlayerben: Az
SDL vezérlőnek előírhatod a használatát (-vo sdl:driver=dga
)
és a DGA vezérlőben (-vo dga
). A fent említettek vonatkoznak
mind a kettőre; a következő részben leírom, hogyan működik az
MPlayer DGA vezérlője.
TULAJDONSÁGOK.
A DGA vezérlő használatát a -vo dga
kapcsoló parancssorban
történő megadásával írhatod elő. Alapértelmezésként az videó eredeti
felbontásához legközelebb álló felbontásra vált. Szándékosan figyelmen
kívül hagyja a -vm
és -fs
kapcsolókat
(videó mód váltás engedélyezése és teljes képernyő) - mindig a lehető
legtöbbet megpróbálja elfedni a képernyődből a videó mód váltásával, így
megspórolja a képméretezéshez szükséges plusz CPU ciklusokat. Ha nem
tetszik az általa választott mód, kényszerítheted, hogy az általad megadott
felbontáshoz legközelebbit keresse meg az -x
és
-y
kapcsolókkal. A -v
kapcsoló beírásának
hatására a DGA vezérlő sok egyéb mellett kilistázza az aktuális
XF86Config
fájl által támogatott összes felbontást.
DGA2 használata esetén előírhatod a színmélységet is a -bpp
kapcsolóval. Az érvényes színmélységek 15, 16, 24 és 32. A hardvereden
múlik, hogy ezek a színmélységek alapból támogatottak-e vagy (valószínűleg
lassú) konverziót kell végezni.
Ha vagy olyan szerencsés, hogy elegendő memóriád van az egész, nem képernyőn lévő kép bemásolásához, a DGA vezérlő dupla bufferelést fog használni, ami egyenletesebb film lejátszást eredményez. Kiírja, hogy a dupla bufferelés engedélyezett-e vagy sem.
A dupla bufferelés azt jelenti,h ogy a videód következő képkockája a memória egy nem megjelenített részére másolódik, amíg az aktuális képkocka van a képernyőn. Ha kész a következő képkocka, a grafikus chip megkapja az új kép memóriabeli helyét, és egyszerűen onnan megjeleníti a képet. Eközben a másik buffer ismét feltöltődik új videó adattal.
A dupla bufferelés bekapcsolható a -double
kapcsolóval, vagy
letiltható a -nodouble
-lal. A jelenlegi alapértelmezett
beállítás szerint le van tiltva a dupla bufferelés. DGA vezérlő használata
esetén az onscreen display (OSD) csak akkor működik, ha a dupla bufferelés
engedélyezve van. Azonban a dupla bufferelés nagy sebességcsökkenéssel járhat
(az én K6-II+ 525 gépemen további 20% CPU idő!) a hardvered DGA implementációjától
függően.
SEBESSÉGI ADATOK. Általánosságban a DGA framebuffer elérésének legalább olyan gyorsnak kell lennie, mint az X11-es vezérlőnek a teljes képernyős képhez szükséges kiegészítők használatával. Az MPlayer által kiírt százalékos sebesség értékeket azonban fenntartással kezeld, mert például az X11-es vezérlő esetén nem tartalmazzák azt az időt, ami az X szervernek kell a kirajzoláshoz. Hurkold rá a terminált egy soros vonalra és indítsd el a top programot, akkor megtudod mi is történik valójában a dobozodban.
Kijelenthetjük, hogy a DGA gyorsítása a 'normális' X11-es használathoz képest erőteljesen függ a grafikus kártyádtól és hogy a hozzá tartozó X szerver modul mennyire optimalizált.
Ha lassú rendszered van, jobb ha 15 vagy 16 bites színmélységet használsz, mivel ezek fele akkora memória sávszélességet igényelnek, mint a 32 bites megjelenítés.
A 24 bites színmélység használata jó ötlet, ha a kártyád natívan támogatja a 32 bites mélységet, mivel ez is 25%-kal kevesebb adatátvitelt jelent a 32/32 módhoz képest.
Láttam pár AVI fájlt 266-os Pentium MMX-en lejátszva. Az AMD K6-2 CPU-k is működnek 400 MHZ vagy afölött.
ISMERT HIBÁK. Nos, az XFree néhány fejlesztője szerint a DGA egy szörnyeteg. Ők azt mondják, jobb ha nem használod. Az implementációja nem mindig tökéletes az XFree-hez tartozó chipset vezérlőkkel.
Az XFree 4.0.3 és az nv.o
esetén van egy hiba, ami
érdekes színeket eredményez.
ATI vezérlő esetén egynél többször kell visszaváltani a módot a DGA-s lejátszás után.
Néhány vezérlő egyszerűen képtelen visszaváltani normál felbontásra (használd a Ctrl+Alt+Keypad + és Ctrl+Alt+Keypad - kombinációkat a kézi váltáshoz).
Néhány vezérlő egyszerűen rossz színeket jelenít meg.
Néhány vezérlő hamis adatot ad a processz címterébe bemappolt memória méretéről, így a vo_dga nem használ dupla bufferelést (SIS?).
Néhány vezérlő egy használható módot sem jelez. Ebben az esetben a DGA vezérlő összeomlik és azt írja, hogy 100000x100000-es értelmetlen mód vagy valami hasonló.
Az OSD csak engedélyezett dupla buffereléssel működik (különben villog).