Analýza VP8 versus H.264: úvod, metody predikce
Kapitoly článků
Následující text vychází z podrobné analýzy VP8, kterou provedl Jason Garrett-Glaser (známý též jako Dark Shikari), jeden z hlavních programátorů projektu x264, v současné době nejkomplexnější a přitom otevřené implementace formátu H.264. My pochopitelně nechceme jeho analýzu kompletně "vykrádat", proto si zmíníme pouze ty hlavní a zajímavé body, v případě hlubšího zájmu vás odkazujeme přímo na jeho blog, kde se k tématu už i rozvinula diskuse.
On2 Technologies, kteří VP8 vyvinuli a které Google loni koupil, uvádějí, že VP8 je o 50 % lepší než H.264, ale jak Jason píše, jejich zmínky jsou vždy takto nadnesené a neodpovídají realitě. Předchozí VP7 měl být o 15 % lepší než H.264 a současně i rychlejší, v reálu však byl pomalejší a poskytoval horší kvalitu videa.
Jak je to s těmi patenty, které jsme zmiňovali v průběhu článku? Dle Jasona ani to, že Google tento formát uvolnil pod otevřenou licencí a bez poplatků, neznamená, že je formát skutečně patenty nezatížen. Microsoft také kdysi uvolnil VC-1 podobným stylem a pár měsíců na to se na něj sesypala řada firem s tím, že používá její patenty.
Specifikace
Specifikace formátu je zatím doslova v plenkách a to pěkně "pokaděných". Pořádný dokument popisující celý formát vlastně neexistuje, specifikace je z velké části jen copy&pastnutý zdroják v Céčku, zahrnuje řadu TODOs či C-specifických hacků. Jistě většina vývojářů bude souhlasit, že zdroják v C rozhodně není žádná specifikace. Specifikace VP8 je tak v tuto chvíli poměrně nejasná a chaotická a je v podstatě nemožné jen podle ní napsat od základu třeba vlastní dekodér tohoto formátu.
VP8 samotné
Jason připomíná, že současné formáty této úrovně pracují následovně:
- komprese: Predict -> Transform + Quant -> Entropy Code -> Loopfilter
- dekomprese (přehrávání): Entropy Decode -> Predict -> Dequant + Inverse Transform -> Loopfilter
Predikce (intra + inter)
V této fázi se kodek snaží předpovídat, jaký je obsah scény. Intra analyzuje daný snímek jako samostatný, bez ohledu na okolní snímky (předcházející, následující, připomeňme, že daný snímek je často realizován tak, že obsahuje jen rozdíl oproti předchozímu - predicted frame, nebo rozdíl oproti předchozímu i následujícímu - bidirectional predicted; to vše pak ukládá v rámci analýzy motion vektorů - systému určujícím pohyb objektů ve scéně - jak směr, tak i rychlost).
Analýza sub-bloků je ve VP8 prakticky shodná s i4×4 módem v x264 a analýza celých bloků s i16×16. Totéž platí i pro chroma predikci, ale například "mezistupeň" i8×8 z H.264 High Profile svůj ekvivalent ve VP8 nemá. Jason je zde hodně zklamán. Zatímco intra predikce H.264 je obecně ve specifikaci dobrá, prošla i tak za posledních 7 let pořádným vývojem a On2 ji prostě převzali, což není zrovna "gentlemanská praktika", Jason čekal něco trochu kreativnějšího. Každopádně tohle Jason považuje za patentovou bombu, která čeká na vybouchnutí. Spatial intra predikce v H.264 je chráněna patenty a On2 (tedy Google) tohle asi jen těžko obhájí.
Inter predikce se používá k odhadu obsahu bloků s přihlédnutím k předchozím snímkům videa. Hlavními součástmi tohoto procesu jsou referenční snímky (to jsou ty, které jsou ve videu uloženy celé, nikoli jen jako změna oproti předchozím/okolním) a vektory pohybu (motion vectors). Daný snímek je pak sestaven tak, že se vezme počáteční hodnota z referenčního snímku a zjistí se, jaký posuv pro danou část definují vektory pohybu, tím se získá finální pozice daného objektu/pixelu ve snímku.
VP8 podporuje 3 referenční snímky: předchozí, "alt ref" a "golden frame" a partitions (oblasti obrazu) s proměnnou velikostí. H.264 umí 16 referenčních snímků a oproti typům oblastí z VP8 (16×16, 16×8, 8×16, 8×8, 4×4) umí i flexibilní, kde každá 8×8 může být 8×8, 8×4, 4×8, nebo 4×4. Jisté rozdíly jsou i v interpolačních filtrech. VP8 pak nepodporuje B-snímky (to jsou ty, které se odkazují na předchozí i následující) a weighted prediction (váhovou predikci).
Interpolační filtrace ve VP8 je dle Jasona sice o něco lepší než v H.264, ale její implementace také bude o něco pomalejší (tj. náročnější na výpočetní výkon). Absenci B-snímků považuje za zabijáka VP8, dávají totiž 10 až 20% kompresní bonus při jen minimálním snížení výkonu (tj. minimálním nárůstu výpočtů potřebných pro zpracování videa). Absence B-snímků bude VP8 patrně stát více než cokoli dalšího.