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