Article de reference

Codage à longueur variable adaptatif au contexte

Le codage à longueur variable adaptatif au contexte ( CAVLC ) est une forme de codage entropique utilisée dans l'encodage vidéo H.264/MPEG-4 AVC . Il s'agit d'une technique de c...

Le codage à longueur variable adaptatif au contexte ( CAVLC ) est une forme de codage entropique utilisée dans l'encodage vidéo H.264/MPEG-4 AVC . Il s'agit d'une technique de compression intrinsèquement sans perte , comme la quasi-totalité des codeurs entropiques. Dans H.264/MPEG-4 AVC, il sert à encoder les blocs résiduels, ordonnés en zigzag, des coefficients de transformation. C'est une alternative au codage arithmétique binaire adaptatif au contexte (CABAC). Le décodage CAVLC nécessite un traitement considérablement moins important que le CABAC, bien qu'il compresse les données un peu moins efficacement. Le CAVLC est pris en charge par tous les profils H.264, contrairement au CABAC qui n'est pas pris en charge par les profils Baseline et Extended.

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.
ParamètresDescriptionType macroblocMéthode de prédiction pour chaque macrobloc codéModèle de bloc codéIndique quels blocs d'un macrobloc contiennent des coefficients codés.cadre de référence des paramètres du quantificateurTransmis sous forme de valeur delta par rapport à la valeur précédente de QPIndice du cadre de référenceIdentifier le(s) cadre(s) de référence pour la prédiction inter-référencesVecteur de mouvementTransmis sous forme de différence (mvd) par rapport au vecteur de mouvement préditDonnées résiduellesDonnées des coefficients pour chaque bloc 4×4 ou 2×2

Exemples de CAVLC

ÉlémentValeurCode
jeton coeffTotalCoeffs=5, T1s=30000100
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
TotalZeros3111
exécuter_avant(4)ZerosLeft=3; run_before=110
exécuter_avant(3)ZerosLeft=2; run_before=01
exécuter_avant(2)ZerosLeft=2; run_before=01
exécuter_avant(1)ZerosLeft=2; run_before=101
exécuter_avant(0)ZerosLeft=1; run_before=1Aucun code requis ; dernier coefficient.
CodeÉlémentValeurTableau de sortie
0000100jeton coeffCoefficients totaux = 5, T1s = 3Vide
0Signe T1+1
1Signe T1-−1 , 1
1Signe T1-−1 , −1, 1
1Niveau+11 , −1, −1, 1
0010Niveau+33 , 1, −1, −1, 1
111TotalZeros33, 1, −1, −1, 1
10exécuter_avant13, 1, −1, −1, 0 , 1
1exécuter_avant03, 1, −1, −1, 0, 1
1exécuter_avant03, 1, −1, −1, 0, 1
01exécuter_avant13, 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