Egy tesztsoron keresztül szemléltetem, miért érdemes a DXVA komatibilitást kihasználni kódolásnál, hogy a lejátszásnál se legyen semmi gond kisebb HTPC-ken, laptopon, asztali gépeken.
A num_ref_frames változásainak hatása a DXVA kompatibilitásra, a deblock negatív irányú eltolása nagy felbontású videók esetében
Korábban már esett szó a DXVA kompatibilitásról, annak megtörését eredményező beállításokról, valamint a deblock hatásáról az alap 0:0 beállítás és a -3:-3 beállítás mellett. Egyik írásomban utaltam is rá, hogy leteszteltem a -3:-3 deblock-ot, ám nem éreztem igazán körültekintőnek, mivel SD minőségről volt szó (már a forrás sem volt megfelelő) és sok homogén felületet tartalmazó anyagról. Most találtam egy másik, sokkal mozgalmasabb és részletesebb videót - amivel már jobb tesztelni - nagyobb felbontásban (720p). Időhiány miatt nem sok tesztbeállítással dolgoztam, de azért kiindulásként ennyi is megteszi.
Koncepció:
DXVA kompatibilis HD tartalmak kódolásakor nem lehet hatással az eredményre a /ref, /b_pyramid és /bframes paraméterek szabad használata, illetve elhagyása, amennyiben a num_ref_frames értéke még belefér a DXVA használatához szükséges DPB keretbe. 720p videók esetén ennek értéke: < 10.
A deblock paraméter nagyobb változtatása látható hatással van, főképp nagyobb felbontásokon (720p és fölötte), a képminőségre. Negatív irányú eltolása élesebb képet eredményez, de túlzott mértékű deblock már minőségbeli romlást okozhat (-3:-3).
Kitűzött célok:
Pozitív eredményként értékelhető, ha a /ref, /b_pyramid, /bframes önmagában nem okoz változást a DXVA kompatibilitás szempontjából a num_ref_frames határon belül, emellett a deblock értékének változása megfigyelhető hatással lesz a képre. Mivel nem nagyon ajánlott a -3:-3, járulékos célként kitűzhető a kép éleinél a torzulás bizonyítása.
Negatív eredmény mindenképpen, ha a DXVA megtörik az említett paraméterek alkalmazásával, illetve nagymértékben változik a képminőség. Szintén negatív eredmény, ha a deblock nem érzékelhető hatással van a kimenetre ekkora eltolás mellett.
Tesztelés:
Forrás:
A teszteléshez egy HDTV sportesemény felvételét használtam, ami a következő tulajdonságokkal rendelkezik:
4275 Kbps, 1280*704, 4:2:0, 60 fps, progresszív
Minden tesztesetnél High@L4.1 profilt alkalmaztam.
Használt programok:
- Windows Vista + SP1
- AutoMKV 0.95 – több x264 verzióval. Érdekelt, hogy a régebbieknél mennyire változik a num_ref_frames korlát.
- RivaTuner
- Mediainfo
- Medai Player Classic - HC
Hardver:
- CPU: AMD Athlon64 X2 4000+ @2.5 GHz
- VGA: Sapphire HD 3850 256 MB
Teszteredmények:
1. teszteset:
Kódolási paraméterek: x264 core 59 r826M 138601d
cabac=1 / ref=4 / deblock=1:-3:-3 / analyse=0x3:0x113 / me=umh / subme=6 / me-prepass=0 / brdo=1 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=2 / deadzone=21,11 / chroma_qp_offset=0 / threads=3 / nr=0 / decimate=1 / mbaff=0 / bframes=3 / b_pyramid=1 / b_adapt=1 / b_bias=0 / direct=3 / wpredb=1 / bime=1 / keyint=250 / keyint_min=25 / scenecut=40(pre) / rc=abr / qcomp=1.00 / qpmin=10 / qpmax=51 / qpstep=4
2. teszteset:
Kódolási paraméterek: x264 core 58 svn-736M
cabac=1 / ref=4 / deblock=1:0:0 / analyse=0x3:0x113 / me=umh/ subme=5 / me-prepass=0 / brdo=1 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=0 / cqm=0 / deadzone=21,11 / chroma_qp_offset=0 / threads=3 / nr=0 / decimate=1 / mbaff=0 / bframes=3 / b_pyramid=0 / b_adapt=1 / b_bias=0 / direct=3 / wpredb=1 / bime=1 / keyint=250 / keyint_min=25 / scenecut=40(pre) / rc=2pass /qcomp=1.00 / qpmin=10 / qpmax=51 / qpstep=4
3. teszteset:
Kódolási paraméterek: x264 core 64 r979 6d4af8d
cabac=1 / ref=6 / deblock=1:-3:-3 / analyse=0x3:0x113 / me=umh / subme=6 / psy_rd=1.0:0.0 / brdo=1 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=-2 / threads=3 / nr=0 / decimate=1 / mbaff=0 / bframes=6 / b_pyramid=0 / b_adapt=1 / b_bias=0 / direct=3 / wpredb=1 / bime=1 / keyint=250 / keyint_min=25 / scenecut=40(pre) / rc=2pass / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4
4.teszteset:
Kódolási paraméterek: x264 core 64 r979 6d4af8d
cabac=1 / ref=10 / deblock=1:-3:-3 / analyse=0x3:0x113 / me=umh / subme=6 / psy_rd=1.0:0.0 / brdo=1 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=-2 / threads=3 / nr=0 / decimate=1 / mbaff=0 / bframes=3 / b_pyramid=1 / b_adapt=1 / b_bias=0 / direct=3 / wpredb=1 / bime=1 / keyint=250 / keyint_min=25 / scenecut=40(pre) / rc=2pass / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4
Kiegészítés:
Összehasonlításként egy hagyományos XviD képe a RivaTuner mérése alatt.
Konklúzió:
A DXVA kompatibilitás nem tört meg a /b_pyramid be, illetve kikapcsolásával, a /ref és a /bframes változtatásával, amíg a kalkulált num_ref_frames értéke a korlátban meghatározott érték alatt marad. A koncepció helyes volt.
1. teszteset
Az első esetben a num_ref_frames értéke a következők szerint alakul:
/ref=4 ===> 4
/bframes=3 ===> 1
/b_pyramid=1 ===> 2
4 + 1 + 2 = 7 ===> 7 < 10
2. teszteset
A második esetben a num_ref_frames értéke a következők szerint alakul:
/ref=4 ===> 4
/bframes=3 ===> 1
/b_pyramid=0 ===> 0
4 + 1 + 0 = 5 ===> 5 < 10
3. teszteset
A harmadik esetben a num_ref_frames értéke a következők szerint alakul:
/ref=4 ===> 6
/bframes=6 ===> 1
/b_pyramid=0===> 0
6 + 1 + 0 = 7 ===> 7 < 10
4. teszteset
A negyedik esetben a num_ref_frames értéke a következők szerint alakul:
/ref=4 ===> 10
/bframes=3 ===> 1
/b_pyramid=1 ===> 2
10 + 1 + 2 = 13 ===> 13 > 10 – Nincs DXVA kompatibilitás.
Látható, ha jobban megnézzük a két képet, hogy a -3:-3 deblock beállítás ebben az esetben indokolt volt, mert az alapbeállítás (0:0) kicsit összemosta az éleket. A sisakok fényezésén, illetve a nézőkön lehet a legjobban látni, hogy a -3:-3 beállítással élesebb a kép. Főképp nagyobb felbontásnál tehát érdemesebb a deblock értékeit eltolni kicsit negatív irányba - akár a -3:-3-ig is (Kisebb felbontás tesztelése még szükséges). A koncepció tehát annyiban nem helyes, hogy látható torzulást nem eredményez a -3:-3 deblock. Mindazonáltal megjegyzem, hogy a harmadik tesztesetben is -3:-3 deblock-ot alkalmaztam, ám a forrás az első teszteset volt és azt kódoltam újra, így viszont már látható, hogy a hatékonyság is csökkent, habár a másodikhoz viszonyítva jobbnak hat.
További eredmények, észrevételek:
Az is jól látható a RivaTuner mérésén, hogy a DXVA támogatás kihasználása nem terheli meg túlságosan a GPU-t (720p esetén), ám annál több terhet vesz le a CPU-ról. Ebből leszűrhető, hogy egy nagyobb bonyolultságú, nagy felbontású és magas bitrátájú BD vagy más anyag lejátszása sem jelent extrém magas kihasználtságot a GPU-nál.
Egyértelműen látszik, hogy a negyedik teszteset nem használja a videokártyát, mert a GPU órajele a PowerPlay által a 2D értékre beállított maradt, tehát maximum a megjelenítésre (lejátszó) fordít időszeleteket, nem a videó dekódolására, aminek terhét a CPU vette magára. Mivel a processzor alapvetően általános számítási műveletekre lett kifejlesztve, jobban meg is terheli a lejátszás, mint a GPU-t, amiben célirányosan erre a feladatra kitalált komponensek is vannak. Elmondható tehát, hogy a DXVA támogatást kihasználó filmek kevésbé terhelik a gépet. Ez pedig simább lejátszást, kevesebb fogyasztást, kisebb hőtermelést is jelent és közvetve halkabb ventilátorokat.
Érdekes, de nem meglepő, hogy bár az XviD dekódolásakor is van némi GPU használat (csupán a szükséges megjelenítési dolgoknak köszönhető), az órajel marad a PowerPlay által lecsökkentett 2D órajelen, vagyis nincs szükség a GPU interakciójára, a dekódolás tisztán CPU oldalon történik.
---***--- UPDATE ---***---
Az összehasonlítás érdekében egy 1080p sample mérése RivaTuner-ben:
Remélem, ezek után már mindenki számára egyértelmű, miért lényeges és áldásos a DXVA támogatás kihasználása HD videóknál. :)