]> git.sesse.net Git - ffmpeg/blob - libavcodec/h263data.h
h263 loop filter
[ffmpeg] / 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 uint8_t wrong_run[102] = {
187  1,  2,  3,  5,  4, 10,  9,  8, 
188 11, 15, 17, 16, 23, 22, 21, 20, 
189 19, 18, 25, 24, 27, 26, 11,  7,  
190  6,  1,  2, 13,  2,  2,  2,  2, 
191  6, 12,  3,  9,  1,  3,  4,  3, 
192  7,  4,  1,  1,  5,  5, 14,  6, 
193  1,  7,  1,  8,  1,  1,  1,  1, 
194 10,  1,  1,  5,  9, 17, 25, 24, 
195 29, 33, 32, 41,  2, 23, 28, 31,  
196  3, 22, 30,  4, 27, 40,  8, 26,  
197  6, 39,  7, 38, 16, 37, 15, 10, 
198 11, 12, 13, 14,  1, 21, 20, 18, 
199 19,  2,  1, 34, 35, 36
200 };
201
202 static const uint16_t h263_format[8][2] = {
203     { 0, 0 },
204     { 128, 96 },
205     { 176, 144 },
206     { 352, 288 },
207     { 704, 576 },
208     { 1408, 1152 },
209 };
210
211 uint8_t ff_aic_dc_scale_table[32]={
212 //  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
213     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
214 };
215
216 static const uint8_t modified_quant_tab[2][32]={
217 //  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
218 {
219     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
220 },{
221     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
222 }   
223 };
224
225 const uint8_t ff_h263_chroma_qscale_table[32]={
226 //  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
227     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
228 };
229
230 const uint16_t ff_mba_max[6]={
231      47,  98, 395,1583,6335,9215
232 };
233
234 const uint8_t ff_mba_length[6]={
235       6,   7,   9,  11,  13,  14
236 };
237
238 const uint8_t ff_h263_loop_filter_strength[32]={
239 //  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
240     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
241 };
242