Kontextově adaptivní kódování s proměnnou délkou - Context-adaptive variable-length coding
Kontextově adaptivní kódování s proměnnou délkou (CAVLC) je forma entropické kódování použito v H.264 / MPEG-4 AVC kódování videa. Je to neodmyslitelně bezztrátová komprese jako téměř všichni kodéry entropie. V H.264 / MPEG-4 AVC se používá ke kódování zbytkových bloků transformačního koeficientu v klikatém pořadí. Jedná se o alternativu k kontextově adaptivní binárce aritmetické kódování (CABAC). CAVLC vyžaduje k dekódování podstatně méně zpracování než CABAC, i když nekomprimuje data tak efektivně. CAVLC je podporován ve všech profilech H.264, na rozdíl od CABAC, který není podporován v základních a rozšířených profilech.
CAVLC se používá ke kódování zbytkových bloků transformačních koeficientů 4x4 (a 2x2) uspořádaných klikatě. CAVLC je navržen tak, aby využíval výhod několika charakteristik kvantovaných bloků 4x4:
- Po predikci, transformaci a kvantizaci jsou bloky typicky řídké (obsahující většinou nuly).
- Nejvyšší nenulové koeficienty po cik-cak skenování jsou často sekvence +/− 1. CAVLC signalizuje počet vysokofrekvenčních +/− 1 koeficientů kompaktním způsobem.
- Počet nenulových koeficientů v sousedních blocích je korelován. Počet koeficientů je zakódován pomocí vyhledávací tabulky; volba vyhledávací tabulky závisí na počtu nenulových koeficientů v sousedních blocích.
- Úroveň (velikost) nenulových koeficientů má tendenci být vyšší na začátku přeuspořádaného pole (blízko stejnosměrného koeficientu) a nižší směrem k vyšším frekvencím. CAVLC to využívá tím, že přizpůsobuje výběr vyhledávací tabulky VLC pro parametr „level“ v závislosti na nedávno kódovaných úrovních.
Kódované prvky
Parametry, které je třeba kódovat a přenášet, zahrnují následující tabulku:
Parametry | Popis |
---|---|
Typ makrobloku | Metoda predikce pro každý kódovaný makroblok |
Kódovaný vzor bloku | Označuje, které bloky v makrobloku obsahují kódované koeficienty |
Referenční rámec parametrů kvantizátoru | Přenáší se jako delta hodnota z předchozí hodnoty QP |
Index referenčního rámce | Určete referenční rámce pro interní předpověď |
Pohybový vektor | Přenáší se jako rozdíl (mvd) od predikovaného vektoru pohybu |
Zbytková data | Údaje o koeficientech pro každý blok 4x4 nebo 2x2 |
Příklady CAVLC
Živel | Hodnota | Kód |
---|---|---|
coeff_token | TotalCoeffs = 5, T1s = 3 | 0000100 |
Značka T1 (4) | + | 0 |
Značka T1 (3) | - | 1 |
Značka T1 (2) | - | 1 |
Úroveň 1) | +1 (použijte Level_VLC0) | 1 |
Úroveň (0) | +3 (použijte Level_VLC1) | 0010 |
TotalZeros | 3 | 111 |
run_before (4) | Nula vlevo = 3; run_before = 1 | 10 |
run_before (3) | Nula vlevo = 2; run_before = 0 | 1 |
run_before (2) | Nula vlevo = 2; run_before = 0 | 1 |
run_before (1) | Nula vlevo = 2; run_before = 1 | 01 |
run_before (0) | Nula vlevo = 1; run_before = 1 | Není vyžadován žádný kód; poslední koeficient. |
Kód | Živel | Hodnota | Výstupní pole |
---|---|---|---|
0000100 | coeff_token | Celkový koeficient = 5, T1 = 3 | Prázdný |
0 | Znamení T1 | + | 1 |
1 | Znamení T1 | - | −1, 1 |
1 | Znamení T1 | - | −1, −1, 1 |
1 | Úroveň | +1 | 1, −1, −1, 1 |
0010 | Úroveň | +3 | 3, 1, −1, −1, 1 |
111 | TotalZeros | 3 | 3, 1, −1, −1, 1 |
10 | run_before | 1 | 3, 1, −1, −1, 0, 1 |
1 | run_before | 0 | 3, 1, −1, −1, 0, 1 |
1 | run_before | 0 | 3, 1, −1, −1, 0, 1 |
01 | run_before | 1 | 3, 0, 1, −1, −1, 0, 1 |
Ve všech následujících příkladech předpokládáme, že pro kódování coeff_token se používá tabulka Num-VLC0.

0, 3, 0, 1, −1, −1, 0, 1, 0… TotalCoeffs = 5 (indexováno od nejvyšší frekvence [4] po nejnižší frekvenci [0])
TotalZeros = 3
T1s = 3 (ve skutečnosti existují 4 koncové, ale pouze 3 lze kódovat jako „speciální případ“)
Kódování:
Přenášený bitový tok pro tento blok je 000010001110010111101101.
Dekódování: Výstupní pole je „vytvořeno“ z dekódovaných hodnot, jak je uvedeno níže. Hodnoty přidané do výstupního pole v každé fázi jsou podtrženy.
Dekodér vložil dvě nuly; TotalZeros se však rovná 3, a tak se před nejnižší koeficient vloží další 1 nula, takže výsledné výstupní pole: 0, 3, 0, 1, −1, −1, 0, 1
Viz také
externí odkazy
![]() | Tento počítačová věda článek je a pahýl. Wikipedii můžete pomoci pomocí rozšiřovat to. |