Kontextadaptive Codierung mit variabler Länge - Context-adaptive variable-length coding

Die kontextadaptive Variable-Length-Codierung ( CAVLC ) ist eine Form der Entropiecodierung, die bei der H.264/MPEG-4-AVC- Videocodierung verwendet wird. Es ist eine von Natur aus verlustfreie Kompressionstechnik , wie fast alle Entropie-Codierer. In H.264/MPEG-4 AVC wird es verwendet, um restliche Blöcke von Transformationskoeffizienten in Zick-Zack-Reihenfolge zu codieren. Es ist eine Alternative zur kontextbasierten adaptiven binären arithmetischen Codierung (CABAC). CAVLC erfordert zum Decodieren erheblich weniger Verarbeitungsaufwand als CABAC, obwohl die Daten nicht ganz so effektiv komprimiert werden. CAVLC wird in allen H.264-Profilen unterstützt, im Gegensatz zu CABAC, das in Baseline- und Extended-Profilen nicht unterstützt wird.

CAVLC wird verwendet, um restliche, zickzackförmig geordnete 4×4 (und 2×2) Blöcke von Transformationskoeffizienten zu codieren. CAVLC wurde entwickelt, um verschiedene Eigenschaften von quantisierten 4×4-Blöcken zu nutzen:

  • Nach der Vorhersage, Transformation und Quantisierung sind Blöcke typischerweise spärlich (mit meist Nullen).
  • Die höchsten von Null verschiedenen Koeffizienten nach dem Zick-Zack-Scan sind oft Folgen von +/- 1. CAVLC signalisiert die Anzahl der hochfrequenten +/- 1 Koeffizienten auf kompakte Weise.
  • Die Anzahl von Nicht-Null-Koeffizienten in benachbarten Blöcken ist korreliert. Die Anzahl der Koeffizienten wird unter Verwendung einer Nachschlagetabelle codiert; die Wahl der Nachschlagetabelle hängt von der Anzahl von Nicht-Null-Koeffizienten in benachbarten Blöcken ab.
  • Der Pegel (die Größe) von Nicht-Null-Koeffizienten neigt dazu, am Anfang des umgeordneten Arrays (in der Nähe des DC-Koeffizienten) höher und zu den höheren Frequenzen hin niedriger zu sein. CAVLC macht sich dies zunutze, indem es die Wahl der VLC-Nachschlagetabelle für den "Pegel"-Parameter in Abhängigkeit von kürzlich codierten Pegelgrößen anpasst.

Codierte Elemente

Zu den Parametern, die verschlüsselt und übertragen werden müssen, gehören die folgende Tabelle:

Parameter Beschreibung
Makroblocktyp Vorhersagemethode für jeden codierten Makroblock
Codiertes Blockmuster Gibt an, welche Blöcke innerhalb eines Makroblocks codierte Koeffizienten enthalten
Referenzrahmen für Quantisierungsparameter Wird als Delta-Wert vom vorherigen Wert von QP . übertragen
Referenzrahmenindex Identifizieren Sie Referenzrahmen für die Interprädiktion
Bewegungsvektor Als Differenz (mvd) vom vorhergesagten Bewegungsvektor übertragen
Restdaten Koeffizientendaten für jeden 4×4- oder 2×2-Block

CAVLC-Beispiele

Element Wert Code
coeff_token TotalCoeffs=5, T1s=3 0000100
T1-Zeichen (4) + 0
T1-Zeichen (3) - 1
T1-Zeichen (2) - 1
Level 1) +1 (benutze Level_VLC0) 1
Stufe (0) +3 (benutze Level_VLC1) 0010
TotalZeros 3 111
run_before(4) NullenLinks=3; run_before=1 10
run_before(3) NullenLinks=2; run_before=0 1
run_before(2) NullenLinks=2; run_before=0 1
run_before(1) NullenLinks=2; run_before=1 01
run_before(0) NullenLinks=1; run_before=1 Kein Code erforderlich; letzter Koeffizient.
Code Element Wert Ausgabe-Array
0000100 coeff_token Gesamtkoeffl.=5, T1s=3 Leer
0 T1-Zeichen + 1
1 T1-Zeichen - -1 , 1
1 T1-Zeichen - -1 , -1, 1
1 Niveau +1 1 , −1, −1, 1
0010 Niveau +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

In allen folgenden Beispielen gehen wir davon aus, dass die Tabelle Num-VLC0 verwendet wird, um coeff_token zu codieren.

4x4CAVLC.svg

0, 3, 0, 1, −1, −1, 0, 1, 0… TotalCoeffs = 5 (indiziert von der höchsten Frequenz [4] zur niedrigsten Frequenz [0])

Summe Nullen = 3

T1s = 3 (tatsächlich gibt es 4 nachfolgende, aber nur 3 können als „Sonderfall“ codiert werden)

Codierung:

Der übertragene Bitstrom für diesen Block ist 000010001110010111101101.

Dekodierung: Das Ausgabe-Array wird wie unten gezeigt aus den dekodierten Werten „aufgebaut“. Werte, die dem Ausgabearray in jeder Stufe hinzugefügt wurden, sind unterstrichen.

Der Decoder hat zwei Nullen eingefügt; TotalZeros ist jedoch gleich 3 und daher wird eine weitere 1 Null vor dem niedrigsten Koeffizienten eingefügt, was das endgültige Ausgabearray ergibt: 0, 3, 0, 1, −1, −1, 0, 1

Siehe auch

Externe Links