FFmpeg
dvdata.c
Go to the documentation of this file.
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 };
NB_DV_VLC
#define NB_DV_VLC
Definition: dvdata.h:29
ff_dv_quant_shifts
const uint8_t ff_dv_quant_shifts[22][4]
Definition: dvdata.c:45
ff_dv_zigzag248_direct
const uint8_t ff_dv_zigzag248_direct[64]
Definition: dvdata.c:33
ff_dv_vlc_level
const uint8_t ff_dv_vlc_level[NB_DV_VLC]
Definition: dvdata.c:242
ff_dv_vlc_run
const uint8_t ff_dv_vlc_run[NB_DV_VLC]
Definition: dvdata.c:187
ff_dv_vlc_bits
const uint16_t ff_dv_vlc_bits[NB_DV_VLC]
Definition: dvdata.c:77
ff_dv_vlc_len
const uint8_t ff_dv_vlc_len[NB_DV_VLC]
Definition: dvdata.c:132
ff_dv_quant_offset
const uint8_t ff_dv_quant_offset[4]
Definition: dvdata.c:70
dvdata.h