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).