FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 */
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 const int ff_dv_iweight_88[64] = {
73  32768, 16710, 16710, 17735, 17015, 17735, 18197, 18079,
74  18079, 18197, 18725, 18559, 19196, 18559, 18725, 19284,
75  19108, 19692, 19692, 19108, 19284, 21400, 19645, 20262,
76  20214, 20262, 19645, 21400, 22733, 21845, 20867, 20815,
77  20815, 20867, 21845, 22733, 23173, 23173, 21400, 21400,
78  21400, 23173, 23173, 24600, 23764, 22017, 22017, 23764,
79  24600, 25267, 24457, 22672, 24457, 25267, 25971, 25191,
80  25191, 25971, 26715, 27962, 26715, 29642, 29642, 31536,
81 };
82 const int ff_dv_iweight_248[64] = {
83  32768, 17735, 16710, 18079, 18725, 21400, 17735, 19196,
84  19108, 21845, 16384, 17735, 18725, 21400, 16710, 18079,
85  20262, 23173, 18197, 19692, 18725, 20262, 20815, 23764,
86  17735, 19196, 19108, 21845, 20262, 23173, 18197, 19692,
87  21400, 24457, 19284, 20867, 21400, 23173, 22017, 25191,
88  18725, 20262, 20815, 23764, 21400, 24457, 19284, 20867,
89  24457, 27962, 22733, 24600, 25971, 29642, 21400, 23173,
90  22017, 25191, 24457, 27962, 22733, 24600, 25971, 29642,
91 };
92 
93 /**
94  * The "inverse" DV100 weights are actually just the spec weights (zig-zagged).
95  */
96 const int ff_dv_iweight_1080_y[64] = {
97  128, 16, 16, 17, 17, 17, 18, 18,
98  18, 18, 18, 18, 19, 18, 18, 19,
99  19, 19, 19, 19, 19, 42, 38, 40,
100  40, 40, 38, 42, 44, 43, 41, 41,
101  41, 41, 43, 44, 45, 45, 42, 42,
102  42, 45, 45, 48, 46, 43, 43, 46,
103  48, 49, 48, 44, 48, 49, 101, 98,
104  98, 101, 104, 109, 104, 116, 116, 123,
105 };
106 const int ff_dv_iweight_1080_c[64] = {
107  128, 16, 16, 17, 17, 17, 25, 25,
108  25, 25, 26, 25, 26, 25, 26, 26,
109  26, 27, 27, 26, 26, 42, 38, 40,
110  40, 40, 38, 42, 44, 43, 41, 41,
111  41, 41, 43, 44, 91, 91, 84, 84,
112  84, 91, 91, 96, 93, 86, 86, 93,
113  96, 197, 191, 177, 191, 197, 203, 197,
114  197, 203, 209, 219, 209, 232, 232, 246,
115 };
116 const int ff_dv_iweight_720_y[64] = {
117  128, 16, 16, 17, 17, 17, 18, 18,
118  18, 18, 18, 18, 19, 18, 18, 19,
119  19, 19, 19, 19, 19, 42, 38, 40,
120  40, 40, 38, 42, 44, 43, 41, 41,
121  41, 41, 43, 44, 68, 68, 63, 63,
122  63, 68, 68, 96, 92, 86, 86, 92,
123  96, 98, 96, 88, 96, 98, 202, 196,
124  196, 202, 208, 218, 208, 232, 232, 246,
125 };
126 const int ff_dv_iweight_720_c[64] = {
127  128, 24, 24, 26, 26, 26, 36, 36,
128  36, 36, 36, 36, 38, 36, 36, 38,
129  38, 38, 38, 38, 38, 84, 76, 80,
130  80, 80, 76, 84, 88, 86, 82, 82,
131  82, 82, 86, 88, 182, 182, 168, 168,
132  168, 182, 182, 192, 186, 192, 172, 186,
133  192, 394, 382, 354, 382, 394, 406, 394,
134  394, 406, 418, 438, 418, 464, 464, 492,
135 };
136 
137 /*
138  * There's a catch about the following three tables: the mapping they establish
139  * between (run, level) and vlc is not 1-1. So you have to watch out for that
140  * when building misc. tables. E.g. (1, 0) can be either 0x7cf or 0x1f82.
141  */
142 const uint16_t ff_dv_vlc_bits[NB_DV_VLC] = {
143  0x0000, 0x0002, 0x0007, 0x0008, 0x0009, 0x0014, 0x0015, 0x0016,
144  0x0017, 0x0030, 0x0031, 0x0032, 0x0033, 0x0068, 0x0069, 0x006a,
145  0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x00e0, 0x00e1, 0x00e2,
146  0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea,
147  0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x01e0, 0x01e1, 0x01e2,
148  0x01e3, 0x01e4, 0x01e5, 0x01e6, 0x01e7, 0x01e8, 0x01e9, 0x01ea,
149  0x01eb, 0x01ec, 0x01ed, 0x01ee, 0x01ef, 0x03e0, 0x03e1, 0x03e2,
150  0x03e3, 0x03e4, 0x03e5, 0x03e6, 0x07ce, 0x07cf, 0x07d0, 0x07d1,
151  0x07d2, 0x07d3, 0x07d4, 0x07d5, 0x0fac, 0x0fad, 0x0fae, 0x0faf,
152  0x0fb0, 0x0fb1, 0x0fb2, 0x0fb3, 0x0fb4, 0x0fb5, 0x0fb6, 0x0fb7,
153  0x0fb8, 0x0fb9, 0x0fba, 0x0fbb, 0x0fbc, 0x0fbd, 0x0fbe, 0x0fbf,
154  0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87,
155  0x1f88, 0x1f89, 0x1f8a, 0x1f8b, 0x1f8c, 0x1f8d, 0x1f8e, 0x1f8f,
156  0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97,
157  0x1f98, 0x1f99, 0x1f9a, 0x1f9b, 0x1f9c, 0x1f9d, 0x1f9e, 0x1f9f,
158  0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7,
159  0x1fa8, 0x1fa9, 0x1faa, 0x1fab, 0x1fac, 0x1fad, 0x1fae, 0x1faf,
160  0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7,
161  0x1fb8, 0x1fb9, 0x1fba, 0x1fbb, 0x1fbc, 0x1fbd, 0x1fbe, 0x1fbf,
162  0x7f00, 0x7f01, 0x7f02, 0x7f03, 0x7f04, 0x7f05, 0x7f06, 0x7f07,
163  0x7f08, 0x7f09, 0x7f0a, 0x7f0b, 0x7f0c, 0x7f0d, 0x7f0e, 0x7f0f,
164  0x7f10, 0x7f11, 0x7f12, 0x7f13, 0x7f14, 0x7f15, 0x7f16, 0x7f17,
165  0x7f18, 0x7f19, 0x7f1a, 0x7f1b, 0x7f1c, 0x7f1d, 0x7f1e, 0x7f1f,
166  0x7f20, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27,
167  0x7f28, 0x7f29, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2e, 0x7f2f,
168  0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f34, 0x7f35, 0x7f36, 0x7f37,
169  0x7f38, 0x7f39, 0x7f3a, 0x7f3b, 0x7f3c, 0x7f3d, 0x7f3e, 0x7f3f,
170  0x7f40, 0x7f41, 0x7f42, 0x7f43, 0x7f44, 0x7f45, 0x7f46, 0x7f47,
171  0x7f48, 0x7f49, 0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f,
172  0x7f50, 0x7f51, 0x7f52, 0x7f53, 0x7f54, 0x7f55, 0x7f56, 0x7f57,
173  0x7f58, 0x7f59, 0x7f5a, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f5f,
174  0x7f60, 0x7f61, 0x7f62, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f67,
175  0x7f68, 0x7f69, 0x7f6a, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6e, 0x7f6f,
176  0x7f70, 0x7f71, 0x7f72, 0x7f73, 0x7f74, 0x7f75, 0x7f76, 0x7f77,
177  0x7f78, 0x7f79, 0x7f7a, 0x7f7b, 0x7f7c, 0x7f7d, 0x7f7e, 0x7f7f,
178  0x7f80, 0x7f81, 0x7f82, 0x7f83, 0x7f84, 0x7f85, 0x7f86, 0x7f87,
179  0x7f88, 0x7f89, 0x7f8a, 0x7f8b, 0x7f8c, 0x7f8d, 0x7f8e, 0x7f8f,
180  0x7f90, 0x7f91, 0x7f92, 0x7f93, 0x7f94, 0x7f95, 0x7f96, 0x7f97,
181  0x7f98, 0x7f99, 0x7f9a, 0x7f9b, 0x7f9c, 0x7f9d, 0x7f9e, 0x7f9f,
182  0x7fa0, 0x7fa1, 0x7fa2, 0x7fa3, 0x7fa4, 0x7fa5, 0x7fa6, 0x7fa7,
183  0x7fa8, 0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7faf,
184  0x7fb0, 0x7fb1, 0x7fb2, 0x7fb3, 0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7,
185  0x7fb8, 0x7fb9, 0x7fba, 0x7fbb, 0x7fbc, 0x7fbd, 0x7fbe, 0x7fbf,
186  0x7fc0, 0x7fc1, 0x7fc2, 0x7fc3, 0x7fc4, 0x7fc5, 0x7fc6, 0x7fc7,
187  0x7fc8, 0x7fc9, 0x7fca, 0x7fcb, 0x7fcc, 0x7fcd, 0x7fce, 0x7fcf,
188  0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd4, 0x7fd5, 0x7fd6, 0x7fd7,
189  0x7fd8, 0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fdf,
190  0x7fe0, 0x7fe1, 0x7fe2, 0x7fe3, 0x7fe4, 0x7fe5, 0x7fe6, 0x7fe7,
191  0x7fe8, 0x7fe9, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fee, 0x7fef,
192  0x7ff0, 0x7ff1, 0x7ff2, 0x7ff3, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7,
193  0x7ff8, 0x7ff9, 0x7ffa, 0x7ffb, 0x7ffc, 0x7ffd, 0x7ffe, 0x7fff,
194  0x0006,
195 };
196 
198  2, 3, 4, 4, 4, 5, 5, 5,
199  5, 6, 6, 6, 6, 7, 7, 7,
200  7, 7, 7, 7, 7, 8, 8, 8,
201  8, 8, 8, 8, 8, 8, 8, 8,
202  8, 8, 8, 8, 8, 9, 9, 9,
203  9, 9, 9, 9, 9, 9, 9, 9,
204  9, 9, 9, 9, 9, 10, 10, 10,
205  10, 10, 10, 10, 11, 11, 11, 11,
206  11, 11, 11, 11, 12, 12, 12, 12,
207  12, 12, 12, 12, 12, 12, 12, 12,
208  12, 12, 12, 12, 12, 12, 12, 12,
209  13, 13, 13, 13, 13, 13, 13, 13,
210  13, 13, 13, 13, 13, 13, 13, 13,
211  13, 13, 13, 13, 13, 13, 13, 13,
212  13, 13, 13, 13, 13, 13, 13, 13,
213  13, 13, 13, 13, 13, 13, 13, 13,
214  13, 13, 13, 13, 13, 13, 13, 13,
215  13, 13, 13, 13, 13, 13, 13, 13,
216  13, 13, 13, 13, 13, 13, 13, 13,
217  15, 15, 15, 15, 15, 15, 15, 15,
218  15, 15, 15, 15, 15, 15, 15, 15,
219  15, 15, 15, 15, 15, 15, 15, 15,
220  15, 15, 15, 15, 15, 15, 15, 15,
221  15, 15, 15, 15, 15, 15, 15, 15,
222  15, 15, 15, 15, 15, 15, 15, 15,
223  15, 15, 15, 15, 15, 15, 15, 15,
224  15, 15, 15, 15, 15, 15, 15, 15,
225  15, 15, 15, 15, 15, 15, 15, 15,
226  15, 15, 15, 15, 15, 15, 15, 15,
227  15, 15, 15, 15, 15, 15, 15, 15,
228  15, 15, 15, 15, 15, 15, 15, 15,
229  15, 15, 15, 15, 15, 15, 15, 15,
230  15, 15, 15, 15, 15, 15, 15, 15,
231  15, 15, 15, 15, 15, 15, 15, 15,
232  15, 15, 15, 15, 15, 15, 15, 15,
233  15, 15, 15, 15, 15, 15, 15, 15,
234  15, 15, 15, 15, 15, 15, 15, 15,
235  15, 15, 15, 15, 15, 15, 15, 15,
236  15, 15, 15, 15, 15, 15, 15, 15,
237  15, 15, 15, 15, 15, 15, 15, 15,
238  15, 15, 15, 15, 15, 15, 15, 15,
239  15, 15, 15, 15, 15, 15, 15, 15,
240  15, 15, 15, 15, 15, 15, 15, 15,
241  15, 15, 15, 15, 15, 15, 15, 15,
242  15, 15, 15, 15, 15, 15, 15, 15,
243  15, 15, 15, 15, 15, 15, 15, 15,
244  15, 15, 15, 15, 15, 15, 15, 15,
245  15, 15, 15, 15, 15, 15, 15, 15,
246  15, 15, 15, 15, 15, 15, 15, 15,
247  15, 15, 15, 15, 15, 15, 15, 15,
248  15, 15, 15, 15, 15, 15, 15, 15,
249  4,
250 };
251 
253  0, 0, 1, 0, 0, 2, 1, 0,
254  0, 3, 4, 0, 0, 5, 6, 2,
255  1, 1, 0, 0, 0, 7, 8, 9,
256  10, 3, 4, 2, 1, 1, 1, 0,
257  0, 0, 0, 0, 0, 11, 12, 13,
258  14, 5, 6, 3, 4, 2, 2, 1,
259  0, 0, 0, 0, 0, 5, 3, 3,
260  2, 1, 1, 1, 0, 1, 6, 4,
261  3, 1, 1, 1, 2, 3, 4, 5,
262  7, 8, 9, 10, 7, 8, 4, 3,
263  2, 2, 2, 2, 2, 1, 1, 1,
264  0, 1, 2, 3, 4, 5, 6, 7,
265  8, 9, 10, 11, 12, 13, 14, 15,
266  16, 17, 18, 19, 20, 21, 22, 23,
267  24, 25, 26, 27, 28, 29, 30, 31,
268  32, 33, 34, 35, 36, 37, 38, 39,
269  40, 41, 42, 43, 44, 45, 46, 47,
270  48, 49, 50, 51, 52, 53, 54, 55,
271  56, 57, 58, 59, 60, 61, 62, 63,
272  0, 0, 0, 0, 0, 0, 0, 0,
273  0, 0, 0, 0, 0, 0, 0, 0,
274  0, 0, 0, 0, 0, 0, 0, 0,
275  0, 0, 0, 0, 0, 0, 0, 0,
276  0, 0, 0, 0, 0, 0, 0, 0,
277  0, 0, 0, 0, 0, 0, 0, 0,
278  0, 0, 0, 0, 0, 0, 0, 0,
279  0, 0, 0, 0, 0, 0, 0, 0,
280  0, 0, 0, 0, 0, 0, 0, 0,
281  0, 0, 0, 0, 0, 0, 0, 0,
282  0, 0, 0, 0, 0, 0, 0, 0,
283  0, 0, 0, 0, 0, 0, 0, 0,
284  0, 0, 0, 0, 0, 0, 0, 0,
285  0, 0, 0, 0, 0, 0, 0, 0,
286  0, 0, 0, 0, 0, 0, 0, 0,
287  0, 0, 0, 0, 0, 0, 0, 0,
288  0, 0, 0, 0, 0, 0, 0, 0,
289  0, 0, 0, 0, 0, 0, 0, 0,
290  0, 0, 0, 0, 0, 0, 0, 0,
291  0, 0, 0, 0, 0, 0, 0, 0,
292  0, 0, 0, 0, 0, 0, 0, 0,
293  0, 0, 0, 0, 0, 0, 0, 0,
294  0, 0, 0, 0, 0, 0, 0, 0,
295  0, 0, 0, 0, 0, 0, 0, 0,
296  0, 0, 0, 0, 0, 0, 0, 0,
297  0, 0, 0, 0, 0, 0, 0, 0,
298  0, 0, 0, 0, 0, 0, 0, 0,
299  0, 0, 0, 0, 0, 0, 0, 0,
300  0, 0, 0, 0, 0, 0, 0, 0,
301  0, 0, 0, 0, 0, 0, 0, 0,
302  0, 0, 0, 0, 0, 0, 0, 0,
303  0, 0, 0, 0, 0, 0, 0, 0,
304 127,
305 };
306 
308  1, 2, 1, 3, 4, 1, 2, 5,
309  6, 1, 1, 7, 8, 1, 1, 2,
310  3, 4, 9, 10, 11, 1, 1, 1,
311  1, 2, 2, 3, 5, 6, 7, 12,
312  13, 14, 15, 16, 17, 1, 1, 1,
313  1, 2, 2, 3, 3, 4, 5, 8,
314  18, 19, 20, 21, 22, 3, 4, 5,
315  6, 9, 10, 11, 0, 0, 3, 4,
316  6, 12, 13, 14, 0, 0, 0, 0,
317  2, 2, 2, 2, 3, 3, 5, 7,
318  7, 8, 9, 10, 11, 15, 16, 17,
319  0, 0, 0, 0, 0, 0, 0, 0,
320  0, 0, 0, 0, 0, 0, 0, 0,
321  0, 0, 0, 0, 0, 0, 0, 0,
322  0, 0, 0, 0, 0, 0, 0, 0,
323  0, 0, 0, 0, 0, 0, 0, 0,
324  0, 0, 0, 0, 0, 0, 0, 0,
325  0, 0, 0, 0, 0, 0, 0, 0,
326  0, 0, 0, 0, 0, 0, 0, 0,
327  0, 1, 2, 3, 4, 5, 6, 7,
328  8, 9, 10, 11, 12, 13, 14, 15,
329  16, 17, 18, 19, 20, 21, 22, 23,
330  24, 25, 26, 27, 28, 29, 30, 31,
331  32, 33, 34, 35, 36, 37, 38, 39,
332  40, 41, 42, 43, 44, 45, 46, 47,
333  48, 49, 50, 51, 52, 53, 54, 55,
334  56, 57, 58, 59, 60, 61, 62, 63,
335  64, 65, 66, 67, 68, 69, 70, 71,
336  72, 73, 74, 75, 76, 77, 78, 79,
337  80, 81, 82, 83, 84, 85, 86, 87,
338  88, 89, 90, 91, 92, 93, 94, 95,
339  96, 97, 98, 99, 100, 101, 102, 103,
340  104, 105, 106, 107, 108, 109, 110, 111,
341  112, 113, 114, 115, 116, 117, 118, 119,
342  120, 121, 122, 123, 124, 125, 126, 127,
343  128, 129, 130, 131, 132, 133, 134, 135,
344  136, 137, 138, 139, 140, 141, 142, 143,
345  144, 145, 146, 147, 148, 149, 150, 151,
346  152, 153, 154, 155, 156, 157, 158, 159,
347  160, 161, 162, 163, 164, 165, 166, 167,
348  168, 169, 170, 171, 172, 173, 174, 175,
349  176, 177, 178, 179, 180, 181, 182, 183,
350  184, 185, 186, 187, 188, 189, 190, 191,
351  192, 193, 194, 195, 196, 197, 198, 199,
352  200, 201, 202, 203, 204, 205, 206, 207,
353  208, 209, 210, 211, 212, 213, 214, 215,
354  216, 217, 218, 219, 220, 221, 222, 223,
355  224, 225, 226, 227, 228, 229, 230, 231,
356  232, 233, 234, 235, 236, 237, 238, 239,
357  240, 241, 242, 243, 244, 245, 246, 247,
358  248, 249, 250, 251, 252, 253, 254, 255,
359  0,
360 };