GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/h263data.c Lines: 6 6 100.0 %
Date: 2021-04-20 15:25:36 Branches: 0 0 - %

Line Branch Exec Source
1
/*
2
 * H.263+ tables
3
 *
4
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * FFmpeg is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with FFmpeg; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
 */
20
21
/**
22
 * @file
23
 * H.263 tables.
24
 */
25
26
#include <stdint.h>
27
28
#include "libavutil/thread.h"
29
30
#include "h263data.h"
31
#include "mpegvideo.h"
32
33
/* intra MCBPC, mb_type = (intra), then (intraq) */
34
const uint8_t ff_h263_intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 };
35
const uint8_t ff_h263_intra_MCBPC_bits[9] = { 1, 3, 3, 3, 4, 6, 6, 6, 9 };
36
37
/* inter MCBPC, mb_type = (inter), (intra), (interq), (intraq), (inter4v) */
38
/* Changed the tables for interq and inter4v+q, following the standard
39
 * ** Juanjo ** */
40
const uint8_t ff_h263_inter_MCBPC_code[28] = {
41
    1,  3,  2,  5,
42
    3,  4,  3,  3,
43
    3,  7,  6,  5,
44
    4,  4,  3,  2,
45
    2,  5,  4,  5,
46
    1,  0,  0,  0,  /* Stuffing */
47
    2, 12, 14, 15,
48
};
49
const uint8_t ff_h263_inter_MCBPC_bits[28] = {
50
     1,  4,  4,  6,  /* inter  */
51
     5,  8,  8,  7,  /* intra  */
52
     3,  7,  7,  9,  /* interQ */
53
     6,  9,  9,  9,  /* intraQ */
54
     3,  7,  7,  8,  /* inter4 */
55
     9,  0,  0,  0,  /* Stuffing */
56
    11, 13, 13, 13,  /* inter4Q */
57
};
58
59
const uint8_t ff_h263_mbtype_b_tab[15][2] = {
60
    { 1,  1 },
61
    { 3,  3 },
62
    { 1,  5 },
63
    { 4,  4 },
64
    { 5,  4 },
65
    { 6,  6 },
66
    { 2,  4 },
67
    { 3,  4 },
68
    { 7,  6 },
69
    { 4,  6 },
70
    { 5,  6 },
71
    { 1,  6 },
72
    { 1, 10 },
73
    { 1,  7 },
74
    { 1,  8 },
75
};
76
77
const uint8_t ff_cbpc_b_tab[4][2] = {
78
    { 0, 1 },
79
    { 2, 2 },
80
    { 7, 3 },
81
    { 6, 3 },
82
};
83
84
const uint8_t ff_h263_cbpy_tab[16][2] = {
85
    {  3, 4 }, { 5, 5 }, { 4, 5 }, { 9, 4 }, {  3, 5 }, { 7, 4 }, { 2, 6 },
86
    { 11, 4 }, { 2, 5 }, { 3, 6 }, { 5, 4 }, { 10, 4 }, { 4, 4 }, { 8, 4 },
87
    {  6, 4 }, { 3, 2 }
88
};
89
90
const uint8_t ff_mvtab[33][2] = {
91
    {  1,  1 }, {  1,  2 }, {  1,  3 }, {  1,  4 }, {  3,  6 }, {  5,  7 },
92
    {  4,  7 }, {  3,  7 }, { 11,  9 }, { 10,  9 }, {  9,  9 }, { 17, 10 },
93
    { 16, 10 }, { 15, 10 }, { 14, 10 }, { 13, 10 }, { 12, 10 }, { 11, 10 },
94
    { 10, 10 }, {  9, 10 }, {  8, 10 }, {  7, 10 }, {  6, 10 }, {  5, 10 },
95
    {  4, 10 }, {  7, 11 }, {  6, 11 }, {  5, 11 }, {  4, 11 }, {  3, 11 },
96
    {  2, 11 }, {  3, 12 }, {  2, 12 }
97
};
98
99
/* third non intra table */
100
const uint16_t ff_inter_vlc[103][2] = {
101
    {  0x2,  2 }, {  0xf,  4 }, { 0x15,  6 }, { 0x17,  7 },
102
    { 0x1f,  8 }, { 0x25,  9 }, { 0x24,  9 }, { 0x21, 10 },
103
    { 0x20, 10 }, {  0x7, 11 }, {  0x6, 11 }, { 0x20, 11 },
104
    {  0x6,  3 }, { 0x14,  6 }, { 0x1e,  8 }, {  0xf, 10 },
105
    { 0x21, 11 }, { 0x50, 12 }, {  0xe,  4 }, { 0x1d,  8 },
106
    {  0xe, 10 }, { 0x51, 12 }, {  0xd,  5 }, { 0x23,  9 },
107
    {  0xd, 10 }, {  0xc,  5 }, { 0x22,  9 }, { 0x52, 12 },
108
    {  0xb,  5 }, {  0xc, 10 }, { 0x53, 12 }, { 0x13,  6 },
109
    {  0xb, 10 }, { 0x54, 12 }, { 0x12,  6 }, {  0xa, 10 },
110
    { 0x11,  6 }, {  0x9, 10 }, { 0x10,  6 }, {  0x8, 10 },
111
    { 0x16,  7 }, { 0x55, 12 }, { 0x15,  7 }, { 0x14,  7 },
112
    { 0x1c,  8 }, { 0x1b,  8 }, { 0x21,  9 }, { 0x20,  9 },
113
    { 0x1f,  9 }, { 0x1e,  9 }, { 0x1d,  9 }, { 0x1c,  9 },
114
    { 0x1b,  9 }, { 0x1a,  9 }, { 0x22, 11 }, { 0x23, 11 },
115
    { 0x56, 12 }, { 0x57, 12 }, {  0x7,  4 }, { 0x19,  9 },
116
    {  0x5, 11 }, {  0xf,  6 }, {  0x4, 11 }, {  0xe,  6 },
117
    {  0xd,  6 }, {  0xc,  6 }, { 0x13,  7 }, { 0x12,  7 },
118
    { 0x11,  7 }, { 0x10,  7 }, { 0x1a,  8 }, { 0x19,  8 },
119
    { 0x18,  8 }, { 0x17,  8 }, { 0x16,  8 }, { 0x15,  8 },
120
    { 0x14,  8 }, { 0x13,  8 }, { 0x18,  9 }, { 0x17,  9 },
121
    { 0x16,  9 }, { 0x15,  9 }, { 0x14,  9 }, { 0x13,  9 },
122
    { 0x12,  9 }, { 0x11,  9 }, {  0x7, 10 }, {  0x6, 10 },
123
    {  0x5, 10 }, {  0x4, 10 }, { 0x24, 11 }, { 0x25, 11 },
124
    { 0x26, 11 }, { 0x27, 11 }, { 0x58, 12 }, { 0x59, 12 },
125
    { 0x5a, 12 }, { 0x5b, 12 }, { 0x5c, 12 }, { 0x5d, 12 },
126
    { 0x5e, 12 }, { 0x5f, 12 }, {  0x3,  7 },
127
};
128
129
const int8_t ff_inter_level[102] = {
130
    1,  2,  3,  4, 5, 6, 7, 8,
131
    9, 10, 11, 12, 1, 2, 3, 4,
132
    5,  6,  1,  2, 3, 4, 1, 2,
133
    3,  1,  2,  3, 1, 2, 3, 1,
134
    2,  3,  1,  2, 1, 2, 1, 2,
135
    1,  2,  1,  1, 1, 1, 1, 1,
136
    1,  1,  1,  1, 1, 1, 1, 1,
137
    1,  1,  1,  2, 3, 1, 2, 1,
138
    1,  1,  1,  1, 1, 1, 1, 1,
139
    1,  1,  1,  1, 1, 1, 1, 1,
140
    1,  1,  1,  1, 1, 1, 1, 1,
141
    1,  1,  1,  1, 1, 1, 1, 1,
142
    1,  1,  1,  1, 1, 1,
143
};
144
145
const int8_t ff_inter_run[102] = {
146
    0,   0,  0,  0,  0,  0,  0,  0,
147
    0,   0,  0,  0,  1,  1,  1,  1,
148
    1,   1,  2,  2,  2,  2,  3,  3,
149
    3,   4,  4,  4,  5,  5,  5,  6,
150
    6,   6,  7,  7,  8,  8,  9,  9,
151
    10, 10, 11, 12, 13, 14, 15, 16,
152
    17, 18, 19, 20, 21, 22, 23, 24,
153
    25, 26,  0,  0,  0,  1,  1,  2,
154
    3,   4,  5,  6,  7,  8,  9, 10,
155
    11, 12, 13, 14, 15, 16, 17, 18,
156
    19, 20, 21, 22, 23, 24, 25, 26,
157
    27, 28, 29, 30, 31, 32, 33, 34,
158
    35, 36, 37, 38, 39, 40,
159
};
160
161
RLTable ff_h263_rl_inter = {
162
    102,
163
    58,
164
    ff_inter_vlc,
165
    ff_inter_run,
166
    ff_inter_level,
167
};
168
169
static const uint16_t intra_vlc_aic[103][2] = {
170
    {  0x2,  2 }, {  0x6,  3 }, {  0xe,  4 }, {  0xc,  5 },
171
    {  0xd,  5 }, { 0x10,  6 }, { 0x11,  6 }, { 0x12,  6 },
172
    { 0x16,  7 }, { 0x1b,  8 }, { 0x20,  9 }, { 0x21,  9 },
173
    { 0x1a,  9 }, { 0x1b,  9 }, { 0x1c,  9 }, { 0x1d,  9 },
174
    { 0x1e,  9 }, { 0x1f,  9 }, { 0x23, 11 }, { 0x22, 11 },
175
    { 0x57, 12 }, { 0x56, 12 }, { 0x55, 12 }, { 0x54, 12 },
176
    { 0x53, 12 }, {  0xf,  4 }, { 0x14,  6 }, { 0x14,  7 },
177
    { 0x1e,  8 }, {  0xf, 10 }, { 0x21, 11 }, { 0x50, 12 },
178
    {  0xb,  5 }, { 0x15,  7 }, {  0xe, 10 }, {  0x9, 10 },
179
    { 0x15,  6 }, { 0x1d,  8 }, {  0xd, 10 }, { 0x51, 12 },
180
    { 0x13,  6 }, { 0x23,  9 }, {  0x7, 11 }, { 0x17,  7 },
181
    { 0x22,  9 }, { 0x52, 12 }, { 0x1c,  8 }, {  0xc, 10 },
182
    { 0x1f,  8 }, {  0xb, 10 }, { 0x25,  9 }, {  0xa, 10 },
183
    { 0x24,  9 }, {  0x6, 11 }, { 0x21, 10 }, { 0x20, 10 },
184
    {  0x8, 10 }, { 0x20, 11 }, {  0x7,  4 }, {  0xc,  6 },
185
    { 0x10,  7 }, { 0x13,  8 }, { 0x11,  9 }, { 0x12,  9 },
186
    {  0x4, 10 }, { 0x27, 11 }, { 0x26, 11 }, { 0x5f, 12 },
187
    {  0xf,  6 }, { 0x13,  9 }, {  0x5, 10 }, { 0x25, 11 },
188
    {  0xe,  6 }, { 0x14,  9 }, { 0x24, 11 }, {  0xd,  6 },
189
    {  0x6, 10 }, { 0x5e, 12 }, { 0x11,  7 }, {  0x7, 10 },
190
    { 0x13,  7 }, { 0x5d, 12 }, { 0x12,  7 }, { 0x5c, 12 },
191
    { 0x14,  8 }, { 0x5b, 12 }, { 0x15,  8 }, { 0x1a,  8 },
192
    { 0x19,  8 }, { 0x18,  8 }, { 0x17,  8 }, { 0x16,  8 },
193
    { 0x19,  9 }, { 0x15,  9 }, { 0x16,  9 }, { 0x18,  9 },
194
    { 0x17,  9 }, {  0x4, 11 }, {  0x5, 11 }, { 0x58, 12 },
195
    { 0x59, 12 }, { 0x5a, 12 }, {  0x3,  7 },
196
};
197
198
static const int8_t intra_run_aic[102] = {
199
    0,   0,  0,  0,  0,  0,  0,  0,
200
    0,   0,  0,  0,  0,  0,  0,  0,
201
    0,   0,  0,  0,  0,  0,  0,  0,
202
    0,   1,  1,  1,  1,  1,  1,  1,
203
    2,   2,  2,  2,  3,  3,  3,  3,
204
    4,   4,  4,  5,  5,  5,  6,  6,
205
    7,   7,  8,  8,  9,  9, 10, 11,
206
    12, 13,  0,  0,  0,  0,  0,  0,
207
    0,   0,  0,  0,  1,  1,  1,  1,
208
    2,   2,  2,  3,  3,  3,  4,  4,
209
    5,   5,  6,  6,  7,  7,  8,  9,
210
    10, 11, 12, 13, 14, 15, 16, 17,
211
    18, 19, 20, 21, 22, 23,
212
};
213
214
static const int8_t intra_level_aic[102] = {
215
    1,   2,  3,  4,  5,  6,  7,  8,
216
    9,  10, 11, 12, 13, 14, 15, 16,
217
    17, 18, 19, 20, 21, 22, 23, 24,
218
    25,  1,  2,  3,  4,  5,  6,  7,
219
    1,   2,  3,  4,  1,  2,  3,  4,
220
    1,   2,  3,  1,  2,  3,  1,  2,
221
    1,   2,  1,  2,  1,  2,  1,  1,
222
    1,   1,  1,  2,  3,  4,  5,  6,
223
    7,   8,  9, 10,  1,  2,  3,  4,
224
    1,   2,  3,  1,  2,  3,  1,  2,
225
    1,   2,  1,  2,  1,  2,  1,  1,
226
    1,   1,  1,  1,  1,  1,  1,  1,
227
    1,   1,  1,  1,  1,  1,
228
};
229
230
RLTable ff_rl_intra_aic = {
231
    102,
232
    58,
233
    intra_vlc_aic,
234
    intra_run_aic,
235
    intra_level_aic,
236
};
237
238
const uint16_t ff_h263_format[8][2] = {
239
    {    0,    0 },
240
    {  128,   96 },
241
    {  176,  144 },
242
    {  352,  288 },
243
    {  704,  576 },
244
    { 1408, 1152 },
245
};
246
247
const uint8_t ff_aic_dc_scale_table[32] = {
248
//  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
249
    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
250
};
251
252
const uint8_t ff_modified_quant_tab[2][32] = {
253
//      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
254
    {
255
        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
256
    },
257
    {
258
        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
259
    }
260
};
261
262
const uint8_t ff_h263_chroma_qscale_table[32] = {
263
//  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
264
    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
265
};
266
267
const uint16_t ff_mba_max[6] = {
268
    47, 98, 395, 1583, 6335, 9215
269
};
270
271
const uint8_t ff_mba_length[7] = {
272
    6, 7, 9, 11, 13, 14, 14
273
};
274
275
const AVRational ff_h263_pixel_aspect[16] = {
276
    {  0,  1 },
277
    {  1,  1 },
278
    { 12, 11 },
279
    { 10, 11 },
280
    { 16, 11 },
281
    { 40, 33 },
282
    {  0,  1 },
283
    {  0,  1 },
284
    {  0,  1 },
285
    {  0,  1 },
286
    {  0,  1 },
287
    {  0,  1 },
288
    {  0,  1 },
289
    {  0,  1 },
290
    {  0,  1 },
291
    {  0,  1 },
292
};
293
294
285
static av_cold void h263_init_rl_inter(void)
295
{
296
    static uint8_t h263_rl_inter_table[2][2 * MAX_RUN + MAX_LEVEL + 3];
297
285
    ff_rl_init(&ff_h263_rl_inter, h263_rl_inter_table);
298
285
}
299
300
285
av_cold void ff_h263_init_rl_inter(void)
301
{
302
    static AVOnce init_static_once = AV_ONCE_INIT;
303
285
    ff_thread_once(&init_static_once, h263_init_rl_inter);
304
285
}