CAVLC est utilisé pour encoder les blocs résiduels en zigzag de coefficients de transformation, de taille 4×4 (et 2×2). CAVLC est conçu pour tirer parti de plusieurs caractéristiques des blocs 4×4 quantifiés :
- Après prédiction, transformation et quantification, les blocs sont généralement clairsemés (contenant principalement des zéros).
- Les coefficients non nuls les plus élevés après un balayage en zigzag sont souvent des séquences de +/− 1. CAVLC signale le nombre de coefficients haute fréquence +/−1 de manière compacte.
- Le nombre de coefficients non nuls dans les blocs voisins est corrélé. Ce nombre est codé à l'aide d'une table de correspondance ; le choix de cette table dépend du nombre de coefficients non nuls dans les blocs voisins.
- Le niveau (amplitude) des coefficients non nuls tend à être plus élevé au début du réseau réorganisé (près du coefficient continu) et plus faible vers les hautes fréquences. CAVLC tire parti de cette propriété en adaptant le choix de la table de consultation VLC pour le paramètre « niveau » en fonction des amplitudes de niveau récemment codées.
Exemples de CAVLC
| Élément | Valeur | Code |
|---|---|---|
| jeton coeff | TotalCoeffs=5, T1s=3 | 0000100 |
| Signe T1 (4) | + | 0 |
| Signe T1 (3) | - | 1 |
| Signe T1 (2) | - | 1 |
| Niveau (1) | +1 (utiliser Level_VLC0) | 1 |
| Niveau (0) | +3 (utiliser Level_VLC1) | 0010 |
| TotalZeros | 3 | 111 |
| exécuter_avant(4) | ZerosLeft=3; run_before=1 | 10 |
| exécuter_avant(3) | ZerosLeft=2; run_before=0 | 1 |
| exécuter_avant(2) | ZerosLeft=2; run_before=0 | 1 |
| exécuter_avant(1) | ZerosLeft=2; run_before=1 | 01 |
| exécuter_avant(0) | ZerosLeft=1; run_before=1 | Aucun code requis ; dernier coefficient. |
| Code | Élément | Valeur | Tableau de sortie |
|---|---|---|---|
| 0000100 | jeton coeff | Coefficients totaux = 5, T1s = 3 | Vide |
| 0 | Signe T1 | + | 1 |
| 1 | Signe T1 | - | −1 , 1 |
| 1 | Signe T1 | - | −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 | exécuter_avant | 1 | 3, 1, −1, −1, 0 , 1 |
| 1 | exécuter_avant | 0 | 3, 1, −1, −1, 0, 1 |
| 1 | exécuter_avant | 0 | 3, 1, −1, −1, 0, 1 |
| 01 | exécuter_avant | 1 | 3, 0 , 1, −1, −1, 0, 1 |
Dans tous les exemples suivants, nous supposons que la table Num-VLC0 est utilisée pour encoder coeff_token.

0, 3, 0, 1, −1, −1, 0, 1, 0… TotalCoeffs = 5 (indexé de la fréquence la plus élevée [4] à la fréquence la plus basse [0])
TotalZeros = 3
T1s = 3 (en fait, il y a 4 1 à la fin, mais seuls 3 peuvent être encodés comme un « cas particulier »)
Codage:
Le flux binaire transmis pour ce bloc est 000010001110010111101101.
Décodage : Le tableau de sortie est construit à partir des valeurs décodées, comme indiqué ci-dessous. Les valeurs ajoutées au tableau de sortie à chaque étape sont soulignées.
Le décodeur a inséré deux zéros ; cependant, TotalZeros est égal à 3, donc un autre zéro est inséré avant le coefficient le plus faible, ce qui donne le tableau de sortie final : 0, 3, 0, 1, −1, −1, 0, 1