7.3. DGA
Předcházející | Kapitola 7. Výstupní video zařízení/rozhraní | Další

## 7.3. DGA

PŘEDMLUVA. Tento dokument se několika slovy snaží vysvětlit co je to DGA a co výstupní videorozhraní DGA pro MPlayer udělat může (a co ne).

CO JE DGA. DGA je zkratka pro Direct Graphics Access, což je program pro obejití X servru a přímou modifikaci paměti framebufferu. Technicky to znamená mapování paměti framebufferu do paměťového prostoru vašeho procesu. To kernel umožňuje pouze pokud máte práva superuživatele. Ty dostanete buď nalogováním se jako `root`, nebo nastavením SUID bitu spustitelnému souboru MPlayeru (nedoporučujeme ).

Existují dvě verze DGA: DGA1 je používáno XFree 3.x.x a DGA2 bylo představeno v XFree 4.0.1.

DGA1 poskytuje pouze přímý přístup k framebufferu jak byl popsán výše. Chcete-li přepínat rozlišení videosignálu, musíte se spolehnout na rozšíření XVidMode.

DGA2 zahrnuje vlastnosti rozšíření XVidMode a rovněž umožňuje přepínat barevnou hloubku zobrazovače. Takže můžete jendoduše provozovat X server s hloubkou 32 bitů a přepnout na barevnou hloubku 15 bitů a naopak.

DGA má ovšem i jisté obtíže. Zdá se, že je nějak závislé na grafickém čipu, který používáte a na implementaci video ovladače X serveru, který tento čip obsluhuje. Takže nefunguje na všech systémech...

INSTALACE PODPORY DGA PRO MPLAYER. Nejprve si ověřte, že X nahrávají rozšíření DGA, viz v `/var/log/XFree86.0.log`:

    (II) Loading extension XFree86-DGA

XFree86 4.0.x nebo vyšší je vřele doporučován! Video rozhraní DGA MPlayeru je autodetekováno `./configure`, nebo jej můžete vynutit pomocí `--enable-dga`.

Pokud rozhraní nemůže přepnout do menšího rozlišení, experimentujte s volbami `-vm` (pouze s X 3.3.x), `-fs`, `-bpp`, `-zoom`, abyste nalezli videorežim, do kterého se video napasuje. Momentálně není žádný převodník :(

Staňte se `root`em. DGA vyžaduje práva roota, aby mohl přímo zapisovat do video paměti. Pokud jej chcete provozovat jako uživatel, pak nainstalujte MPlayer jako SUID root:

    chown root /usr/local/bin/mplayer
    chmod 750 /usr/local/bin/mplayer
    chmod +s /usr/local/bin/mplayer

A nyní to bude pracovat také pod obyčejným uživatelem.

### Bezpečnostní riziko

Toto je velké bezpečnostní riziko! Nikdy to nedělejte na serveru nebo počítači ke kterému mohou mít přístup ostatní lidé, jelikož ti mohou získat superuživatelská práva díky SUID root MPlayeru.

Nyní použijte volbu `-vo dga` a je to! (doufám:) Také byste měli vyzkoušet, jestli vám pracuje volba `-vo sdl:dga`! Je mnohem rychlejší!

PŘEPÍNÁNÍ ROZLIŠENÍ. Rozhraní DGA umožňuje přepínání rozlišení výstupního signálu. To odstraňuje potřebu (pomalého) softwarového škálování a zároveň poskytuje obraz na celou obrazovku. Ideálně by se mělo přepnout na přesné rozlišení (s výjimkou dodržení poměru stran) video dat, ale X server umožňuje poze přepínání do rozlišení předdefinovaných v `/etc/X11/XF86Config` (nebo `/etc/X11/XF86Config-4` pro XFree 4.X.X). Ty jsou definovány takzvanými "modelines" a závisí na schopnostech vašeho video hardwaru. X server projíždí tento konfigurační soubor při startu a zakáže režimy (modelines) nevhodné pro váš hardware. Povolené videorežimy naleznete v X11 log souboru. Tel lze nalézt zde: `/var/log/XFree86.0.log`.

Tyto vstupy jsou známy dobrou funkcí na Riva128 čipu, s použitím modulu ovladače nv.o X serveru.

    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. DGA je v MPlayeru použito na dvou místech: SDL rozhraní může být nastaveno pro jeho použití (`-vo sdl:dga`) a přímé DGA rozhraní (`-vo dga`). Výše uvedené je platné pro obě varianty; v následující sekci vysvětlíme jak pracuje DGA rozhraní MPlayeru.

VLASTNOSTI. DGA rozhraní je použito zadáním volby `-vo dga` na příkazovém řádku. Výchozím chováním je přepnout na rozlišení co nejbižší originálním rozměrům videa. Zcela záměrně se ignorují volby `-vm` a `-fs` (umožňující přepínání videorežimů a zobrazení na celou obrazovku) - vždy zkouší pokrýt tak velkou plochu obrazovky, jak je to jen možné pomocí přepnutí videorežimu, což nás oprostí od využívání dalších CPU cyklů pro škálování obrazu. Pokud se vám nelíbí režim, který vybere automatika, můžete ji přinutit pro výběr režimu nejblíže odpovídajícímu rozlišení, které zadáte pomocí `-x` a `-y`. Při zadání volby `-v`, vypíše DGA rozhraní, spolu s dalšími věcmi, seznam všech rozlišení podporovaných vašim aktuálním `XF86Config` souborem. Máte-li DGA2, můžete jej rovněž přinutit použít různé barevné hloubky pomocí volby `-bpp`. Platné barevné hloubky jsou 15, 16, 24 a 32. To jestli jsou tyto barevné hloubky nativně podporovány, nebo musí být provedena (pravděpodobně pomalá) konverze závisí na vašem hardware.

Pokud jste natolik šťastlivci, že máte dostatek volné mimoobrazové paměti, aby se zde vměstnal celý obrázek, použije DGA rozhraní dvojitou vyrovnávací paměť, což vám zajistí mnohem plynulejší přehrávání filmů. Rozhraní vás bude informovat jestli je dvojitý buffer zapnutý nebo ne.

Dvojitou vyrovnávací pamětí se rozumí to, že je další snímek vykreslován do paměti mimo zobrazovanou plochu, zatímco je zobrazován aktuální snímek. Jakmile je další snímek připraven, grafický čip je informován o pozici v paměti, kde je nový snímek a jednoduše přesune data k zobrazení odtud. Mezitím je další buffer v paměti zaplňován novými videodaty.

Dvojitá vyrovnávací paměť může být zapnuta volbou `-double` a vypnuta volbou `-nodouble`. Současná výchozí hodnota je vypnutí dvojité vyrovnávací paměti. Při použití DGA rozhraní bude display na obrazovce (OSD) pracovat pouze při zapnuté dvojité vyrovnávací paměti. Zapnutí dvojité vyrovnávací paměti však může vyústit velkou ztrátou výkonu (na mé K6-II+ 525 to použije dalších 20% CPU výkonu!) v závislosti na implementaci DGA pro váš hardware.

OTÁZKA RYCHLOSTI. Obecně by přístup přes DGA framebuffer měl být alespoň tak rychlý jako použití rozhraní X11 navíc s celoobrazovkovým režimem. Procentní hodnoty rychlosti vypisované MPlayerem byste měli brát s rezervou, jelikož například při použití X11 nezahrnují čas spotřebovaný X serverem pro vlastní vykreslování. Zavěste terminál na sériovou linku počítače a spusťte top, abyste viděli co se opravdu děje ve vašem počítači.

Obecně zrychlení použitím DGA oproti 'běžnému' X11 velmi závisí na vaší grafické kertě a jak dobře je pro ni optimalizován modul X serveru.

Pokud máte pomalý stroj, raději použijte 15 nebo 16 bitovou hloubku, jelikož vyžaduje pouze poloviční průchodnost paměti oproti 32 bitovému zobrazení.

Použití hloubky 24 bitů je dobré i v případě, že vaše karta nativně podporuje pouze barevnou hloubku 32 bitů, jelikož se přenáší o 25% méně dat oproti režimu 32/32.

Viděl jsem pár AVI souborů přehrávat na Pentiu MMX 266. Procesory AMD K6-2 pracují při 400 MHZ a výše.

ZNÁMÉ CHYBY. Podle některých vývojářů XFree je DGA zvěrstvo. Říkají, abyste je raději nepoužívali. Jeho implementace není vždy bezproblémová v každém dostupném ovladači pro XFree.

- V XFree 4.0.3 je v `nv.o` chyba vedoucí k podivným barvám.

- Ovladač pro ATI vyžaduje více než jedno zpětné přepnutí režimu po skončení používání DGA.

- Některé ovladače selžou při přepnutí do normálního rozlišení (použijte Ctrl+Alt+Numerické + a Ctrl+Alt+Numerické - pro ruční přepnutí).

- Některé ovladače zobrazují divné barvy.

- Některé ovladače lžou o množství paměti kterou mapují do adresového prostoru procesu, takže vo_dga nepoužije dvojitou vyrovnávací paměť (SIS?).

- Některé ovladače nezvládnou ohlásit dokonce ani jeden platný režim. V tom případě rozhraní DGA spadne s hláškou o nesmaslném režimu 100000x100000 nebo tak.

- OSD pracuje pouze se zapnutou dvojitou vyrovnávací pamětí (jinak poblikává).

Předcházející | Nahoru | Další
7.2. Xv | Domů | 7.4. SDL