Zaključak


Na kraju projekta sam poprilično promijenio mišljenje o procesu dekodiranja video zapisa, očekivao sam jednostavan sustav u kojem će program čitati sliku po sliku te prikazivati po potrebi na ekranu dok će se kompletan audio zapis učitati odjednom te reproducirati.
Ubrzo se javila potreba za paralelnim dekodiranjem jer se dosta slika nije stiglo na vrijeme dekodirati te se ujedno i zbog toga broj prikazanih slika po sekundi na grafičkoj kartici srozao na jednoznamenkaste brojeve. Nakon prvih eksperimenata, paralelno dekodiranje se pokazalo kao najboljim rješenjem.

Pretvorba YUV kanala u RGB je predstavljala jedan od većih problema zbog izrazito dugog trajanja te je cijeli postupak trebalo dobro optimirati. Korištenje cjelobrojnih operacija umjesto operacija s pomičnim zarezom i binarno ograničavanje rezultata u rasponu [0,255] je višestruko ubrzalo cijeli postupak.
Ukoliko nije moguće koristiti hardversko sjenčanje slikovnih elemenata, daljnje optimizacije su moguće samo kroz direktno korištenje strojnog koda što bi u korist podržavanja više platformi nastojao izbjeći.

Iznenadila me činjenica da ogg/theora datoteke ne sadrže podatak o dužini trajanja video zapisa u zaglavlje datoteke. Stoga je bilo potrebno pozicionirati se na kraj datoteke i propustiti par OGG paketa kroz theora dekoder kako bi se ta informacija izvukla. Dodatno me iznenadio nedostatak zapisa o pozicijama ključnih slika. Taj podatak bi znatno olakšao i ubrzao dinamičko pozicioniranje.

Ovaj program je dizajniran tako da ne ovisi o bilo kojem sustavu prikaza (OpenGL, DirectX, SDL...) stoga mu je spektar primjene izrazito širok. Primarno je dizajniran za računalne igre u svrhe prikaza međusekvenci no kao što se iz gore opisanih primjera može vidjeti, primjena mu može biti daleko šira.
Pored međusekvenci, sustav se može koristiti u alatima za transkodiranje video zapisa, za prepoznavanje uzoraka, prikaz online video sadržaja unutar grafičkih ili klasičnih aplikacija, za prikaz animiranih reklama itd.

Audio izlaz je također neovisan o sustavu za reproduckiju. Na korisniku leži na koji način će PCM podatke reproducirati.
Primjena je također moguća na mobilnim uređajima ukoliko proizvođač napravi hardverski dekoder ili barem procesor koji podržava instrukcije za lakše dekodiranje (npr SSE instrukcije).
Većina mobilnih platformi podržava C++ prevodioce i više dretvi što su jedini preduvjeti za korištenje ovog programa. Sklopovka podrška prikaza slike u YUV zapisu bi uvelike ubrzalo prikaz.

Program je otvorenog koda, te je dobro dokumentiran što će nedvojbeno privući buduće programere da pridonesu njegovu usavršavanju i optimiranju što ovom projektu osigurava dobru budućnost i nadam se široku primjenu.