2024. április 20., szombat

Gyorskeresés

Arról, hogy miért ne használjunk L5.1-et x264-gyel

Írta: | Kulcsszavak: HD . DXVA . x264 . 1080p

[ ÚJ BEJEGYZÉS ]

Mostanság megint terjedőben van az a nézet, miszerint a HD akkor jó, ha max.-ra állítunk minden paramétert. Hogy ez honnan jön, nem tudom, de badarság. Itt nem érvényesül a "legnagyobb a legjobb" elv. Midndenféle hosszabb magyarázkodás helyett most csak annak a tévhitnek szeretnék logikus cáfolatot adni, miszerint az L5.1 (ti.: Level 5.1) szint a H.264 szabványból önmagában is sokat javít a minőségen, a többi paramétertől függetlenül.

Ezt a feltevést arra építhetik talán sokan, hogy az L4.1-ben a pufferekben maximálisan tárolható macroblock érték "csupán" 32.768, míg az L5.1 esetében ez a szám 184.320. Mit jelent mindez? Befolyással bír a maximális referenciakeretek, az az a num_ref_frames érétkre, vagyis a felhasználható ref számra. Adott felbontáson meghatározza a maximálisan referenciaként a VGA-n a pufferekben tárolható keretek mennyiségét.

Nem csupán elméleti jelentőségű, hogy melyik profilt használjuk. Annak idején, amikor megalkották a szabványt és publikálták a dokumentációt, a Microsoft egy API-t fejlesztett ki a Windows rendszeréhez, hogy azon keresztül a VGA hardveres támogatását ki tudja aknázni a HD filmek lejátszásához. A történet alakulását mindenki ismeri, de lényeges, hogy akkor a DXVA első verziójában meghatározták, hogy egy 1080p-s filmhez az L4.1 használata elegendő a legjobb minőség eléréséhez a szabvány szerint. Ezt idő közben a Blu-ray is alkalmazta, így egymást generálva állapodtak meg ebben a profilban a fejlesztők.

Sokáig nem volt teljesen tiszta, hogy a kódolásnál mely paraméterek milyen súllyal számítanak bele a DXVA kompatibilitásba (igen lehet ezt kompatibilitásnak is nevezni, hiszen az API-n keresztül olyan nem fog átmenni, ami valamilyen okból fennakad az ellenőrzéskor), az x264 pedig gyakorlatilag bármilyen beállítás engedélyez egy-egy paraméternél (a legelvetemültebb beállításoknál azért hibára fut).

Persze sokan nekiestek és kódoltak mindenféle beállításokkal (én is :) ) és sokan rögtön az L5.1-et vették célba (én nem :) ). Hogy mi vitte rá őket? Hát a ref értékének emelése. Ugyanis egy képhez tartozó maximálisan tárolható macroblock-ok számát úgy kapjuk meg, hogy a kép magasságát és szélességét elosztjuk 16-tal (max. macroblock méret), ezeket összeszorozzuk és a profilhoz tartozó maximálisan tárolható blockok számát elosztjuk ezzel az értékkel. Márpedig az L5.1-be nyilván jóval több fér el.

Példa:
van egy 1920 x 1080 felbontású filmünk, ennek szeretnénk a lehető legnagyobb ref értéket beállítani úgy, hogy az még a DXVA által támogatott legyen:

1920 / 16 = 120
1080 / 16 = 67,5 ~ 68
120 * 68 = 8160
tehát egy ekkora videónak maximum ennyi macroblock-ja lesz. Most azt kell még kiszámítani, hogy hány keret fér el a pufferben anélkül, hogy túlcsordulna:
32768 / 8160 = 4,016 ~ 4
vagyis 4 darab keretet hivatkozhatunk be egyszerre, hogy azokat a pufferben is tartsuk egy időben.

Ez elég egyszerű és egyértelmű. Természetesen túl lehet menni ezen az értéken, de akkor mi történik? Túlcsordulás? Nem, az azért nem. Elég vicces lenne, ha dekkódolás közben túl tudna csordulni a referencia keretek tárolója. :)

És itt értünk el oda, ahol kimondható, hogy csak azok alkalmazzanak több ref értéket, akik nem akarnak DXVA ( = GPU) támogatást, ugyanis kvázi hardveresen is ki van zárva, hogy DXVA-s legyen egy ilyen stream.

Itt gondolom sokan már kapják is a billentyűzetet és írják, hogy de az nVidia!.... Igen, az nV ezt már megoldotta, de nem úgy, hogy növelte a pufferek számát. Bevetette a CUDA egységeit, amelyek tulajdonképpen közelebb állnak a CPU-hoz,mint a GPU-hoz annyiban, hogy általános számításra foghatóak be. Mivel erről már írtam, itt most csupán annyit, hogy belátható, hogy ez inkább kerülőút, de mindenképpen jó irány, hiszen tény, hogy a VGA még így is sokkal hatékonyabb a számításokban, mint a CPU (tulajdonképpen egy egész sor CPU dolgozik a műveleteken).

Az idő a megmondhatója, hogy az ATI mikor és mivel rukkol elő, illetve, hogy az OpenCL lesz-e a jó válasz, de mindez nem segít a konzolosokon, az asztali lejátszók tulajdonosain, akiknek nincs lehetőségük sűrűn alkatrészeket cserélgetni a masináikban, így nekik többnyire marad a lehetőleg szabványos kódolás reménye.

Szerencsére az L5.1, mint paraméter önmagában nem sok dolgot változtat meg, ha az L4.1 értékein belül marad a többi fontos paraméter értéke, így lehet L5.1-es filmeket is lejátszani például egy PS3 segítségével, de akkor viszont nyilvánvalóan semmi értelme nincs L5.1-et beállítani.

Ha majd jön a 2160p, akkor már elkél az L5.1, de emiatt fájjon a gyártók, driver-eket fejlesztők feje, hogy hogyan oldják meg a gyorsítást... mihamarabb. :)

Copyright © 2000-2024 PROHARDVER Informatikai Kft.