VC-1 Tables

(Part of Understanding VC-1)

Block Transform Types

• 0: 8x8 transform
• 1: 8x4 transform
• 2: 4x8 transform
• 3: 4x4 transform

Scaling Modes

• 0: 1x1 = no scaling
• 1: 2x1 = horizontal scaling
• 2: 1x2 = vertical scaling
• 3: 2x2 = horizontal and vertical scaling

Motion Vector Ranges

• Range #0:
• x component range = -64..63
• y component range = -32..31
• Range #1:
• x component range = -128..127
• y component range = -64..63
• Range #2:
• x component range = -512..511
• y component range = -128..127
• Range #3:
• x component range = -1024..1023
• y component range = -256..255

Motion Vector Range VLC Table

```code length   VLC    range #
1          0        0
2          2        1
3          6        2
3          7        3
```

Transform Tables

These tables pertain to vc1ITRANS_InverseTransform_AnnexA1.

Transform Matrix 8x8

``` int transform_matrix_8x8[8][8] =
{
{  12,  12,  12,  12,  12,  12,  12,  12 },
{  16,  15,   9,   4,  -4,  -9, -15, -16 },
{  16,   6,  -6, -16, -16,  -6,   6,  16 },
{  15,  -4, -16,  -9,   9,  16,   4, -15 },
{  12, -12, -12,  12,  12, -12, -12,  12 },
{   9, -16,   4,  15, -15,  -4,  16,  -9 },
{   6, -16,  16,  -6,  -6,  16, -16,   6 },
{   4,  -9,  15, -16,  16, -15,   9,  -4 }
};
```

Transform Matrix 8x8

``` int transform_matrix_4x4[4][4] =
{
{  17,  17,  17,  17 },
{  22,  10, -10, -22 },
{  17, -17, -17,  17 },
{  10, -22,  22, -10 }
};
```

Constants 8

``` int constants_8 = { 0,   0,   0,   0,   1,   1,   1,   1 };
```

Constants 4

``` int constants_4 = { 0,   0,   0,   0 };
```

Bicubic Filter Coefficients

• 1/4 pel coordinate: {-4, 53, 18, -3}, divisor = 64 = 26
• 1/2 pel coordinate: {-1, 9, 9, -1}, divisor = 16 = 24
• 3/4 pel coordinate: {-3, 18, 53, -4}, divisor = 64 = 26

Bilinear Filter Coefficients

• array a: {4, 3, 2, 1}
• array b: {0, 1, 2, 3}