add multiple inclusion guards to headers
[libav.git] / libavcodec / h263data.h
CommitLineData
04d7f601
DB
1/*
2 * copyright (c) 2000,2001 Fabrice Bellard
3 * H263+ support
4 * copyright (c) 2001 Juan J. Sierralta P.
5 * copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
6 *
b78e7197
DB
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
04d7f601
DB
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
b78e7197 12 * version 2.1 of the License, or (at your option) any later version.
04d7f601 13 *
b78e7197 14 * FFmpeg is distributed in the hope that it will be useful,
04d7f601
DB
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
b78e7197 20 * License along with FFmpeg; if not, write to the Free Software
04d7f601
DB
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
983e3246
MN
24/**
25 * @file h263data.h
26 * H.263 tables.
27 */
28
699b3f99
MR
29#ifndef AVCODEC_H263DATA_H
30#define AVCODEC_H263DATA_H
31
99545457
MR
32#include <stdint.h>
33#include "mpegvideo.h"
de6d9b64
FB
34
35/* intra MCBPC, mb_type = (intra), then (intraq) */
7af75e6c
MN
36const uint8_t intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 };
37const uint8_t intra_MCBPC_bits[9] = { 1, 3, 3, 3, 4, 6, 6, 6, 9 };
de6d9b64
FB
38
39/* inter MCBPC, mb_type = (inter), (intra), (interq), (intraq), (inter4v) */
96815ce9 40/* Changed the tables for interq and inter4v+q, following the standard ** Juanjo ** */
115329f1
DB
41const uint8_t inter_MCBPC_code[28] = {
42 1, 3, 2, 5,
43 3, 4, 3, 3,
4949028f
J
44 3, 7, 6, 5,
45 4, 4, 3, 2,
46 2, 5, 4, 5,
7af75e6c 47 1, 0, 0, 0, /* Stuffing */
96815ce9 48 2, 12, 14, 15,
4949028f 49};
115329f1 50const uint8_t inter_MCBPC_bits[28] = {
7af75e6c
MN
51 1, 4, 4, 6, /* inter */
52 5, 8, 8, 7, /* intra */
53 3, 7, 7, 9, /* interQ */
54 6, 9, 9, 9, /* intraQ */
55 3, 7, 7, 8, /* inter4 */
56 9, 0, 0, 0, /* Stuffing */
57 11, 13, 13, 13,/* inter4Q*/
4949028f
J
58};
59
b40cd4e0 60static const uint8_t h263_mbtype_b_tab[15][2] = {
115329f1
DB
61 {1, 1},
62 {3, 3},
63 {1, 5},
b40cd4e0
MN
64 {4, 4},
65 {5, 4},
66 {6, 6},
67 {2, 4},
68 {3, 4},
69 {7, 6},
70 {4, 6},
71 {5, 6},
72 {1, 6},
73 {1,10},
74 {1, 7},
75 {1, 8},
76};
77
78static const int h263_mb_type_b_map[15]= {
79 MB_TYPE_DIRECT2 | MB_TYPE_L0L1,
80 MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP,
81 MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT,
8135f8df
MN
82 MB_TYPE_L0 | MB_TYPE_16x16,
83 MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_16x16,
84 MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
85 MB_TYPE_L1 | MB_TYPE_16x16,
86 MB_TYPE_L1 | MB_TYPE_CBP | MB_TYPE_16x16,
87 MB_TYPE_L1 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
88 MB_TYPE_L0L1 | MB_TYPE_16x16,
89 MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_16x16,
90 MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
b40cd4e0 91 0, //stuffing
bb198e19
MN
92 MB_TYPE_INTRA4x4 | MB_TYPE_CBP,
93 MB_TYPE_INTRA4x4 | MB_TYPE_CBP | MB_TYPE_QUANT,
b40cd4e0
MN
94};
95
7b7abda3 96static const uint8_t cbpc_b_tab[4][2] = {
b40cd4e0
MN
97{0, 1},
98{2, 2},
99{7, 3},
100{6, 3},
101};
102
0c1a9eda 103const uint8_t cbpy_tab[16][2] =
de6d9b64
FB
104{
105 {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
106 {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
107};
108
0c1a9eda 109const uint8_t mvtab[33][2] =
de6d9b64
FB
110{
111 {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
112 {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
113 {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
114 {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
115 {2,12}
116};
117
118/* third non intra table */
0c1a9eda 119const uint16_t inter_vlc[103][2] = {
de6d9b64
FB
120{ 0x2, 2 },{ 0xf, 4 },{ 0x15, 6 },{ 0x17, 7 },
121{ 0x1f, 8 },{ 0x25, 9 },{ 0x24, 9 },{ 0x21, 10 },
122{ 0x20, 10 },{ 0x7, 11 },{ 0x6, 11 },{ 0x20, 11 },
123{ 0x6, 3 },{ 0x14, 6 },{ 0x1e, 8 },{ 0xf, 10 },
124{ 0x21, 11 },{ 0x50, 12 },{ 0xe, 4 },{ 0x1d, 8 },
125{ 0xe, 10 },{ 0x51, 12 },{ 0xd, 5 },{ 0x23, 9 },
126{ 0xd, 10 },{ 0xc, 5 },{ 0x22, 9 },{ 0x52, 12 },
127{ 0xb, 5 },{ 0xc, 10 },{ 0x53, 12 },{ 0x13, 6 },
128{ 0xb, 10 },{ 0x54, 12 },{ 0x12, 6 },{ 0xa, 10 },
129{ 0x11, 6 },{ 0x9, 10 },{ 0x10, 6 },{ 0x8, 10 },
130{ 0x16, 7 },{ 0x55, 12 },{ 0x15, 7 },{ 0x14, 7 },
131{ 0x1c, 8 },{ 0x1b, 8 },{ 0x21, 9 },{ 0x20, 9 },
132{ 0x1f, 9 },{ 0x1e, 9 },{ 0x1d, 9 },{ 0x1c, 9 },
133{ 0x1b, 9 },{ 0x1a, 9 },{ 0x22, 11 },{ 0x23, 11 },
134{ 0x56, 12 },{ 0x57, 12 },{ 0x7, 4 },{ 0x19, 9 },
135{ 0x5, 11 },{ 0xf, 6 },{ 0x4, 11 },{ 0xe, 6 },
136{ 0xd, 6 },{ 0xc, 6 },{ 0x13, 7 },{ 0x12, 7 },
137{ 0x11, 7 },{ 0x10, 7 },{ 0x1a, 8 },{ 0x19, 8 },
138{ 0x18, 8 },{ 0x17, 8 },{ 0x16, 8 },{ 0x15, 8 },
139{ 0x14, 8 },{ 0x13, 8 },{ 0x18, 9 },{ 0x17, 9 },
140{ 0x16, 9 },{ 0x15, 9 },{ 0x14, 9 },{ 0x13, 9 },
141{ 0x12, 9 },{ 0x11, 9 },{ 0x7, 10 },{ 0x6, 10 },
142{ 0x5, 10 },{ 0x4, 10 },{ 0x24, 11 },{ 0x25, 11 },
143{ 0x26, 11 },{ 0x27, 11 },{ 0x58, 12 },{ 0x59, 12 },
144{ 0x5a, 12 },{ 0x5b, 12 },{ 0x5c, 12 },{ 0x5d, 12 },
145{ 0x5e, 12 },{ 0x5f, 12 },{ 0x3, 7 },
146};
147
0c1a9eda 148const int8_t inter_level[102] = {
de6d9b64
FB
149 1, 2, 3, 4, 5, 6, 7, 8,
150 9, 10, 11, 12, 1, 2, 3, 4,
151 5, 6, 1, 2, 3, 4, 1, 2,
152 3, 1, 2, 3, 1, 2, 3, 1,
153 2, 3, 1, 2, 1, 2, 1, 2,
154 1, 2, 1, 1, 1, 1, 1, 1,
155 1, 1, 1, 1, 1, 1, 1, 1,
156 1, 1, 1, 2, 3, 1, 2, 1,
157 1, 1, 1, 1, 1, 1, 1, 1,
158 1, 1, 1, 1, 1, 1, 1, 1,
159 1, 1, 1, 1, 1, 1, 1, 1,
160 1, 1, 1, 1, 1, 1, 1, 1,
161 1, 1, 1, 1, 1, 1,
162};
163
0c1a9eda 164const int8_t inter_run[102] = {
de6d9b64
FB
165 0, 0, 0, 0, 0, 0, 0, 0,
166 0, 0, 0, 0, 1, 1, 1, 1,
167 1, 1, 2, 2, 2, 2, 3, 3,
168 3, 4, 4, 4, 5, 5, 5, 6,
169 6, 6, 7, 7, 8, 8, 9, 9,
170 10, 10, 11, 12, 13, 14, 15, 16,
171 17, 18, 19, 20, 21, 22, 23, 24,
172 25, 26, 0, 0, 0, 1, 1, 2,
173 3, 4, 5, 6, 7, 8, 9, 10,
174 11, 12, 13, 14, 15, 16, 17, 18,
175 19, 20, 21, 22, 23, 24, 25, 26,
176 27, 28, 29, 30, 31, 32, 33, 34,
177 35, 36, 37, 38, 39, 40,
178};
179
180static RLTable rl_inter = {
181 102,
182 58,
183 inter_vlc,
184 inter_run,
185 inter_level,
186};
187
7b7abda3 188static const uint16_t intra_vlc_aic[103][2] = {
115329f1
DB
189{ 0x2, 2 }, { 0x6, 3 }, { 0xe, 4 }, { 0xc, 5 },
190{ 0xd, 5 }, { 0x10, 6 }, { 0x11, 6 }, { 0x12, 6 },
191{ 0x16, 7 }, { 0x1b, 8 }, { 0x20, 9 }, { 0x21, 9 },
192{ 0x1a, 9 }, { 0x1b, 9 }, { 0x1c, 9 }, { 0x1d, 9 },
193{ 0x1e, 9 }, { 0x1f, 9 }, { 0x23, 11 }, { 0x22, 11 },
194{ 0x57, 12 }, { 0x56, 12 }, { 0x55, 12 }, { 0x54, 12 },
195{ 0x53, 12 }, { 0xf, 4 }, { 0x14, 6 }, { 0x14, 7 },
196{ 0x1e, 8 }, { 0xf, 10 }, { 0x21, 11 }, { 0x50, 12 },
197{ 0xb, 5 }, { 0x15, 7 }, { 0xe, 10 }, { 0x9, 10 },
198{ 0x15, 6 }, { 0x1d, 8 }, { 0xd, 10 }, { 0x51, 12 },
199{ 0x13, 6 }, { 0x23, 9 }, { 0x7, 11 }, { 0x17, 7 },
200{ 0x22, 9 }, { 0x52, 12 }, { 0x1c, 8 }, { 0xc, 10 },
201{ 0x1f, 8 }, { 0xb, 10 }, { 0x25, 9 }, { 0xa, 10 },
202{ 0x24, 9 }, { 0x6, 11 }, { 0x21, 10 }, { 0x20, 10 },
203{ 0x8, 10 }, { 0x20, 11 }, { 0x7, 4 }, { 0xc, 6 },
204{ 0x10, 7 }, { 0x13, 8 }, { 0x11, 9 }, { 0x12, 9 },
205{ 0x4, 10 }, { 0x27, 11 }, { 0x26, 11 }, { 0x5f, 12 },
206{ 0xf, 6 }, { 0x13, 9 }, { 0x5, 10 }, { 0x25, 11 },
207{ 0xe, 6 }, { 0x14, 9 }, { 0x24, 11 }, { 0xd, 6 },
208{ 0x6, 10 }, { 0x5e, 12 }, { 0x11, 7 }, { 0x7, 10 },
209{ 0x13, 7 }, { 0x5d, 12 }, { 0x12, 7 }, { 0x5c, 12 },
210{ 0x14, 8 }, { 0x5b, 12 }, { 0x15, 8 }, { 0x1a, 8 },
211{ 0x19, 8 }, { 0x18, 8 }, { 0x17, 8 }, { 0x16, 8 },
212{ 0x19, 9 }, { 0x15, 9 }, { 0x16, 9 }, { 0x18, 9 },
213{ 0x17, 9 }, { 0x4, 11 }, { 0x5, 11 }, { 0x58, 12 },
ef5b1b5a 214{ 0x59, 12 }, { 0x5a, 12 }, { 0x3, 7 },
d140623f
J
215};
216
7b7abda3 217static const int8_t intra_run_aic[102] = {
115329f1
DB
218 0, 0, 0, 0, 0, 0, 0, 0,
219 0, 0, 0, 0, 0, 0, 0, 0,
220 0, 0, 0, 0, 0, 0, 0, 0,
221 0, 1, 1, 1, 1, 1, 1, 1,
222 2, 2, 2, 2, 3, 3, 3, 3,
223 4, 4, 4, 5, 5, 5, 6, 6,
224 7, 7, 8, 8, 9, 9, 10, 11,
22512, 13, 0, 0, 0, 0, 0, 0,
226 0, 0, 0, 0, 1, 1, 1, 1,
227 2, 2, 2, 3, 3, 3, 4, 4,
228 5, 5, 6, 6, 7, 7, 8, 9,
22910, 11, 12, 13, 14, 15, 16, 17,
23018, 19, 20, 21, 22, 23,
ef5b1b5a
J
231};
232
7b7abda3 233static const int8_t intra_level_aic[102] = {
115329f1
DB
234 1, 2, 3, 4, 5, 6, 7, 8,
235 9, 10, 11, 12, 13, 14, 15, 16,
23617, 18, 19, 20, 21, 22, 23, 24,
23725, 1, 2, 3, 4, 5, 6, 7,
238 1, 2, 3, 4, 1, 2, 3, 4,
239 1, 2, 3, 1, 2, 3, 1, 2,
240 1, 2, 1, 2, 1, 2, 1, 1,
241 1, 1, 1, 2, 3, 4, 5, 6,
242 7, 8, 9, 10, 1, 2, 3, 4,
243 1, 2, 3, 1, 2, 3, 1, 2,
244 1, 2, 1, 2, 1, 2, 1, 1,
245 1, 1, 1, 1, 1, 1, 1, 1,
ef5b1b5a 246 1, 1, 1, 1, 1, 1,
d140623f
J
247};
248
249static RLTable rl_intra_aic = {
250 102,
251 58,
ef5b1b5a
J
252 intra_vlc_aic,
253 intra_run_aic,
254 intra_level_aic,
d140623f
J
255};
256
3e8a5124 257static const uint8_t wrong_run[102] = {
115329f1
DB
258 1, 2, 3, 5, 4, 10, 9, 8,
25911, 15, 17, 16, 23, 22, 21, 20,
26019, 18, 25, 24, 27, 26, 11, 7,
261 6, 1, 2, 13, 2, 2, 2, 2,
262 6, 12, 3, 9, 1, 3, 4, 3,
263 7, 4, 1, 1, 5, 5, 14, 6,
264 1, 7, 1, 8, 1, 1, 1, 1,
26510, 1, 1, 5, 9, 17, 25, 24,
26629, 33, 32, 41, 2, 23, 28, 31,
267 3, 22, 30, 4, 27, 40, 8, 26,
268 6, 39, 7, 38, 16, 37, 15, 10,
26911, 12, 13, 14, 1, 21, 20, 18,
3e8a5124
MN
27019, 2, 1, 34, 35, 36
271};
272
0c1a9eda 273static const uint16_t h263_format[8][2] = {
de6d9b64
FB
274 { 0, 0 },
275 { 128, 96 },
276 { 176, 144 },
277 { 352, 288 },
278 { 704, 576 },
279 { 1408, 1152 },
280};
8f8402e4 281
c26ae41d 282const uint8_t ff_aic_dc_scale_table[32]={
8f8402e4
MN
283// 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
284 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
285};
286
68b94c35
MN
287static const uint8_t modified_quant_tab[2][32]={
288// 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
289{
290 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
291},{
292 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
115329f1 293}
68b94c35
MN
294};
295
332f9ac4 296const uint8_t ff_h263_chroma_qscale_table[32]={
68b94c35
MN
297// 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
298 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
299};
300
301const uint16_t ff_mba_max[6]={
302 47, 98, 395,1583,6335,9215
303};
304
3aeefb93
MN
305const uint8_t ff_mba_length[7]={
306 6, 7, 9, 11, 13, 14, 14
68b94c35 307};
332f9ac4
MN
308
309const uint8_t ff_h263_loop_filter_strength[32]={
310// 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
311 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
312};
313
699b3f99 314#endif