Nedávno si mi jeden kolega stěžoval, že má v Linuxu problémy s přehráváním videa. Nakonec zjistil, že je problém v nefunkční vertikální synchronizaci. Já mám jednoduché řešení, které problém opraví.
Problém se projevuje u grafických karet Intel, které nemají v ovladačích v X.org aktivovanou podporu vertikální synchronizace. Efekt se jmenuje tearing. Zjistil jsem, že mám v notebooku právě takovou kartu a problém se u mě projevuje také. Karta se podle lspci
hlásí jako Intel Corporation Mobile GM965/GL960
.
Kolega nakonec zjistil, že je třeba opatchovat ovladač v X.org, což problém vyřeší. Mě se ale patchovat nechtělo a problém mi vadí jen při přehrávání filmů. Za normálních okolností ho vlastně ani nepostřehnete.
V podstatě nemám žádnou možnost, jak problém demonstrovat prakticky. Na screenshotech samozřejmě vidět nebude. Zjednodušeně se problém nejvíce projevuje, pokud se po obrazovce pohybuje vertikální čára v horizontálním směru. Například pokud kamera ve filmu jede zleva doprava a v pozadí jsou vertikální žaluzie u okna. Vypadá to pak tak, že se obraz jakoby rozpadá na několik horizontálních pruhů, které jsou o několik pixelů posunuté. Asi tak:
(Tohle jsem simuloval v Gimpu)
Znát je to jen při pohybu, čím rychlejší a ostřejší hrany, tím více. Oprava je pro MPlayer poměrně jednoduchá. Intel karty totiž mají dvě video rozhraní. Uvidíte je, pokud použijete příkaz
# xvinfo
Jsou označena jako Adaptor #0
a Adaptor #1
. Standardně se používá nula, která nedisponuje vertikální synchronizací. Potřebujeme tedy přepnout na jedničku. V xvinfo
je spousta informací, včetně čísla portu, na který chceme přepnout.
# xvinfo|grep "port base"
port base: 84
port base: 100
První port je pro adaptér nula, druhý nás zajímá. Teď stačí MPlayer spustit se správným parametrem:
# mplayer -vo xv:port=100 film.avi
Případně do ~/.mplayer/config
přidat:
vo = "xv:port=100"
a bude vám to fungovat přímo bez parametrů.
Nevýhoda je v tom, že se tímto postupem vracíme ke klasickému modrému obdélníku, do kterého grafická karta kreslí video. Pokud máte zapnutý kompozitor s průhlednými okýnky, musíte mít okno s videem stále aktivní, jinak se modrá zprůhlední, už není správně modrá a klíčování přestane fungovat. Na fullscreen je to ale jedno a video se hýbe jak má.
Díky moc za zajímavé zjištění. Podobné rozsekání fullscreen videa mplayeru (vo=xv) na pruhy posunuté o pár pixelů mi dělal režim Twinview s proprietárními drivery nvidie na druhé obrazovce (TVout). Po přechodu na xineramu to nedělá. Myslíš, že by to mohlo být něco podobného? Určitě to vyzkouším. Ještě jednou díky.
V mém notebooku je tato grafická karta (lspci):
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 03)
ale výpis xvinfo vypisuje pouze jeden adaptér:
number of ports: 1
port base: 84
Mám něco špatně a nebo je to normální?
mam presne stejny problem s nVidia
02:00.0 VGA compatible controller: nVidia Corporation GeForce 8400 GS (rev a1)
xvinfo mi bohuzel najde jenom jeden adapter, takze smula
je zajimave, ze xvinfo reportuje promennou
XV_SYNC_TO_VBLANK
a tvrdi, ze je nastavena na 1, predpokladam, ze by to melo znamenat, ze je aktivni
muzu rict, ze sledovat film, zvlaste kresleny, v takovem prostredi je dost neprijemne
jeste bych mohl zkusit open source drivers misto oficialnich, ale zatim jsem se k tomu nedostal
Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. GNU/Linuxem a Unixem obecně se zabývá již více než deset let a věnuje se především jeho nasazení v počítačových sítích a bezpečnostní politice. Zde bloguje o Root.cz, Linuxu, internetu a světě kolem sebe.
Přečteno 112 292×
Přečteno 89 765×
Přečteno 73 162×
Přečteno 58 109×
Přečteno 54 435×