1 /*
2  * Constants for DV codec
3  * Copyright (c) 2002 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * Constants for DV codec.
25  */
26 
27 #include <stdint.h>
28 
29 #include "dvdata.h"
30 
31 /* Specific zigzag scan for 248 idct. NOTE that unlike the
32  * specification, we interleave the fields */
33 const uint8_t ff_dv_zigzag248_direct[64] = {
34      0,  8,  1,  9, 16, 24,  2, 10,
35     17, 25, 32, 40, 48, 56, 33, 41,
36     18, 26,  3, 11,  4, 12, 19, 27,
37     34, 42, 49, 57, 50, 58, 35, 43,
38     20, 28,  5, 13,  6, 14, 21, 29,
39     36, 44, 51, 59, 52, 60, 37, 45,
40     22, 30,  7, 15, 23, 31, 38, 46,
41     53, 61, 54, 62, 39, 47, 55, 63,
42 };
43 
44 /* unquant tables (not used directly) */
45 const uint8_t ff_dv_quant_shifts[22][4] = {
46     { 3, 3, 4, 4 },
47     { 3, 3, 4, 4 },
48     { 2, 3, 3, 4 },
49     { 2, 3, 3, 4 },
50     { 2, 2, 3, 3 },
51     { 2, 2, 3, 3 },
52     { 1, 2, 2, 3 },
53     { 1, 2, 2, 3 },
54     { 1, 1, 2, 2 },
55     { 1, 1, 2, 2 },
56     { 0, 1, 1, 2 },
57     { 0, 1, 1, 2 },
58     { 0, 0, 1, 1 },
59     { 0, 0, 1, 1 },
60     { 0, 0, 0, 1 },
61     { 0, 0, 0, 0 },
62     { 0, 0, 0, 0 },
63     { 0, 0, 0, 0 },
64     { 0, 0, 0, 0 },
65     { 0, 0, 0, 0 },
66     { 0, 0, 0, 0 },
67     { 0, 0, 0, 0 },
68 };
69 
70 const uint8_t ff_dv_quant_offset[4] = { 6, 3, 0, 1 };
71 
72 /*
73  * There's a catch about the following three tables: the mapping they establish
74  * between (run, level) and vlc is not 1-1. So you have to watch out for that
75  * when building misc. tables. E.g. (1, 0) can be either 0x7cf or 0x1f82.
76  */
77 const uint16_t ff_dv_vlc_bits[NB_DV_VLC] = {
78     0x0000, 0x0002, 0x0007, 0x0008, 0x0009, 0x0014, 0x0015, 0x0016,
79     0x0017, 0x0030, 0x0031, 0x0032, 0x0033, 0x0068, 0x0069, 0x006a,
80     0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x00e0, 0x00e1, 0x00e2,
81     0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea,
82     0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x01e0, 0x01e1, 0x01e2,
83     0x01e3, 0x01e4, 0x01e5, 0x01e6, 0x01e7, 0x01e8, 0x01e9, 0x01ea,
84     0x01eb, 0x01ec, 0x01ed, 0x01ee, 0x01ef, 0x03e0, 0x03e1, 0x03e2,
85     0x03e3, 0x03e4, 0x03e5, 0x03e6, 0x07ce, 0x07cf, 0x07d0, 0x07d1,
86     0x07d2, 0x07d3, 0x07d4, 0x07d5, 0x0fac, 0x0fad, 0x0fae, 0x0faf,
87     0x0fb0, 0x0fb1, 0x0fb2, 0x0fb3, 0x0fb4, 0x0fb5, 0x0fb6, 0x0fb7,
88     0x0fb8, 0x0fb9, 0x0fba, 0x0fbb, 0x0fbc, 0x0fbd, 0x0fbe, 0x0fbf,
89     0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87,
90     0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f,
91     0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97,
92     0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f,
93     0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7,
94     0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf,
95     0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7,
96     0x1fb8, 0x1fb9, 0x1fba, 0x1fbb, 0x1fbc, 0x1fbd, 0x1fbe, 0x1fbf,
97     0x7f00, 0x7f01, 0x7f02, 0x7f03, 0x7f04, 0x7f05, 0x7f06, 0x7f07,
98     0x7f08, 0x7f09, 0x7f0a, 0x7f0b, 0x7f0c, 0x7f0d, 0x7f0e, 0x7f0f,
99     0x7f10, 0x7f11, 0x7f12, 0x7f13, 0x7f14, 0x7f15, 0x7f16, 0x7f17,
100     0x7f18, 0x7f19, 0x7f1a, 0x7f1b, 0x7f1c, 0x7f1d, 0x7f1e, 0x7f1f,
101     0x7f20, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27,
102     0x7f28, 0x7f29, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2e, 0x7f2f,
103     0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f34, 0x7f35, 0x7f36, 0x7f37,
104     0x7f38, 0x7f39, 0x7f3a, 0x7f3b, 0x7f3c, 0x7f3d, 0x7f3e, 0x7f3f,
105     0x7f40, 0x7f41, 0x7f42, 0x7f43, 0x7f44, 0x7f45, 0x7f46, 0x7f47,
106     0x7f48, 0x7f49, 0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f,
107     0x7f50, 0x7f51, 0x7f52, 0x7f53, 0x7f54, 0x7f55, 0x7f56, 0x7f57,
108     0x7f58, 0x7f59, 0x7f5a, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f5f,
109     0x7f60, 0x7f61, 0x7f62, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f67,
110     0x7f68, 0x7f69, 0x7f6a, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6e, 0x7f6f,
111     0x7f70, 0x7f71, 0x7f72, 0x7f73, 0x7f74, 0x7f75, 0x7f76, 0x7f77,
112     0x7f78, 0x7f79, 0x7f7a, 0x7f7b, 0x7f7c, 0x7f7d, 0x7f7e, 0x7f7f,
113     0x7f80, 0x7f81, 0x7f82, 0x7f83, 0x7f84, 0x7f85, 0x7f86, 0x7f87,
114     0x7f88, 0x7f89, 0x7f8a, 0x7f8b, 0x7f8c, 0x7f8d, 0x7f8e, 0x7f8f,
115     0x7f90, 0x7f91, 0x7f92, 0x7f93, 0x7f94, 0x7f95, 0x7f96, 0x7f97,
116     0x7f98, 0x7f99, 0x7f9a, 0x7f9b, 0x7f9c, 0x7f9d, 0x7f9e, 0x7f9f,
117     0x7fa0, 0x7fa1, 0x7fa2, 0x7fa3, 0x7fa4, 0x7fa5, 0x7fa6, 0x7fa7,
118     0x7fa8, 0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7faf,
119     0x7fb0, 0x7fb1, 0x7fb2, 0x7fb3, 0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7,
120     0x7fb8, 0x7fb9, 0x7fba, 0x7fbb, 0x7fbc, 0x7fbd, 0x7fbe, 0x7fbf,
121     0x7fc0, 0x7fc1, 0x7fc2, 0x7fc3, 0x7fc4, 0x7fc5, 0x7fc6, 0x7fc7,
122     0x7fc8, 0x7fc9, 0x7fca, 0x7fcb, 0x7fcc, 0x7fcd, 0x7fce, 0x7fcf,
123     0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd4, 0x7fd5, 0x7fd6, 0x7fd7,
124     0x7fd8, 0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fdf,
125     0x7fe0, 0x7fe1, 0x7fe2, 0x7fe3, 0x7fe4, 0x7fe5, 0x7fe6, 0x7fe7,
126     0x7fe8, 0x7fe9, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fee, 0x7fef,
127     0x7ff0, 0x7ff1, 0x7ff2, 0x7ff3, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7,
128     0x7ff8, 0x7ff9, 0x7ffa, 0x7ffb, 0x7ffc, 0x7ffd, 0x7ffe, 0x7fff,
129     0x0006,
130 };
131 
132 const uint8_t ff_dv_vlc_len[NB_DV_VLC] = {
133      2,  3,  4,  4,  4,  5,  5,  5,
134      5,  6,  6,  6,  6,  7,  7,  7,
135      7,  7,  7,  7,  7,  8,  8,  8,
136      8,  8,  8,  8,  8,  8,  8,  8,
137      8,  8,  8,  8,  8,  9,  9,  9,
138      9,  9,  9,  9,  9,  9,  9,  9,
139      9,  9,  9,  9,  9, 10, 10, 10,
140     10, 10, 10, 10, 11, 11, 11, 11,
141     11, 11, 11, 11, 12, 12, 12, 12,
142     12, 12, 12, 12, 12, 12, 12, 12,
143     12, 12, 12, 12, 12, 12, 12, 12,
144     13, 13, 13, 13, 13, 13, 13, 13,
145     13, 13, 13, 13, 13, 13, 13, 13,
146     13, 13, 13, 13, 13, 13, 13, 13,
147     13, 13, 13, 13, 13, 13, 13, 13,
148     13, 13, 13, 13, 13, 13, 13, 13,
149     13, 13, 13, 13, 13, 13, 13, 13,
150     13, 13, 13, 13, 13, 13, 13, 13,
151     13, 13, 13, 13, 13, 13, 13, 13,
152     15, 15, 15, 15, 15, 15, 15, 15,
153     15, 15, 15, 15, 15, 15, 15, 15,
154     15, 15, 15, 15, 15, 15, 15, 15,
155     15, 15, 15, 15, 15, 15, 15, 15,
156     15, 15, 15, 15, 15, 15, 15, 15,
157     15, 15, 15, 15, 15, 15, 15, 15,
158     15, 15, 15, 15, 15, 15, 15, 15,
159     15, 15, 15, 15, 15, 15, 15, 15,
160     15, 15, 15, 15, 15, 15, 15, 15,
161     15, 15, 15, 15, 15, 15, 15, 15,
162     15, 15, 15, 15, 15, 15, 15, 15,
163     15, 15, 15, 15, 15, 15, 15, 15,
164     15, 15, 15, 15, 15, 15, 15, 15,
165     15, 15, 15, 15, 15, 15, 15, 15,
166     15, 15, 15, 15, 15, 15, 15, 15,
167     15, 15, 15, 15, 15, 15, 15, 15,
168     15, 15, 15, 15, 15, 15, 15, 15,
169     15, 15, 15, 15, 15, 15, 15, 15,
170     15, 15, 15, 15, 15, 15, 15, 15,
171     15, 15, 15, 15, 15, 15, 15, 15,
172     15, 15, 15, 15, 15, 15, 15, 15,
173     15, 15, 15, 15, 15, 15, 15, 15,
174     15, 15, 15, 15, 15, 15, 15, 15,
175     15, 15, 15, 15, 15, 15, 15, 15,
176     15, 15, 15, 15, 15, 15, 15, 15,
177     15, 15, 15, 15, 15, 15, 15, 15,
178     15, 15, 15, 15, 15, 15, 15, 15,
179     15, 15, 15, 15, 15, 15, 15, 15,
180     15, 15, 15, 15, 15, 15, 15, 15,
181     15, 15, 15, 15, 15, 15, 15, 15,
182     15, 15, 15, 15, 15, 15, 15, 15,
183     15, 15, 15, 15, 15, 15, 15, 15,
184      4,
185 };
186 
187 const uint8_t ff_dv_vlc_run[NB_DV_VLC] = {
188      0,  0,  1,  0,  0,  2,  1,  0,
189      0,  3,  4,  0,  0,  5,  6,  2,
190      1,  1,  0,  0,  0,  7,  8,  9,
191     10,  3,  4,  2,  1,  1,  1,  0,
192      0,  0,  0,  0,  0, 11, 12, 13,
193     14,  5,  6,  3,  4,  2,  2,  1,
194      0,  0,  0,  0,  0,  5,  3,  3,
195      2,  1,  1,  1,  0,  1,  6,  4,
196      3,  1,  1,  1,  2,  3,  4,  5,
197      7,  8,  9, 10,  7,  8,  4,  3,
198      2,  2,  2,  2,  2,  1,  1,  1,
199      0,  1,  2,  3,  4,  5,  6,  7,
200      8,  9, 10, 11, 12, 13, 14, 15,
201     16, 17, 18, 19, 20, 21, 22, 23,
202     24, 25, 26, 27, 28, 29, 30, 31,
203     32, 33, 34, 35, 36, 37, 38, 39,
204     40, 41, 42, 43, 44, 45, 46, 47,
205     48, 49, 50, 51, 52, 53, 54, 55,
206     56, 57, 58, 59, 60, 61, 62, 63,
207      0,  0,  0,  0,  0,  0,  0,  0,
208      0,  0,  0,  0,  0,  0,  0,  0,
209      0,  0,  0,  0,  0,  0,  0,  0,
210      0,  0,  0,  0,  0,  0,  0,  0,
211      0,  0,  0,  0,  0,  0,  0,  0,
212      0,  0,  0,  0,  0,  0,  0,  0,
213      0,  0,  0,  0,  0,  0,  0,  0,
214      0,  0,  0,  0,  0,  0,  0,  0,
215      0,  0,  0,  0,  0,  0,  0,  0,
216      0,  0,  0,  0,  0,  0,  0,  0,
217      0,  0,  0,  0,  0,  0,  0,  0,
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,  0,  0,  0,  0,  0,  0,  0,
222      0,  0,  0,  0,  0,  0,  0,  0,
223      0,  0,  0,  0,  0,  0,  0,  0,
224      0,  0,  0,  0,  0,  0,  0,  0,
225      0,  0,  0,  0,  0,  0,  0,  0,
226      0,  0,  0,  0,  0,  0,  0,  0,
227      0,  0,  0,  0,  0,  0,  0,  0,
228      0,  0,  0,  0,  0,  0,  0,  0,
229      0,  0,  0,  0,  0,  0,  0,  0,
230      0,  0,  0,  0,  0,  0,  0,  0,
231      0,  0,  0,  0,  0,  0,  0,  0,
232      0,  0,  0,  0,  0,  0,  0,  0,
233      0,  0,  0,  0,  0,  0,  0,  0,
234      0,  0,  0,  0,  0,  0,  0,  0,
235      0,  0,  0,  0,  0,  0,  0,  0,
236      0,  0,  0,  0,  0,  0,  0,  0,
237      0,  0,  0,  0,  0,  0,  0,  0,
238      0,  0,  0,  0,  0,  0,  0,  0,
239    127,
240 };
241 
242 const uint8_t ff_dv_vlc_level[NB_DV_VLC] = {
243      1,   2,   1,   3,   4,   1,   2,   5,
244      6,   1,   1,   7,   8,   1,   1,   2,
245      3,   4,   9,  10,  11,   1,   1,   1,
246      1,   2,   2,   3,   5,   6,   7,  12,
247     13,  14,  15,  16,  17,   1,   1,   1,
248      1,   2,   2,   3,   3,   4,   5,   8,
249     18,  19,  20,  21,  22,   3,   4,   5,
250      6,   9,  10,  11,   0,   0,   3,   4,
251      6,  12,  13,  14,   0,   0,   0,   0,
252      2,   2,   2,   2,   3,   3,   5,   7,
253      7,   8,   9,  10,  11,  15,  16,  17,
254      0,   0,   0,   0,   0,   0,   0,   0,
255      0,   0,   0,   0,   0,   0,   0,   0,
256      0,   0,   0,   0,   0,   0,   0,   0,
257      0,   0,   0,   0,   0,   0,   0,   0,
258      0,   0,   0,   0,   0,   0,   0,   0,
259      0,   0,   0,   0,   0,   0,   0,   0,
260      0,   0,   0,   0,   0,   0,   0,   0,
261      0,   0,   0,   0,   0,   0,   0,   0,
262      0,   1,   2,   3,   4,   5,   6,   7,
263      8,   9,  10,  11,  12,  13,  14,  15,
264     16,  17,  18,  19,  20,  21,  22,  23,
265     24,  25,  26,  27,  28,  29,  30,  31,
266     32,  33,  34,  35,  36,  37,  38,  39,
267     40,  41,  42,  43,  44,  45,  46,  47,
268     48,  49,  50,  51,  52,  53,  54,  55,
269     56,  57,  58,  59,  60,  61,  62,  63,
270     64,  65,  66,  67,  68,  69,  70,  71,
271     72,  73,  74,  75,  76,  77,  78,  79,
272     80,  81,  82,  83,  84,  85,  86,  87,
273     88,  89,  90,  91,  92,  93,  94,  95,
274     96,  97,  98,  99, 100, 101, 102, 103,
275    104, 105, 106, 107, 108, 109, 110, 111,
276    112, 113, 114, 115, 116, 117, 118, 119,
277    120, 121, 122, 123, 124, 125, 126, 127,
278    128, 129, 130, 131, 132, 133, 134, 135,
279    136, 137, 138, 139, 140, 141, 142, 143,
280    144, 145, 146, 147, 148, 149, 150, 151,
281    152, 153, 154, 155, 156, 157, 158, 159,
282    160, 161, 162, 163, 164, 165, 166, 167,
283    168, 169, 170, 171, 172, 173, 174, 175,
284    176, 177, 178, 179, 180, 181, 182, 183,
285    184, 185, 186, 187, 188, 189, 190, 191,
286    192, 193, 194, 195, 196, 197, 198, 199,
287    200, 201, 202, 203, 204, 205, 206, 207,
288    208, 209, 210, 211, 212, 213, 214, 215,
289    216, 217, 218, 219, 220, 221, 222, 223,
290    224, 225, 226, 227, 228, 229, 230, 231,
291    232, 233, 234, 235, 236, 237, 238, 239,
292    240, 241, 242, 243, 244, 245, 246, 247,
293    248, 249, 250, 251, 252, 253, 254, 255,
294      0,
295 };
296