h263 stuffing decode fix
[ffmpeg.git] / libavcodec / h263data.h
1 /**
2  * @file h263data.h
3  * H.263 tables.
4  */
5
6
7 /* intra MCBPC, mb_type = (intra), then (intraq) */
8 const uint8_t intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 };
9 const uint8_t intra_MCBPC_bits[9] = { 1, 3, 3, 3, 4, 6, 6, 6, 9 };
10
11 /* inter MCBPC, mb_type = (inter), (intra), (interq), (intraq), (inter4v) */
12 /* Changed the tables for interq and inter4v+q, following the standard ** Juanjo ** */
13 const uint8_t inter_MCBPC_code[28] = { 
14     1, 3, 2, 5, 
15     3, 4, 3, 3, 
16     3, 7, 6, 5,
17     4, 4, 3, 2,
18     2, 5, 4, 5,
19     1, 0, 0, 0, /* Stuffing */
20     2, 12, 14, 15,
21 };
22 const uint8_t inter_MCBPC_bits[28] = { 
23     1, 4, 4, 6, /* inter  */
24     5, 8, 8, 7, /* intra  */
25     3, 7, 7, 9, /* interQ */
26     6, 9, 9, 9, /* intraQ */
27     3, 7, 7, 8, /* inter4 */
28     9, 0, 0, 0, /* Stuffing */
29     11, 13, 13, 13,/* inter4Q*/
30 };
31
32 const uint8_t cbpy_tab[16][2] =
33 {
34   {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
35   {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
36 };
37
38 const uint8_t mvtab[33][2] =
39 {
40   {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
41   {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
42   {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
43   {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
44   {2,12}
45 };
46
47 /* third non intra table */
48 const uint16_t inter_vlc[103][2] = {
49 { 0x2, 2 },{ 0xf, 4 },{ 0x15, 6 },{ 0x17, 7 },
50 { 0x1f, 8 },{ 0x25, 9 },{ 0x24, 9 },{ 0x21, 10 },
51 { 0x20, 10 },{ 0x7, 11 },{ 0x6, 11 },{ 0x20, 11 },
52 { 0x6, 3 },{ 0x14, 6 },{ 0x1e, 8 },{ 0xf, 10 },
53 { 0x21, 11 },{ 0x50, 12 },{ 0xe, 4 },{ 0x1d, 8 },
54 { 0xe, 10 },{ 0x51, 12 },{ 0xd, 5 },{ 0x23, 9 },
55 { 0xd, 10 },{ 0xc, 5 },{ 0x22, 9 },{ 0x52, 12 },
56 { 0xb, 5 },{ 0xc, 10 },{ 0x53, 12 },{ 0x13, 6 },
57 { 0xb, 10 },{ 0x54, 12 },{ 0x12, 6 },{ 0xa, 10 },
58 { 0x11, 6 },{ 0x9, 10 },{ 0x10, 6 },{ 0x8, 10 },
59 { 0x16, 7 },{ 0x55, 12 },{ 0x15, 7 },{ 0x14, 7 },
60 { 0x1c, 8 },{ 0x1b, 8 },{ 0x21, 9 },{ 0x20, 9 },
61 { 0x1f, 9 },{ 0x1e, 9 },{ 0x1d, 9 },{ 0x1c, 9 },
62 { 0x1b, 9 },{ 0x1a, 9 },{ 0x22, 11 },{ 0x23, 11 },
63 { 0x56, 12 },{ 0x57, 12 },{ 0x7, 4 },{ 0x19, 9 },
64 { 0x5, 11 },{ 0xf, 6 },{ 0x4, 11 },{ 0xe, 6 },
65 { 0xd, 6 },{ 0xc, 6 },{ 0x13, 7 },{ 0x12, 7 },
66 { 0x11, 7 },{ 0x10, 7 },{ 0x1a, 8 },{ 0x19, 8 },
67 { 0x18, 8 },{ 0x17, 8 },{ 0x16, 8 },{ 0x15, 8 },
68 { 0x14, 8 },{ 0x13, 8 },{ 0x18, 9 },{ 0x17, 9 },
69 { 0x16, 9 },{ 0x15, 9 },{ 0x14, 9 },{ 0x13, 9 },
70 { 0x12, 9 },{ 0x11, 9 },{ 0x7, 10 },{ 0x6, 10 },
71 { 0x5, 10 },{ 0x4, 10 },{ 0x24, 11 },{ 0x25, 11 },
72 { 0x26, 11 },{ 0x27, 11 },{ 0x58, 12 },{ 0x59, 12 },
73 { 0x5a, 12 },{ 0x5b, 12 },{ 0x5c, 12 },{ 0x5d, 12 },
74 { 0x5e, 12 },{ 0x5f, 12 },{ 0x3, 7 },
75 };
76
77 const int8_t inter_level[102] = {
78   1,  2,  3,  4,  5,  6,  7,  8,
79   9, 10, 11, 12,  1,  2,  3,  4,
80   5,  6,  1,  2,  3,  4,  1,  2,
81   3,  1,  2,  3,  1,  2,  3,  1,
82   2,  3,  1,  2,  1,  2,  1,  2,
83   1,  2,  1,  1,  1,  1,  1,  1,
84   1,  1,  1,  1,  1,  1,  1,  1,
85   1,  1,  1,  2,  3,  1,  2,  1,
86   1,  1,  1,  1,  1,  1,  1,  1,
87   1,  1,  1,  1,  1,  1,  1,  1,
88   1,  1,  1,  1,  1,  1,  1,  1,
89   1,  1,  1,  1,  1,  1,  1,  1,
90   1,  1,  1,  1,  1,  1,
91 };
92
93 const int8_t inter_run[102] = {
94   0,  0,  0,  0,  0,  0,  0,  0,
95   0,  0,  0,  0,  1,  1,  1,  1,
96   1,  1,  2,  2,  2,  2,  3,  3,
97   3,  4,  4,  4,  5,  5,  5,  6,
98   6,  6,  7,  7,  8,  8,  9,  9,
99  10, 10, 11, 12, 13, 14, 15, 16,
100  17, 18, 19, 20, 21, 22, 23, 24,
101  25, 26,  0,  0,  0,  1,  1,  2,
102   3,  4,  5,  6,  7,  8,  9, 10,
103  11, 12, 13, 14, 15, 16, 17, 18,
104  19, 20, 21, 22, 23, 24, 25, 26,
105  27, 28, 29, 30, 31, 32, 33, 34,
106  35, 36, 37, 38, 39, 40,
107 };
108
109 static RLTable rl_inter = {
110     102,
111     58,
112     inter_vlc,
113     inter_run,
114     inter_level,
115 };
116
117 const uint16_t intra_vlc_aic[103][2] = {
118 {  0x2,  2 }, {  0x6,  3 }, {  0xe,  4 }, {  0xc,  5 }, 
119 {  0xd,  5 }, { 0x10,  6 }, { 0x11,  6 }, { 0x12,  6 }, 
120 { 0x16,  7 }, { 0x1b,  8 }, { 0x20,  9 }, { 0x21,  9 }, 
121 { 0x1a,  9 }, { 0x1b,  9 }, { 0x1c,  9 }, { 0x1d,  9 }, 
122 { 0x1e,  9 }, { 0x1f,  9 }, { 0x23, 11 }, { 0x22, 11 }, 
123 { 0x57, 12 }, { 0x56, 12 }, { 0x55, 12 }, { 0x54, 12 }, 
124 { 0x53, 12 }, {  0xf,  4 }, { 0x14,  6 }, { 0x14,  7 }, 
125 { 0x1e,  8 }, {  0xf, 10 }, { 0x21, 11 }, { 0x50, 12 }, 
126 {  0xb,  5 }, { 0x15,  7 }, {  0xe, 10 }, {  0x9, 10 }, 
127 { 0x15,  6 }, { 0x1d,  8 }, {  0xd, 10 }, { 0x51, 12 }, 
128 { 0x13,  6 }, { 0x23,  9 }, {  0x7, 11 }, { 0x17,  7 }, 
129 { 0x22,  9 }, { 0x52, 12 }, { 0x1c,  8 }, {  0xc, 10 }, 
130 { 0x1f,  8 }, {  0xb, 10 }, { 0x25,  9 }, {  0xa, 10 }, 
131 { 0x24,  9 }, {  0x6, 11 }, { 0x21, 10 }, { 0x20, 10 }, 
132 {  0x8, 10 }, { 0x20, 11 }, {  0x7,  4 }, {  0xc,  6 }, 
133 { 0x10,  7 }, { 0x13,  8 }, { 0x11,  9 }, { 0x12,  9 }, 
134 {  0x4, 10 }, { 0x27, 11 }, { 0x26, 11 }, { 0x5f, 12 }, 
135 {  0xf,  6 }, { 0x13,  9 }, {  0x5, 10 }, { 0x25, 11 }, 
136 {  0xe,  6 }, { 0x14,  9 }, { 0x24, 11 }, {  0xd,  6 }, 
137 {  0x6, 10 }, { 0x5e, 12 }, { 0x11,  7 }, {  0x7, 10 }, 
138 { 0x13,  7 }, { 0x5d, 12 }, { 0x12,  7 }, { 0x5c, 12 }, 
139 { 0x14,  8 }, { 0x5b, 12 }, { 0x15,  8 }, { 0x1a,  8 }, 
140 { 0x19,  8 }, { 0x18,  8 }, { 0x17,  8 }, { 0x16,  8 }, 
141 { 0x19,  9 }, { 0x15,  9 }, { 0x16,  9 }, { 0x18,  9 }, 
142 { 0x17,  9 }, {  0x4, 11 }, {  0x5, 11 }, { 0x58, 12 }, 
143 { 0x59, 12 }, { 0x5a, 12 }, {  0x3,  7 },
144 };
145
146 const int8_t intra_run_aic[102] = {
147  0,  0,  0,  0,  0,  0,  0,  0, 
148  0,  0,  0,  0,  0,  0,  0,  0, 
149  0,  0,  0,  0,  0,  0,  0,  0, 
150  0,  1,  1,  1,  1,  1,  1,  1, 
151  2,  2,  2,  2,  3,  3,  3,  3, 
152  4,  4,  4,  5,  5,  5,  6,  6, 
153  7,  7,  8,  8,  9,  9, 10, 11, 
154 12, 13,  0,  0,  0,  0,  0,  0, 
155  0,  0,  0,  0,  1,  1,  1,  1, 
156  2,  2,  2,  3,  3,  3,  4,  4, 
157  5,  5,  6,  6,  7,  7,  8,  9, 
158 10, 11, 12, 13, 14, 15, 16, 17, 
159 18, 19, 20, 21, 22, 23, 
160 };
161
162 const int8_t intra_level_aic[102] = {
163  1,  2,  3,  4,  5,  6,  7,  8, 
164  9, 10, 11, 12, 13, 14, 15, 16, 
165 17, 18, 19, 20, 21, 22, 23, 24, 
166 25,  1,  2,  3,  4,  5,  6,  7, 
167  1,  2,  3,  4,  1,  2,  3,  4, 
168  1,  2,  3,  1,  2,  3,  1,  2, 
169  1,  2,  1,  2,  1,  2,  1,  1, 
170  1,  1,  1,  2,  3,  4,  5,  6, 
171  7,  8,  9, 10,  1,  2,  3,  4, 
172  1,  2,  3,  1,  2,  3,  1,  2, 
173  1,  2,  1,  2,  1,  2,  1,  1, 
174  1,  1,  1,  1,  1,  1,  1,  1, 
175  1,  1,  1,  1,  1,  1,
176 };
177
178 static RLTable rl_intra_aic = {
179     102,
180     58,
181     intra_vlc_aic,
182     intra_run_aic,
183     intra_level_aic,
184 };
185
186 static const uint16_t h263_format[8][2] = {
187     { 0, 0 },
188     { 128, 96 },
189     { 176, 144 },
190     { 352, 288 },
191     { 704, 576 },
192     { 1408, 1152 },
193 };
194
195 static uint8_t h263_aic_dc_scale_table[32]={
196 //  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
197     0, 2, 4, 6, 8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62
198 };
199