Kontextanpassad kodning med variabel längd

Kontextadaptiv kodning med variabel längd ( CAVLC ) är en form av entropikodning som används i H.264/MPEG-4 AVC- videokodning. Det är en i sig förlustfri komprimeringsteknik , som nästan alla entropikodare. I H.264/MPEG-4 AVC används den för att koda kvarvarande block av transformskoefficienter i sicksackordning. Det är ett alternativ till kontextbaserad adaptiv binär aritmetisk kodning (CABAC). CAVLC kräver betydligt mindre bearbetning att avkoda än CABAC, även om det inte komprimerar data lika effektivt. CAVLC stöds i alla H.264-profiler, till skillnad från CABAC som inte stöds i Baseline- och Extended-profiler.

CAVLC används för att koda kvarvarande, sicksackordnade 4×4 (och 2×2) block av transformationskoefficienter. CAVLC är utformad för att dra fördel av flera egenskaper hos kvantiserade 4×4-block:

  • Efter förutsägelse, transformation och kvantisering är blocken vanligtvis glesa (innehåller mestadels nollor).
  • De högsta koefficienterna som inte är noll efter sicksackavsökning är ofta sekvenser av +/− 1. CAVLC signalerar antalet högfrekventa +/−1 koefficienter på ett kompakt sätt.
  • Antalet koefficienter som inte är noll i angränsande block är korrelerat. Antalet koefficienter kodas med hjälp av en uppslagstabell; valet av uppslagstabell beror på antalet icke-nollkoefficienter i angränsande block.
  • Nivån (magnitud) av koefficienter som inte är noll tenderar att vara högre i början av den omordnade matrisen (nära DC-koefficienten) och lägre mot de högre frekvenserna. CAVLC drar fördel av detta genom att anpassa valet av VLC-uppslagstabell för parametern "nivå" beroende på nyligen kodade nivåstorlekar.

Kodade element

Parametrar som måste kodas och överföras inkluderar följande tabell:

Parametrar Beskrivning
Typ av makroblock Prediktionsmetod för varje kodat makroblock
Kodat blockmönster Indikerar vilka block inom ett makroblock som innehåller kodade koefficienter
Kvantiseringsparameterreferensram Sänds som ett deltavärde från föregående värde på QP
Referensramindex Identifiera referensram(ar) för interprediktion
Rörelsevektor Sänds som en skillnad (mvd) från förutsagd rörelsevektor
Återstående data Koefficientdata för varje 4×4 eller 2×2 block

CAVLC exempel

Element Värde Koda
coeff_token TotalCoeffs=5, T1s=3 0000100
T1 tecken (4) + 0
T1 tecken (3) - 1
T1 tecken (2) - 1
Nivå 1) +1 (använd Level_VLC0) 1
Nivå (0) +3 (använd Level_VLC1) 0010
TotalZeros 3 111
köra_före(4) ZerosLeft=3; run_before=1 10
köra_före(3) ZerosLeft=2; run_before=0 1
köra_före(2) ZerosLeft=2; run_before=0 1
köra_före(1) ZerosLeft=2; run_before=1 01
run_before(0) ZerosLeft=1; run_before=1 Ingen kod krävs; sista koefficienten.
Koda Element Värde Utdatamatris
0000100 coeff_token Totala koeffs=5, T1s=3 Tömma
0 T1 tecken + 1
1 T1 tecken - −1 , 1
1 T1 tecken - −1 , −1, 1
1 Nivå +1 1 , −1, −1, 1
0010 Nivå +3 3 , 1, −1, −1, 1
111 TotalZeros 3 3, 1, −1, −1, 1
10 köra_före 1 0 3, 1, −1, −1, , 1
1 köra_före 0 3, 1, −1, −1, 0, 1
1 köra_före 0 3, 1, −1, −1, 0, 1
01 köra_före 1 0 3, , 1, −1, −1, 0, 1

I alla följande exempel antar vi att tabellen Num-VLC0 används för att koda coeff_token.

4x4CAVLC.svg

0, 3, 0, 1, −1, −1, 0, 1, 0... TotalCoeffs = 5 (indexerat från högsta frekvens [4] till lägsta frekvens [0])

TotalZeros = 3

T1s = 3 (det finns faktiskt fyra efterföljande men endast 3 kan kodas som ett "specialfall")

Kodning:

Den överförda bitströmmen för detta block är 000010001110010111101101.

Avkodning: Utdatamatrisen är "uppbyggd" från de avkodade värdena som visas nedan. Värden som läggs till utgångsmatrisen i varje steg är understrukna.

Avkodaren har satt in två nollor; dock är TotalZeros lika med 3 och därför infogas ytterligare 1 nolla före den lägsta koefficienten, vilket gör den slutliga utmatningen: 0, 3, 0, 1, −1, −1, 0, 1

Se även

externa länkar