Imported Debian version 2.4.3~trusty1
[deb_ffmpeg.git] / ffmpeg / libavcodec / dvdata.c
CommitLineData
2ba45a60
DM
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 */
33const 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) */
45const 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
70const uint8_t ff_dv_quant_offset[4] = { 6, 3, 0, 1 };
71
72const 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};
82const 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 */
96const 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};
106const 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};
116const 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};
126const 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 */
142const 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
197const uint8_t ff_dv_vlc_len[NB_DV_VLC] = {
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
252const uint8_t ff_dv_vlc_run[NB_DV_VLC] = {
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
307const uint8_t ff_dv_vlc_level[NB_DV_VLC] = {
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};