malloc padding to avoid reading past the malloc()ed area.
[libav.git] / libavcodec / h263data.h
CommitLineData
983e3246
MN
1/**
2 * @file h263data.h
3 * H.263 tables.
4 */
5
de6d9b64
FB
6
7/* intra MCBPC, mb_type = (intra), then (intraq) */
7af75e6c
MN
8const uint8_t intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 };
9const uint8_t intra_MCBPC_bits[9] = { 1, 3, 3, 3, 4, 6, 6, 6, 9 };
de6d9b64
FB
10
11/* inter MCBPC, mb_type = (inter), (intra), (interq), (intraq), (inter4v) */
96815ce9 12/* Changed the tables for interq and inter4v+q, following the standard ** Juanjo ** */
7af75e6c 13const uint8_t inter_MCBPC_code[28] = {
4949028f
J
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,
7af75e6c 19 1, 0, 0, 0, /* Stuffing */
96815ce9 20 2, 12, 14, 15,
4949028f 21};
7af75e6c
MN
22const 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*/
4949028f
J
30};
31
b40cd4e0
MN
32static const uint8_t h263_mbtype_b_tab[15][2] = {
33 {1, 1},
34 {3, 3},
35 {1, 5},
36 {4, 4},
37 {5, 4},
38 {6, 6},
39 {2, 4},
40 {3, 4},
41 {7, 6},
42 {4, 6},
43 {5, 6},
44 {1, 6},
45 {1,10},
46 {1, 7},
47 {1, 8},
48};
49
50static const int h263_mb_type_b_map[15]= {
51 MB_TYPE_DIRECT2 | MB_TYPE_L0L1,
52 MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP,
53 MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT,
8135f8df
MN
54 MB_TYPE_L0 | MB_TYPE_16x16,
55 MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_16x16,
56 MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
57 MB_TYPE_L1 | MB_TYPE_16x16,
58 MB_TYPE_L1 | MB_TYPE_CBP | MB_TYPE_16x16,
59 MB_TYPE_L1 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
60 MB_TYPE_L0L1 | MB_TYPE_16x16,
61 MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_16x16,
62 MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
b40cd4e0 63 0, //stuffing
bb198e19
MN
64 MB_TYPE_INTRA4x4 | MB_TYPE_CBP,
65 MB_TYPE_INTRA4x4 | MB_TYPE_CBP | MB_TYPE_QUANT,
b40cd4e0
MN
66};
67
68const uint8_t cbpc_b_tab[4][2] = {
69{0, 1},
70{2, 2},
71{7, 3},
72{6, 3},
73};
74
0c1a9eda 75const uint8_t cbpy_tab[16][2] =
de6d9b64
FB
76{
77 {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
78 {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
79};
80
0c1a9eda 81const uint8_t mvtab[33][2] =
de6d9b64
FB
82{
83 {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
84 {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
85 {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
86 {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
87 {2,12}
88};
89
90/* third non intra table */
0c1a9eda 91const uint16_t inter_vlc[103][2] = {
de6d9b64
FB
92{ 0x2, 2 },{ 0xf, 4 },{ 0x15, 6 },{ 0x17, 7 },
93{ 0x1f, 8 },{ 0x25, 9 },{ 0x24, 9 },{ 0x21, 10 },
94{ 0x20, 10 },{ 0x7, 11 },{ 0x6, 11 },{ 0x20, 11 },
95{ 0x6, 3 },{ 0x14, 6 },{ 0x1e, 8 },{ 0xf, 10 },
96{ 0x21, 11 },{ 0x50, 12 },{ 0xe, 4 },{ 0x1d, 8 },
97{ 0xe, 10 },{ 0x51, 12 },{ 0xd, 5 },{ 0x23, 9 },
98{ 0xd, 10 },{ 0xc, 5 },{ 0x22, 9 },{ 0x52, 12 },
99{ 0xb, 5 },{ 0xc, 10 },{ 0x53, 12 },{ 0x13, 6 },
100{ 0xb, 10 },{ 0x54, 12 },{ 0x12, 6 },{ 0xa, 10 },
101{ 0x11, 6 },{ 0x9, 10 },{ 0x10, 6 },{ 0x8, 10 },
102{ 0x16, 7 },{ 0x55, 12 },{ 0x15, 7 },{ 0x14, 7 },
103{ 0x1c, 8 },{ 0x1b, 8 },{ 0x21, 9 },{ 0x20, 9 },
104{ 0x1f, 9 },{ 0x1e, 9 },{ 0x1d, 9 },{ 0x1c, 9 },
105{ 0x1b, 9 },{ 0x1a, 9 },{ 0x22, 11 },{ 0x23, 11 },
106{ 0x56, 12 },{ 0x57, 12 },{ 0x7, 4 },{ 0x19, 9 },
107{ 0x5, 11 },{ 0xf, 6 },{ 0x4, 11 },{ 0xe, 6 },
108{ 0xd, 6 },{ 0xc, 6 },{ 0x13, 7 },{ 0x12, 7 },
109{ 0x11, 7 },{ 0x10, 7 },{ 0x1a, 8 },{ 0x19, 8 },
110{ 0x18, 8 },{ 0x17, 8 },{ 0x16, 8 },{ 0x15, 8 },
111{ 0x14, 8 },{ 0x13, 8 },{ 0x18, 9 },{ 0x17, 9 },
112{ 0x16, 9 },{ 0x15, 9 },{ 0x14, 9 },{ 0x13, 9 },
113{ 0x12, 9 },{ 0x11, 9 },{ 0x7, 10 },{ 0x6, 10 },
114{ 0x5, 10 },{ 0x4, 10 },{ 0x24, 11 },{ 0x25, 11 },
115{ 0x26, 11 },{ 0x27, 11 },{ 0x58, 12 },{ 0x59, 12 },
116{ 0x5a, 12 },{ 0x5b, 12 },{ 0x5c, 12 },{ 0x5d, 12 },
117{ 0x5e, 12 },{ 0x5f, 12 },{ 0x3, 7 },
118};
119
0c1a9eda 120const int8_t inter_level[102] = {
de6d9b64
FB
121 1, 2, 3, 4, 5, 6, 7, 8,
122 9, 10, 11, 12, 1, 2, 3, 4,
123 5, 6, 1, 2, 3, 4, 1, 2,
124 3, 1, 2, 3, 1, 2, 3, 1,
125 2, 3, 1, 2, 1, 2, 1, 2,
126 1, 2, 1, 1, 1, 1, 1, 1,
127 1, 1, 1, 1, 1, 1, 1, 1,
128 1, 1, 1, 2, 3, 1, 2, 1,
129 1, 1, 1, 1, 1, 1, 1, 1,
130 1, 1, 1, 1, 1, 1, 1, 1,
131 1, 1, 1, 1, 1, 1, 1, 1,
132 1, 1, 1, 1, 1, 1, 1, 1,
133 1, 1, 1, 1, 1, 1,
134};
135
0c1a9eda 136const int8_t inter_run[102] = {
de6d9b64
FB
137 0, 0, 0, 0, 0, 0, 0, 0,
138 0, 0, 0, 0, 1, 1, 1, 1,
139 1, 1, 2, 2, 2, 2, 3, 3,
140 3, 4, 4, 4, 5, 5, 5, 6,
141 6, 6, 7, 7, 8, 8, 9, 9,
142 10, 10, 11, 12, 13, 14, 15, 16,
143 17, 18, 19, 20, 21, 22, 23, 24,
144 25, 26, 0, 0, 0, 1, 1, 2,
145 3, 4, 5, 6, 7, 8, 9, 10,
146 11, 12, 13, 14, 15, 16, 17, 18,
147 19, 20, 21, 22, 23, 24, 25, 26,
148 27, 28, 29, 30, 31, 32, 33, 34,
149 35, 36, 37, 38, 39, 40,
150};
151
152static RLTable rl_inter = {
153 102,
154 58,
155 inter_vlc,
156 inter_run,
157 inter_level,
158};
159
0c1a9eda 160const uint16_t intra_vlc_aic[103][2] = {
ef5b1b5a
J
161{ 0x2, 2 }, { 0x6, 3 }, { 0xe, 4 }, { 0xc, 5 },
162{ 0xd, 5 }, { 0x10, 6 }, { 0x11, 6 }, { 0x12, 6 },
163{ 0x16, 7 }, { 0x1b, 8 }, { 0x20, 9 }, { 0x21, 9 },
164{ 0x1a, 9 }, { 0x1b, 9 }, { 0x1c, 9 }, { 0x1d, 9 },
165{ 0x1e, 9 }, { 0x1f, 9 }, { 0x23, 11 }, { 0x22, 11 },
166{ 0x57, 12 }, { 0x56, 12 }, { 0x55, 12 }, { 0x54, 12 },
167{ 0x53, 12 }, { 0xf, 4 }, { 0x14, 6 }, { 0x14, 7 },
168{ 0x1e, 8 }, { 0xf, 10 }, { 0x21, 11 }, { 0x50, 12 },
169{ 0xb, 5 }, { 0x15, 7 }, { 0xe, 10 }, { 0x9, 10 },
170{ 0x15, 6 }, { 0x1d, 8 }, { 0xd, 10 }, { 0x51, 12 },
171{ 0x13, 6 }, { 0x23, 9 }, { 0x7, 11 }, { 0x17, 7 },
172{ 0x22, 9 }, { 0x52, 12 }, { 0x1c, 8 }, { 0xc, 10 },
173{ 0x1f, 8 }, { 0xb, 10 }, { 0x25, 9 }, { 0xa, 10 },
174{ 0x24, 9 }, { 0x6, 11 }, { 0x21, 10 }, { 0x20, 10 },
175{ 0x8, 10 }, { 0x20, 11 }, { 0x7, 4 }, { 0xc, 6 },
176{ 0x10, 7 }, { 0x13, 8 }, { 0x11, 9 }, { 0x12, 9 },
177{ 0x4, 10 }, { 0x27, 11 }, { 0x26, 11 }, { 0x5f, 12 },
178{ 0xf, 6 }, { 0x13, 9 }, { 0x5, 10 }, { 0x25, 11 },
179{ 0xe, 6 }, { 0x14, 9 }, { 0x24, 11 }, { 0xd, 6 },
180{ 0x6, 10 }, { 0x5e, 12 }, { 0x11, 7 }, { 0x7, 10 },
181{ 0x13, 7 }, { 0x5d, 12 }, { 0x12, 7 }, { 0x5c, 12 },
182{ 0x14, 8 }, { 0x5b, 12 }, { 0x15, 8 }, { 0x1a, 8 },
183{ 0x19, 8 }, { 0x18, 8 }, { 0x17, 8 }, { 0x16, 8 },
184{ 0x19, 9 }, { 0x15, 9 }, { 0x16, 9 }, { 0x18, 9 },
185{ 0x17, 9 }, { 0x4, 11 }, { 0x5, 11 }, { 0x58, 12 },
186{ 0x59, 12 }, { 0x5a, 12 }, { 0x3, 7 },
d140623f
J
187};
188
0c1a9eda 189const int8_t intra_run_aic[102] = {
ef5b1b5a
J
190 0, 0, 0, 0, 0, 0, 0, 0,
191 0, 0, 0, 0, 0, 0, 0, 0,
192 0, 0, 0, 0, 0, 0, 0, 0,
193 0, 1, 1, 1, 1, 1, 1, 1,
194 2, 2, 2, 2, 3, 3, 3, 3,
195 4, 4, 4, 5, 5, 5, 6, 6,
196 7, 7, 8, 8, 9, 9, 10, 11,
19712, 13, 0, 0, 0, 0, 0, 0,
198 0, 0, 0, 0, 1, 1, 1, 1,
199 2, 2, 2, 3, 3, 3, 4, 4,
200 5, 5, 6, 6, 7, 7, 8, 9,
20110, 11, 12, 13, 14, 15, 16, 17,
20218, 19, 20, 21, 22, 23,
203};
204
0c1a9eda 205const int8_t intra_level_aic[102] = {
ef5b1b5a
J
206 1, 2, 3, 4, 5, 6, 7, 8,
207 9, 10, 11, 12, 13, 14, 15, 16,
20817, 18, 19, 20, 21, 22, 23, 24,
20925, 1, 2, 3, 4, 5, 6, 7,
210 1, 2, 3, 4, 1, 2, 3, 4,
211 1, 2, 3, 1, 2, 3, 1, 2,
212 1, 2, 1, 2, 1, 2, 1, 1,
213 1, 1, 1, 2, 3, 4, 5, 6,
214 7, 8, 9, 10, 1, 2, 3, 4,
215 1, 2, 3, 1, 2, 3, 1, 2,
216 1, 2, 1, 2, 1, 2, 1, 1,
217 1, 1, 1, 1, 1, 1, 1, 1,
218 1, 1, 1, 1, 1, 1,
d140623f
J
219};
220
221static RLTable rl_intra_aic = {
222 102,
223 58,
ef5b1b5a
J
224 intra_vlc_aic,
225 intra_run_aic,
226 intra_level_aic,
d140623f
J
227};
228
3e8a5124
MN
229static const uint8_t wrong_run[102] = {
230 1, 2, 3, 5, 4, 10, 9, 8,
23111, 15, 17, 16, 23, 22, 21, 20,
23219, 18, 25, 24, 27, 26, 11, 7,
233 6, 1, 2, 13, 2, 2, 2, 2,
234 6, 12, 3, 9, 1, 3, 4, 3,
235 7, 4, 1, 1, 5, 5, 14, 6,
236 1, 7, 1, 8, 1, 1, 1, 1,
23710, 1, 1, 5, 9, 17, 25, 24,
23829, 33, 32, 41, 2, 23, 28, 31,
239 3, 22, 30, 4, 27, 40, 8, 26,
240 6, 39, 7, 38, 16, 37, 15, 10,
24111, 12, 13, 14, 1, 21, 20, 18,
24219, 2, 1, 34, 35, 36
243};
244
0c1a9eda 245static const uint16_t h263_format[8][2] = {
de6d9b64
FB
246 { 0, 0 },
247 { 128, 96 },
248 { 176, 144 },
249 { 352, 288 },
250 { 704, 576 },
251 { 1408, 1152 },
252};
8f8402e4 253
c26ae41d 254const uint8_t ff_aic_dc_scale_table[32]={
8f8402e4
MN
255// 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
256 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
257};
258
68b94c35
MN
259static const uint8_t modified_quant_tab[2][32]={
260// 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
261{
262 0, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,24,25,26,27,28
263},{
264 0, 2, 3, 4, 5, 6, 7, 8, 9,10,11,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,31,31,26
265}
266};
267
332f9ac4 268const uint8_t ff_h263_chroma_qscale_table[32]={
68b94c35
MN
269// 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
270 0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 9,10,10,11,11,12,12,12,13,13,13,14,14,14,14,14,15,15,15,15,15
271};
272
273const uint16_t ff_mba_max[6]={
274 47, 98, 395,1583,6335,9215
275};
276
277const uint8_t ff_mba_length[6]={
278 6, 7, 9, 11, 13, 14
279};
332f9ac4
MN
280
281const uint8_t ff_h263_loop_filter_strength[32]={
282// 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
283 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11,11,12,12,12
284};
285