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 kódování entropie používaná při kódování videa H.264 / MPEG-4 AVC . Je to neodmyslitelně bezztrátová kompresní technika, jako téměř všechny kodéry entropie. V H.264 / MPEG-4 AVC se používá ke kódování zbytkových bloků transformačních koeficientů v cik-cak pořadí. Jedná se o alternativu k kontextovému adaptivnímu binárnímu aritmetickému 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, cik-cak uspořádaných 4 × 4 (a 2 × 2) bloků transformačních koeficientů. CAVLC je navržen tak, aby využíval výhod několika charakteristik kvantovaných bloků 4 × 4:

  • 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; výběr 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 velikostních veličiná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 4 × 4 nebo 2 × 2

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.

4x4CAVLC.svg

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 zakó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