Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
Context-adaptive variable-length coding

Context-adaptive variable-length coding (CAVLC) is a form of entropy coding used in H.264/MPEG-4 AVC video encoding. It is an inherently lossless compression technique, like almost all entropy-coders. In H.264/MPEG-4 AVC, it is used to encode residual, zig-zag order, blocks of transform coefficients. It is an alternative to context-adaptive binary arithmetic coding (CABAC). CAVLC requires considerably less processing to decode than CABAC, although it does not compress the data quite as effectively. CAVLC is supported in all H.264 profiles, unlike CABAC which is not supported in Baseline and Extended profiles.

CAVLC is used to encode residual, zig-zag ordered 4×4 (and 2×2) blocks of transform coefficients. CAVLC is designed to take advantage of several characteristics of quantized 4×4 blocks:

  • After prediction, transformation and quantization, blocks are typically sparse (containing mostly zeros).
  • The highest non-zero coefficients after zig-zag scan are often sequences of +/− 1. CAVLC signals the number of high-frequency +/−1 coefficients in a compact way.
  • The number of non-zero coefficients in neighbouring blocks is correlated. The number of coefficients is encoded using a look-up table; the choice of look-up table depends on the number of non-zero coefficients in neighbouring blocks.
  • The level (magnitude) of non-zero coefficients tends to be higher at the start of the reordered array (near the DC coefficient) and lower towards the higher frequencies. CAVLC takes advantage of this by adapting the choice of VLC look-up table for the "level" parameter depending on recently coded level magnitudes.
We don't have any images related to Context-adaptive variable-length coding yet.
We don't have any YouTube videos related to Context-adaptive variable-length coding yet.
We don't have any PDF documents related to Context-adaptive variable-length coding yet.
We don't have any Books related to Context-adaptive variable-length coding yet.
We don't have any archived web articles related to Context-adaptive variable-length coding yet.

Coded elements

Parameters that required to be encoded and transmitted include the following table:

ParametersDescription
Macroblock typePrediction method for each coded macroblock
Coded block patternIndicates which blocks within a macroblock contain coded coefficients
Quantizer parameter reference frameTransmitted as a delta value from the previous value of QP
Reference frame indexIdentify reference frame(s) for inter prediction
Motion vectorTransmitted as a difference (mvd) from predicted motion vector
Residual dataCoefficient data for each 4×4 or 2×2 block

CAVLC examples

ElementValueCode
coeff_tokenTotalCoeffs=5, T1s=30000100
T1 sign (4)+0
T1 sign (3)-1
T1 sign (2)-1
Level (1)+1 (use Level_VLC0)1
Level (0)+3 (use Level_VLC1)0010
TotalZeros3111
run_before(4)ZerosLeft=3; run_before=110
run_before(3)ZerosLeft=2; run_before=01
run_before(2)ZerosLeft=2; run_before=01
run_before(1)ZerosLeft=2; run_before=101
run_before(0)ZerosLeft=1; run_before=1No code required; last coefficient.
CodeElementValueOutput array
0000100coeff_tokenTotal Coeffs=5, T1s=3Empty
0T1 sign+1
1T1 sign-−1, 1
1T1 sign-−1, −1, 1
1Level+11, −1, −1, 1
0010Level+33, 1, −1, −1, 1
111TotalZeros33, 1, −1, −1, 1
10run_before13, 1, −1, −1, 0, 1
1run_before03, 1, −1, −1, 0, 1
1run_before03, 1, −1, −1, 0, 1
01run_before13, 0, 1, −1, −1, 0, 1

In all following examples, we assume that table Num-VLC0 is used to encode coeff_token.

0, 3, 0, 1, −1, −1, 0, 1, 0… TotalCoeffs = 5 (indexed from highest frequency [4] to lowest frequency [0])

TotalZeros = 3

T1s = 3 (in fact there are 4 trailing ones but only 3 can be encoded as a "special case")

Encoding:

The transmitted bitstream for this block is 000010001110010111101101.

Decoding: The output array is "built up" from the decoded values as shown below. Values added to the output array at each stage are underlined.

The decoder has inserted two zeros; however, TotalZeros is equal to 3 and so another 1 zero is inserted before the lowest coefficient, making the final output array: 0, 3, 0, 1, −1, −1, 0, 1

See also