]> git.sesse.net Git - ffmpeg/blob - libavcodec/mpc8huff.h
avcodec/mpc8: Reduce the size of the length tables to initialize VLCs
[ffmpeg] / libavcodec / mpc8huff.h
1 /*
2  * Musepack SV8 decoder
3  * Copyright (c) 2007 Konstantin Shishkov
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 #ifndef AVCODEC_MPC8HUFF_H
23 #define AVCODEC_MPC8HUFF_H
24
25 #include <stdint.h>
26
27 #define MPC8_MAX_VLC_SIZE 256
28
29 #define MPC8_BANDS_SIZE 33
30 #define MPC8_BANDS_BITS 9
31
32 static const uint8_t mpc8_bands_syms[MPC8_BANDS_SIZE] = {
33     13, 19, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22,  9, 23, 24, 25,  8, 26,
34     27,  7, 28,  5,  6, 29,  4,  3, 30,  2, 31,  1, 32,  0
35 };
36 static const uint8_t mpc8_bands_len_counts[16] = {
37     1,  1,  1,  0,  2,  2,  1,  3,  2,  3,  4, 11,  2,  0,  0,  0
38 };
39
40 #define MPC8_SCFI0_SIZE 4
41 #define MPC8_SCFI0_BITS 3
42
43 static const uint8_t mpc8_scfi0_syms[MPC8_SCFI0_SIZE] = {
44      0,  1,  3,  2
45 };
46
47 #define MPC8_SCFI1_SIZE 16
48 #define MPC8_SCFI1_BITS 7
49
50 static const uint8_t mpc8_scfi1_syms[MPC8_SCFI1_SIZE] = {
51      1,  4,  0,  2,  3,  8, 12,  5,  6,  7,  9, 13, 11, 14, 10, 15
52 };
53
54 static const uint8_t mpc8_scfi_len_counts[2][16] = {
55     {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0  },
56     {  0,  2,  2,  0,  5,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0  },
57 };
58
59 #define MPC8_DSCF0_SIZE 64
60 #define MPC8_DSCF0_BITS 9
61
62 static const uint8_t mpc8_dscf0_syms[MPC8_DSCF0_SIZE] = {
63     58, 59, 60, 61, 62, 63, 55, 56, 57,  0,  1,  2, 53, 54,  3,  4,  5, 50, 51,
64     52,  6,  7,  8,  9, 10, 31, 47, 48, 49, 11, 12, 13, 14, 44, 45, 46, 15, 16,
65     17, 18, 41, 42, 43, 19, 20, 21, 22, 40, 23, 24, 38, 39, 25, 28, 37, 26, 27,
66     29, 30, 32, 36, 33, 34, 35,
67 };
68
69 #define MPC8_DSCF1_SIZE 65
70 #define MPC8_DSCF1_BITS 9
71
72 static const uint8_t mpc8_dscf1_syms[MPC8_DSCF1_SIZE] = {
73      0, 59, 60, 61, 62, 63,  1,  2, 56, 57, 58,  3,  4,  5, 53, 54, 55,  6,  7,
74      8,  9, 49, 50, 51, 52, 64, 10, 11, 12, 13, 46, 47, 48, 14, 15, 16, 17, 43,
75     44, 45, 18, 19, 20, 41, 42, 21, 22, 39, 40, 23, 24, 38, 25, 37, 26, 35, 36,
76     27, 28, 34, 29, 30, 31, 32, 33,
77 };
78
79 static const uint8_t mpc8_dscf_len_counts[2][16] = {
80     {  0,  0,  3,  6,  3,  4,  5,  7,  7,  9,  6,  5,  3,  6,  0,  0  },
81     {  0,  0,  5,  3,  3,  2,  3,  4,  5,  7,  7,  9,  6,  5,  6,  0  },
82 };
83
84 #define MPC8_RES_SIZE 17
85 #define MPC8_RES_BITS 9
86
87 static const uint8_t mpc8_res_syms[2][MPC8_RES_SIZE] = {
88   {
89     13, 14, 12, 11, 10,  9,  8,  7,  6, 15,  5,  4,  3,  2, 16,  1,  0,
90   },
91   {
92      8,  9, 10, 11,  7, 12,  6, 13,  5,  4, 14,  3, 15,  2,  0,  1, 16,
93   }
94 };
95
96 static const uint8_t mpc8_res_len_counts[2][16] = {
97     {  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2  },
98     {  0,  3,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  4,  0,  0  },
99 };
100
101 #define MPC8_Q1_SIZE 19
102 #define MPC8_Q1_BITS 9
103
104 static const uint8_t mpc8_q1_syms[MPC8_Q1_SIZE] = {
105      17, 18, 16, 15, 14, 13, 12,  0, 11,  1,  2,  8,  9, 10,  3,  4,  5,  6,  7,
106 };
107
108 static const uint8_t mpc8_q1_len_counts[16] = {
109     0,  0,  5,  5,  1,  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0
110 };
111
112 #define MPC8_Q9UP_SIZE 256
113 #define MPC8_Q9UP_BITS 9
114
115 static const uint8_t mpc8_q9up_syms[MPC8_Q9UP_SIZE] = {
116     254, 255,   0,   1,   2,   3,   4, 250, 251, 252, 253,   5,   6,   7,   8,
117       9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  21,  22,  23,  24,  25,
118      26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  41,
119     213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
120     228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
121     243, 244, 245, 246, 247, 248, 249,  19,  20,  40,  42,  43,  44,  45,  46,
122      47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
123      62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,
124      77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
125      92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102, 103, 104, 105, 106,
126     107, 147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
127     162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
128     177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
129     192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
130     207, 208, 209, 210, 211, 212, 108, 109, 110, 111, 112, 113, 114, 115, 116,
131     117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 129, 130, 131, 132, 133,
132     134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 148, 127,
133     128,
134 };
135
136 static const uint8_t mpc8_q9up_len_counts[16] = {
137     0,  0,  0,  0,  0,  2, 38, 134, 71,  9,  2,  0,  0,  0,  0,  0
138 };
139
140 #define MPC8_Q2_SIZE 125
141 #define MPC8_Q2_BITS 9
142
143 static const uint8_t mpc8_q2_syms[2][MPC8_Q2_SIZE] = {
144 {
145       4,  24, 100, 120,   0,  20, 104, 124,   1,   3,   5,   9,  10,  14,  15,
146      19,  21,  23,  25,  29,  45,  49,  75,  79,  95,  99, 101, 103, 105, 109,
147     114, 115, 119, 121, 123,   2,  22,  50,  54,  70,  74, 102, 110, 122,   6,
148       8,  16,  18,  26,  28,  30,  34,  40,  44,  46,  48,  76,  78,  80,  84,
149      90,  94,  96,  98, 106, 108, 116, 118,   7,  11,  13,  17,  27,  35,  39,
150      47,  51,  53,  55,  59,  65,  69,  71,  73,  77,  85,  89,  97, 107, 111,
151     113, 117,  12,  33,  43,  52,  60,  64,  72,  91, 112,  31,  32,  36,  38,
152      41,  42,  56,  58,  66,  68,  81,  82,  83,  86,  88,  92,  93,  37,  57,
153      61,  63,  67,  87,  62,
154 },
155 {
156       4,  24, 100, 120,   0,  20, 104, 124,   1,   3,   5,   9,  10,  15,  19,
157      21,  23,  25,  29,  45,  49,  75,  79,  95,  99, 101, 102, 103, 105, 109,
158     114, 115, 119, 121, 123,   2,  14,  22,  50,  54,  70,  74, 110, 122,   6,
159       7,   8,  11,  13,  16,  17,  18,  26,  27,  28,  30,  34,  35,  39,  40,
160      44,  46,  47,  48,  51,  53,  55,  59,  65,  69,  71,  73,  76,  77,  78,
161      80,  84,  85,  89,  90,  94,  96,  97,  98, 106, 107, 108, 111, 113, 116,
162     117, 118,  12,  52,  60,  64,  72, 112,  31,  33,  36,  41,  43,  81,  83,
163      88,  91,  93,  32,  37,  38,  42,  56,  57,  58,  61,  63,  66,  67,  68,
164      82,  86,  87,  92,  62,
165 }
166 };
167
168 static const uint8_t mpc8_q2_len_counts[2][16] = {
169     {  0,  0,  1,  6,  0, 17,  9, 24, 24,  9, 27,  4,  4,  0,  0,  0  },
170     {  0,  0,  0,  1, 16, 10,  6, 48,  9, 27,  4,  4,  0,  0,  0,  0  },
171 };
172
173 #define MPC8_Q3_SIZE 49
174 #define MPC8_Q3_BITS 9
175 #define MPC8_Q3_OFFSET -48
176
177 static const uint8_t mpc8_q3_len_counts[16] = {
178     0,  0,  1,  6,  6, 11, 13,  8,  4,  0,  0,  0,  0,  0,  0,  0
179 };
180 static const uint8_t mpc8_q3_syms[MPC8_Q3_SIZE] = {
181      13,   3, 109,  99,  14,   2,  29,  19,  93,  83, 110,  98,  15,   0,   1,
182      18,  45,  35,  61,  51,  77,  67, 111,  96,  97,  30,  31,  17,  46,  34,
183      78,  66,  94,  95,  81,  82,  16,  33,  62,  50,  79,  80,  47,  32,  63,
184      49,  64,  65,  48,
185 };
186
187 #define MPC8_Q4_SIZE 81
188 #define MPC8_Q4_BITS 9
189 #define MPC8_Q4_OFFSET -64
190
191 static const uint8_t mpc8_q4_len_counts[16] = {
192     0,  0,  0,  1, 12, 23, 14, 19,  8,  4,  0,  0,  0,  0,  0,  0
193 };
194 static const uint8_t mpc8_q4_syms[MPC8_Q4_SIZE] = {
195      12,   4, 140, 132,  13,   3,  28,  20, 124, 116, 141, 131,  14,   1,   2,
196      29,  19,  44,  36,  60,  52,  92,  84, 108, 100, 125, 115, 142, 143, 129,
197     130,  15,   0,  30,  18,  45,  35,  76,  68, 109,  99, 126, 127, 114, 128,
198      31,  16,  17,  46,  47,  33,  34,  61,  62,  50,  51,  77,  67,  93,  94,
199      82,  83, 110, 111,  97,  98, 112, 113,  32,  63,  48,  49,  78,  79,  65,
200      66,  95,  80,  81,  96,  64,
201 };
202
203 #define MPC8_Q5_SIZE 15
204 #define MPC8_Q5_BITS 7
205 #define MPC8_Q5_OFFSET -7
206
207 static const uint8_t mpc8_q5_syms[2][MPC8_Q5_SIZE] = {
208 {
209      0,  1, 13, 14,  2, 12,  3, 11,  4, 10,  5,  6,  8,  9,  7,
210 },
211 {
212      0,  1, 13, 14,  2, 12,  3,  4, 10, 11,  5,  6,  7,  8,  9,
213 }
214 };
215
216 static const uint8_t mpc8_q5_len_counts[2][16] = {
217     {  0,  1,  4,  2,  2,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0  },
218     {  0,  0,  5,  4,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0  },
219 };
220
221 #define MPC8_Q6_SIZE 31
222 #define MPC8_Q6_BITS 9
223 #define MPC8_Q6_OFFSET -15
224
225 static const uint8_t mpc8_q6_syms[2][MPC8_Q6_SIZE] = {
226 {
227       0,  1,  2,  3, 27, 28, 29, 30,  4,  5, 25, 26,  6, 24,  7,  8,  9, 20, 21,
228      22, 23, 10, 11, 19, 12, 13, 17, 18, 14, 16, 15,
229 },
230 {
231       0,  1, 29, 30,  2,  3,  4, 26, 27, 28,  5,  6, 24, 25,  7,  8,  9, 21, 22,
232      23, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
233 }
234 };
235
236 static const uint8_t mpc8_q6_len_counts[2][16] = {
237     {  0,  1,  2,  4,  3,  7,  2,  4,  8,  0,  0,  0,  0,  0,  0,  0  },
238     {  0,  0,  0, 11,  6,  4,  6,  4,  0,  0,  0,  0,  0,  0,  0,  0  },
239 };
240
241 #define MPC8_Q7_SIZE 63
242 #define MPC8_Q7_BITS 9
243 #define MPC8_Q7_OFFSET -31
244
245 static const uint8_t mpc8_q7_syms[2][MPC8_Q7_SIZE] = {
246 {
247       0,  1,  2,  5,  6,  7,  8,  9, 53, 54, 55, 56, 57, 60, 61, 62,  3,  4, 10,
248      11, 12, 13, 49, 50, 51, 52, 58, 59, 14, 15, 16, 17, 18, 43, 45, 46, 47, 48,
249      19, 20, 21, 22, 23, 39, 40, 41, 42, 44, 24, 25, 26, 36, 37, 38, 27, 28, 34,
250      35, 29, 33, 30, 32, 31,
251 },
252 {
253       0,  1, 61, 62,  2,  3,  4,  5,  6,  7,  8, 54, 55, 56, 57, 58, 59, 60,  9,
254      10, 11, 12, 13, 49, 50, 51, 52, 53, 14, 15, 16, 17, 18, 19, 20, 21, 42, 43,
255      44, 45, 46, 47, 48, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
256      36, 37, 38, 39, 40, 41,
257 }
258 };
259
260 static const uint8_t mpc8_q7_len_counts[2][MPC8_Q7_SIZE] = {
261     {  0,  1,  2,  2,  4,  6, 10, 10, 12, 16,  0,  0,  0,  0,  0,  0  },
262     {  0,  0,  0,  0, 20, 15, 10, 14,  4,  0,  0,  0,  0,  0,  0,  0  },
263 };
264
265 #define MPC8_Q8_SIZE 127
266 #define MPC8_Q8_BITS 9
267 #define MPC8_Q8_OFFSET -63
268
269 static const uint8_t mpc8_q8_syms[2][MPC8_Q8_SIZE] = {
270 {
271      11,  12, 111, 113, 114, 115,   0,   1,  13,  14,  15,  16,  17,  18,  19,
272      21, 104, 105, 107, 108, 109, 110, 112,   2,   3,   4,   5,   6,   8,  10,
273      20,  22,  23,  24,  25,  26,  27,  28,  29,  31,  32,  33,  34,  35,  92,
274      93,  95,  96,  97,  98,  99, 100, 101, 102, 103, 106, 116, 117, 120, 121,
275     122, 123, 124, 125, 126,   7,   9,  30,  36,  37,  38,  39,  40,  41,  42,
276      43,  45,  83,  84,  85,  86,  87,  88,  89,  90,  91,  94, 118, 119,  44,
277      46,  47,  48,  49,  50,  51,  75,  76,  77,  78,  79,  80,  81,  82,  52,
278      53,  54,  55,  71,  72,  73,  74,  56,  57,  58,  59,  67,  68,  69,  70,
279      60,  65,  66,  61,  62,  64,  63,
280 },
281 {
282       0,   1,   2,   3, 123, 124, 125, 126,   4,   5,   6,   7,   8,   9,  10,
283      11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21, 103, 104, 105, 106,
284     107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
285     122,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35,
286      36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  75,
287      77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
288      92,  93,  94,  95,  96,  97,  98,  99, 100, 101, 102,  50,  51,  52,  53,
289      54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,
290      69,  70,  71,  72,  73,  74,  76,
291 }
292 };
293
294 static const uint8_t mpc8_q8_len_counts[2][16] = {
295     {  0,  1,  2,  1,  3,  8,  8, 15, 24, 42, 17,  6,  0,  0,  0,  0  },
296     {  0,  0,  0,  0,  0, 26, 55, 38,  8,  0,  0,  0,  0,  0,  0,  0  },
297 };
298
299 #endif /* AVCODEC_MPC8HUFF_H */