VC-1 Zigzag Tables: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
''Part of [[Understanding VC-1]]'' | ''Part of [[Understanding VC-1]]'' | ||
''' | '''ZigZag Tables''' | ||
These tables are used in AC Coefficient Decode. They are selected based on the following factors: | |||
* Progressive vs Interlaced | |||
* Intra vs Inter | |||
* Ac Prediction Parameters | |||
** Prediction Direction | |||
** ACPRED syntax element | |||
* Profile | |||
* Transform Type | |||
---- | |||
<code> | |||
const BYTE8 vc1_Inv_Intra_Normal_Scan [64] = /* Table 226 */ | |||
{ | |||
0, 8, 1, 2, 9, 16, 24, 17, | |||
10, 3, 4, 11, 18, 25, 32, 40, | |||
33, 48, 26, 19, 12, 5, 6, 13, | |||
20, 27, 34, 41, 56, 49, 57, 42, | |||
35, 28, 21, 14, 7, 15, 22, 29, | |||
36, 43, 50, 58, 51, 59, 44, 37, | |||
30, 23, 31, 38, 45, 52, 60, 53, | |||
61, 46, 39, 47, 54, 62, 55, 63 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Intra_Horizontal_Scan [64] = /* Table 227 */ | |||
{ | |||
0, 1, 8, 2, 3, 9, 16, 24, | |||
17, 10, 4, 5, 11, 18, 25, 32, | |||
40, 48, 33, 26, 19, 12, 6, 7, | |||
13, 20, 27, 34, 41, 56, 49, 57, | |||
42, 35, 28, 21, 14, 15, 22, 29, | |||
36, 43, 50, 58, 51, 44, 37, 30, | |||
23, 31, 38, 45, 52, 59, 60, 53, | |||
46, 39, 47, 54, 61, 62, 55, 63 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Intra_Vertical_Scan [64] = /* Table 228 */ | |||
{ | |||
0, 8, 16, 1, 24, 32, 40, 9, | |||
2, 3, 10, 17, 25, 48, 56, 41, | |||
33, 26, 18, 11, 4, 5, 12, 19, | |||
27, 34, 49, 57, 50, 42, 35, 28, | |||
20, 13, 6, 7, 14, 21, 29, 36, | |||
43, 51, 58, 59, 52, 44, 37, 30, | |||
22, 15, 23, 31, 38, 45, 60, 53, | |||
46, 39, 47, 54, 61, 62, 55, 63 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Inter_8x8_Scan_Simple_Main_Profiles_Progressive_Advanced_Profile [64] = /* Table 229 */ | |||
{ | |||
0, 8, 1, 2, 9, 16, 24, 17, | |||
10, 3, 4, 11, 18, 25, 32, 40, | |||
48, 56, 41, 33, 26, 19, 12, 5, | |||
6, 13, 20, 27, 34, 49, 57, 58, | |||
50, 42, 35, 28, 21, 14, 7, 15, | |||
22, 29, 36, 43, 51, 59, 60, 52, | |||
44, 37, 30, 23, 31, 38, 45, 53, | |||
61, 62, 54, 46, 39, 47, 55, 63 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Inter_8x4_Scan_Simple_Main_Profiles [32] = /* Table 230 */ | |||
{ | |||
0, 1, 2, 8, 3, 9, 10, 16, | |||
4, 11, 17, 24, 18, 12, 5, 19, | |||
25, 13, 20, 26, 27, 6, 21, 28, | |||
14, 22, 29, 7, 30, 15, 23, 31 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Inter_4x8_Scan_Simple_Main_Profiles [32] = /* Table 231 */ | |||
{ | |||
0, 8, 1, 16, | |||
9, 24, 17, 2, | |||
32, 10, 25, 40, | |||
18, 48, 33, 26, | |||
56, 41, 34, 3, | |||
49, 57, 11, 42, | |||
19, 50, 27, 58, | |||
35, 43, 51, 59 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Inter_4x4_Scan_Simple_Main_Profiles_Progressive_Advanced_Profile [16] = /* Table 232 */ | |||
{ | |||
0, 8, 16, 1, | |||
9, 24, 17, 2, | |||
10, 18, 25, 3, | |||
11, 26, 19, 27 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Progressive_Inter_8x4_Scan_Advanced_Profile [32] = /* Table 233 */ | |||
{ | |||
0, 8, 1, 16, 2, 9, 10, 3, | |||
24, 17, 4, 11, 18, 12, 5, 19, | |||
25, 13, 20, 26, 27, 6, 21, 28, | |||
14, 22, 29, 7, 30, 15, 23, 31 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Progressive_Inter_4x8_Scan_Advanced_Profile [32] = /* Table 234 */ | |||
{ | |||
0, 1, 8, 2, | |||
9, 16, 17, 24, | |||
10, 32, 25, 18, | |||
40, 3, 33, 26, | |||
48, 11, 56, 41, | |||
34, 49, 57, 42, | |||
19, 50, 27, 58, | |||
35, 43, 51, 59 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Interlace_Inter_8x8_Scan_Advanced_Profile [64] = /* Table 235 */ | |||
{ | |||
0, 8, 1, 16, 24, 9, 2, 32, | |||
40, 48, 56, 17, 10, 3, 25, 18, | |||
11, 4, 33, 41, 49, 57, 26, 34, | |||
42, 50, 58, 19, 12, 5, 27, 20, | |||
13, 6, 35, 28, 21, 14, 7, 15, | |||
22, 29, 36, 43, 51, 59, 60, 52, | |||
44, 37, 30, 23, 31, 38, 45, 53, | |||
61, 62, 54, 46, 39, 47, 55, 63 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Interlace_Inter_8x4_Scan_Advanced_Profile [32] = /* Table 236 */ | |||
{ | |||
0, 8, 16, 24, 1, 9, 2, 17, | |||
25, 10, 3, 18, 26, 4, 11, 19, | |||
12, 5, 13, 20, 27, 6, 21, 28, | |||
14, 22, 29, 7, 30, 15, 23, 31 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Interlace_Inter_4x8_Scan_Advanced_Profile [32] = /* Table 237 */ | |||
{ | |||
0, 1, 2, 8, | |||
16, 9, 24, 17, | |||
10, 3, 32, 40, | |||
48, 56, 25, 18, | |||
33, 26, 41, 34, | |||
49, 57, 11, 42, | |||
19, 50, 27, 58, | |||
35, 43, 51, 59 | |||
}; | |||
</code> | |||
<code> | |||
const BYTE8 vc1_Inv_Interlace_Inter_4x4_Scan_Advanced_Profile [16] = /* Table 238 */ | |||
{ | |||
0, 8, 16, 24, | |||
1, 9, 17, 2, | |||
25, 10, 18, 3, | |||
26, 11, 19, 27 | |||
}; | |||
</code> |
Revision as of 17:28, 24 October 2006
Part of Understanding VC-1
ZigZag Tables
These tables are used in AC Coefficient Decode. They are selected based on the following factors:
- Progressive vs Interlaced
- Intra vs Inter
- Ac Prediction Parameters
- Prediction Direction
- ACPRED syntax element
- Profile
- Transform Type
const BYTE8 vc1_Inv_Intra_Normal_Scan [64] = /* Table 226 */
{
0, 8, 1, 2, 9, 16, 24, 17,
10, 3, 4, 11, 18, 25, 32, 40,
33, 48, 26, 19, 12, 5, 6, 13,
20, 27, 34, 41, 56, 49, 57, 42,
35, 28, 21, 14, 7, 15, 22, 29,
36, 43, 50, 58, 51, 59, 44, 37,
30, 23, 31, 38, 45, 52, 60, 53,
61, 46, 39, 47, 54, 62, 55, 63
};
const BYTE8 vc1_Inv_Intra_Horizontal_Scan [64] = /* Table 227 */
{
0, 1, 8, 2, 3, 9, 16, 24,
17, 10, 4, 5, 11, 18, 25, 32,
40, 48, 33, 26, 19, 12, 6, 7,
13, 20, 27, 34, 41, 56, 49, 57,
42, 35, 28, 21, 14, 15, 22, 29,
36, 43, 50, 58, 51, 44, 37, 30,
23, 31, 38, 45, 52, 59, 60, 53,
46, 39, 47, 54, 61, 62, 55, 63
};
const BYTE8 vc1_Inv_Intra_Vertical_Scan [64] = /* Table 228 */
{
0, 8, 16, 1, 24, 32, 40, 9,
2, 3, 10, 17, 25, 48, 56, 41,
33, 26, 18, 11, 4, 5, 12, 19,
27, 34, 49, 57, 50, 42, 35, 28,
20, 13, 6, 7, 14, 21, 29, 36,
43, 51, 58, 59, 52, 44, 37, 30,
22, 15, 23, 31, 38, 45, 60, 53,
46, 39, 47, 54, 61, 62, 55, 63
};
const BYTE8 vc1_Inv_Inter_8x8_Scan_Simple_Main_Profiles_Progressive_Advanced_Profile [64] = /* Table 229 */
{
0, 8, 1, 2, 9, 16, 24, 17,
10, 3, 4, 11, 18, 25, 32, 40,
48, 56, 41, 33, 26, 19, 12, 5,
6, 13, 20, 27, 34, 49, 57, 58,
50, 42, 35, 28, 21, 14, 7, 15,
22, 29, 36, 43, 51, 59, 60, 52,
44, 37, 30, 23, 31, 38, 45, 53,
61, 62, 54, 46, 39, 47, 55, 63
};
const BYTE8 vc1_Inv_Inter_8x4_Scan_Simple_Main_Profiles [32] = /* Table 230 */
{
0, 1, 2, 8, 3, 9, 10, 16,
4, 11, 17, 24, 18, 12, 5, 19,
25, 13, 20, 26, 27, 6, 21, 28,
14, 22, 29, 7, 30, 15, 23, 31
};
const BYTE8 vc1_Inv_Inter_4x8_Scan_Simple_Main_Profiles [32] = /* Table 231 */
{
0, 8, 1, 16,
9, 24, 17, 2,
32, 10, 25, 40,
18, 48, 33, 26,
56, 41, 34, 3,
49, 57, 11, 42,
19, 50, 27, 58,
35, 43, 51, 59
};
const BYTE8 vc1_Inv_Inter_4x4_Scan_Simple_Main_Profiles_Progressive_Advanced_Profile [16] = /* Table 232 */
{
0, 8, 16, 1,
9, 24, 17, 2,
10, 18, 25, 3,
11, 26, 19, 27
};
const BYTE8 vc1_Inv_Progressive_Inter_8x4_Scan_Advanced_Profile [32] = /* Table 233 */
{
0, 8, 1, 16, 2, 9, 10, 3,
24, 17, 4, 11, 18, 12, 5, 19,
25, 13, 20, 26, 27, 6, 21, 28,
14, 22, 29, 7, 30, 15, 23, 31
};
const BYTE8 vc1_Inv_Progressive_Inter_4x8_Scan_Advanced_Profile [32] = /* Table 234 */
{
0, 1, 8, 2,
9, 16, 17, 24,
10, 32, 25, 18,
40, 3, 33, 26,
48, 11, 56, 41,
34, 49, 57, 42,
19, 50, 27, 58,
35, 43, 51, 59
};
const BYTE8 vc1_Inv_Interlace_Inter_8x8_Scan_Advanced_Profile [64] = /* Table 235 */
{
0, 8, 1, 16, 24, 9, 2, 32,
40, 48, 56, 17, 10, 3, 25, 18,
11, 4, 33, 41, 49, 57, 26, 34,
42, 50, 58, 19, 12, 5, 27, 20,
13, 6, 35, 28, 21, 14, 7, 15,
22, 29, 36, 43, 51, 59, 60, 52,
44, 37, 30, 23, 31, 38, 45, 53,
61, 62, 54, 46, 39, 47, 55, 63
};
const BYTE8 vc1_Inv_Interlace_Inter_8x4_Scan_Advanced_Profile [32] = /* Table 236 */
{
0, 8, 16, 24, 1, 9, 2, 17,
25, 10, 3, 18, 26, 4, 11, 19,
12, 5, 13, 20, 27, 6, 21, 28,
14, 22, 29, 7, 30, 15, 23, 31
};
const BYTE8 vc1_Inv_Interlace_Inter_4x8_Scan_Advanced_Profile [32] = /* Table 237 */
{
0, 1, 2, 8,
16, 9, 24, 17,
10, 3, 32, 40,
48, 56, 25, 18,
33, 26, 41, 34,
49, 57, 11, 42,
19, 50, 27, 58,
35, 43, 51, 59
};
const BYTE8 vc1_Inv_Interlace_Inter_4x4_Scan_Advanced_Profile [16] = /* Table 238 */
{
0, 8, 16, 24,
1, 9, 17, 2,
25, 10, 18, 3,
26, 11, 19, 27
};