hevc: move restore_tqb where it should be.
[ffmpeg.git] / libavcodec / dvdata.c
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 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
197 const 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
252 const 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
307 const 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 };