Dakle ovako:
Svaki oblik kodiranja videa je kodiranje s gubitkom informacija - cak i ono kad snimate live program pa dobivate jako veliki fajl je u principu skodirani video s gubitkom informacije. Fora je samo u tome da se minimalni udio informaicije gubi (onaj koje nase oci i usi ionako ne mogu primjetiti). Samo za usporedbu: jedna
sekunda HD 1080p nekomprimiranog videa ima cca 178 MiB (=1920*1080*3*30).
Osnovna ideja kod komprimiranja videa je ustanoviti koje zapravo informacije smijemo odbaciti bez da gledatelj primijeti ikakvu (ili malu) razliku. Upravo se u tome razlikuju algoritmi kompresije. Ako je algoritam odabira jednostavan (kao npr. u MPEG2), onda je on i neprecizan te se cesto dogodi da on izbaci i odredjen dio informacije koji je bitan, a ne izbaci onaj nebitni. To rezultira losijom slikom za definiranu velicinu fajla. Medjutim, jednostavan algoritam je ujedno i brz, te ga se bez problema moze izvoditi na procesoru. S druge strane, ukoliko uzmete pametniji algoritam, on ce bolje odrediti koje informacije treba izbaciti, a koje ne, medjutim kodiranje ce duze trajati (pa shodno tome i dekodiranje). Npr. h264 algoritam je otprilike osam puta slozeniji od mpeg2 algoritma, pa je shodno tome potreban i jaci hardware ukoliko zelimo realtime dekodiranje.
A ako smo k tome jos i mazohisti pa koristimo taj komplicirani algoritam na videu koji je velike rezolucije (npr. 1080p), onda i danas najjaci procesori muce muku s dekodiranjem (h264 je zapravo i jedini kodek koji se moze koristiti za 1080p video jer radi najjacu mogucu kompresiju uz minimalni gubitak kvalitete (npr. film od 2h rezolucije 1920x1080 bez kompresije bi bio velik 1252 GiB, dok je komprimiran h264 algoritmom velik nesto vise od 10 GiB)). Detalje o VP8 codecu trenutno nemam, no on ili trosi vise procesorskog vremena od h264 za istu velicinu fajla i kvalitetu ili riskira pa smanji kvalitetu ili poveca fajl (u svakom slucaju, ne moze biti puno bolji od h264, ako uopce i jest).
Shrike ima pravo kad veli da je postavljanje tolikih zahtjeva na procesor malo neadekvatno za online materijal, medjutim trenutni trend je offloadati video dekodiranje na GPU. Naime, graficke kartice su paralelni procesori, a problem dekodiranja videa je trivijalno paralelni problem (tj. svaki blok se dekodira neovisno o blokovima u susjedstvu), a takvi problemi su macji kasalj za graficke kartice (jednaki problem vam je i kad treba iscrtati desktop efekt ili neku igru - procesor to ne moze, dok GPU to radi bez problema).
Danas sve graficke kartice cak u sebi imaju i posebni cip koji sluzi iskljucivo samo dekodiranju videa (tako da se ne opterecuje glavni pipe). Primjer toga su Nvidia PureVideo i AMD UVD (ima i Intel svoju tehnologiju, al se nemrem sjetiti kak se zove). Nemojte misliti da za gledanje videa zato trebate imati neku full mocnu graficku - cak i obicna Intel GMA grafulja je dovoljna da dekodira 1080p HD video s pol gasa, a procesor lijepo bude na 0% zauzeca. Dobar primjer su i netbookovi koji dodju s Intel Atom procesorom i Nvidia ION platformom - iako je Atom ubershrot, ovakav netbook bez problema prikazuje 1080p HD video zahvaljujuci nvidiji.
Naravno, da bi mogli koristiti graficku karticu prilkom dekodiranja videa, potrebno je imati graficke drivere koji omogucuju hardversko dekodiranje videa. Na windowsima i meku je to po defaultu omoguceno na svakom hardwareu koji to podrzava (unatrag 4 godine svi), dok je na linuxu (kao i obicno) pusiona - naime ne postoji standardni API za pisanje aplikacija za playanje videa koji bi u pozadini koristio hardware akceleraciju. Vecina playera zasad koristi nvidijin VDPAU, koji je odlican, no vlasnicki. Velika vecina podrzava i Intelov VA-API za kojeg vele da je isto dobar, ali ne bih znao iz prve ruke - cak postoji backend za va-api koji koristi vdpau ako je nvidia na sustavu i obratno - backend za vdpau koji koristi va-api ako je intelova graficka u sustavu. AMD isto ima neki svoj API za koristenje pod fglrx-om, no releaseali su ga tek pred koji mjesec (iako tehnologija postoji vec vise od 4 god).
Kako se meni zasad cini, vrlo vjerojatno ce prevladati va-api jer ga je moguce implementirati u open source driveru (makar neki developeri vise lobiraju za nvidijin vdpau jer vele da je elegantniji i da je lakse s njime raditi), a moguce je napraviti i backend za njega za neki drugi api na close driverima. Medjutim, kako su trenutno developerima OSS grafickih drivera druge stvari prioritetnije od izrade va-api drivera za video akceleraciju (npr. dodavanje podrske za opengl 3.0), cini mi se da na OS driverima necemo moci vidjeti akcelerirani video decoding jos barem koju godinu.
Upravo taj problem je odvratio Adobe da po defaultu omoguci graficku akceleraciju u svom linux flash playeru (koji ju btw. podrzava jos od verzije 10.3), a iz istog razloga ni browseri poput chromea i firefoxa ne ukljucuju navedenu opciju (zapravo chrome ju ukljuci ako detektira na sustavu nvidijin binarni driver).
Naravno, sve ovo dosad napisano nije ni priblizno sve kaj jos treba srediti da bi se gpu video akceleracija omogucila na linuxu:
- naime, defaultna instalacija va-api-ja na linux na intelovoj grafickoj kartici po defaultu ne offloada h264 dekodiranje na gpu jer je h264 algoritam pod patentom te ga nije moguce (legalno) implementirati;
- nadalje webm je jos uvijek nov pa ga vecina hardverskih dekodera ne zna dekodirati; starije graficke kartice nemaju cip za dekodiranje pa je za njih potrebno napisati drugaciji driver (na phoronixu su jedno vrijeme spominjali implementiranje tih algoritama u shaderima, medjutim nadam se da su od toga odustali jer te starije graficke podrzavaju tek SM 3.0, a jezik SM 3.0 po mojoj procjeni nije dovoljno mocan da se napise dovoljno brz video dekoder (no mozda grijesim), a graficke koje podrzavaju SM 4.0+ ionako imaju poseban cip za dekodiranje), osim toga za tako nesto je prvo potrebno imati dovoljno dobar opengl driver koji pravilno interpretira shader programe, a iz prve ruke mogu reci da trenutni gallium 0.4 to ne radi ni tocno ni pravilno ni brzo;
- i jos puno stvari kojih se zasad ne mogu sjetiti
Uglavnom, ukratko: bez binarnih grafickih drivera necete moci glatko gledati HD filmove na linuxu u tako skoro vrijeme (osim ak se desi neko cudo).