]> git.sesse.net Git - ffmpeg/blob - libavcodec/mpc8huff.h
Merge commit '84c4714f397c9c50eb9d49008cc1c08385f68f31'
[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_BANDS_SIZE 33
28 #define MPC8_BANDS_BITS 9
29
30 static const uint8_t mpc8_bands_codes[MPC8_BANDS_SIZE] = {
31  0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04,
32  0x05, 0x06, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05,
33  0x06, 0x07, 0x08, 0x01, 0x09, 0x0A, 0x0B, 0x07,
34  0x08, 0x09, 0x06, 0x07, 0x05, 0x05, 0x03, 0x03,
35  0x01,
36 };
37 static const int8_t mpc8_bands_bits[MPC8_BANDS_SIZE] = {
38   1,  3,  5,  6,  7,  8,  8,  9,
39  10, 11, 12, 12, 12, 13, 12, 12,
40  12, 12, 12, 13, 12, 12, 12, 11,
41  11, 11, 10, 10,  9,  8,  6,  5,
42   2,
43 };
44
45 #define MPC8_SCFI0_SIZE 4
46 #define MPC8_SCFI0_BITS 3
47
48 static const uint8_t mpc8_scfi0_codes[MPC8_SCFI0_SIZE] = {
49  0x00, 0x01, 0x01, 0x01,
50 };
51 static const int8_t mpc8_scfi0_bits[MPC8_SCFI0_SIZE] = {
52   3,  3,  1,  2,
53 };
54
55 #define MPC8_SCFI1_SIZE 16
56 #define MPC8_SCFI1_BITS 7
57
58 static const uint8_t mpc8_scfi1_codes[MPC8_SCFI1_SIZE] = {
59  0x01, 0x00, 0x02, 0x03, 0x01, 0x03, 0x04, 0x05,
60  0x04, 0x06, 0x02, 0x02, 0x05, 0x07, 0x03, 0x03,
61
62 };
63 static const int8_t mpc8_scfi1_bits[MPC8_SCFI1_SIZE] = {
64   6,  7,  6,  6,  7,  5,  5,  5,
65   6,  5,  2,  3,  6,  5,  3,  2,
66
67 };
68
69 #define MPC8_DSCF0_SIZE 64
70 #define MPC8_DSCF0_BITS 9
71
72 static const uint8_t mpc8_dscf0_codes[MPC8_DSCF0_SIZE] = {
73  0x03, 0x04, 0x05, 0x04, 0x05, 0x06, 0x05, 0x06,
74  0x07, 0x08, 0x09, 0x07, 0x08, 0x09, 0x0A, 0x07,
75  0x08, 0x09, 0x0A, 0x07, 0x08, 0x09, 0x0A, 0x06,
76  0x07, 0x05, 0x04, 0x05, 0x06, 0x06, 0x07, 0x0A,
77  0x08, 0x05, 0x06, 0x07, 0x09, 0x07, 0x08, 0x09,
78  0x0B, 0x0B, 0x0C, 0x0D, 0x0B, 0x0C, 0x0D, 0x0B,
79  0x0C, 0x0D, 0x07, 0x08, 0x09, 0x06, 0x07, 0x03,
80  0x04, 0x05, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
81 };
82 static const int8_t mpc8_dscf0_bits[MPC8_DSCF0_SIZE] = {
83  12, 12, 12, 11, 11, 11, 10, 10,
84  10, 10, 10,  9,  9,  9,  9,  8,
85   8,  8,  8,  7,  7,  7,  7,  6,
86   6,  5,  4,  4,  5,  4,  4, 10,
87   4,  3,  3,  3,  4,  5,  6,  6,
88   7,  8,  8,  8,  9,  9,  9, 10,
89  10, 10, 11, 11, 11, 12, 12, 13,
90  13, 13, 14, 14, 14, 14, 14, 14,
91
92 };
93
94 #define MPC8_DSCF1_SIZE 65
95 #define MPC8_DSCF1_BITS 9
96
97 static const uint8_t mpc8_dscf1_codes[MPC8_DSCF1_SIZE] = {
98  0x00, 0x03, 0x04, 0x04, 0x05, 0x06, 0x05, 0x06,
99  0x07, 0x08, 0x07, 0x08, 0x09, 0x0A, 0x07, 0x08,
100  0x09, 0x0A, 0x07, 0x08, 0x09, 0x06, 0x07, 0x05,
101  0x06, 0x04, 0x03, 0x03, 0x04, 0x03, 0x04, 0x05,
102  0x06, 0x07, 0x05, 0x04, 0x05, 0x05, 0x07, 0x08,
103  0x09, 0x0A, 0x0B, 0x0B, 0x0C, 0x0D, 0x0B, 0x0C,
104  0x0D, 0x09, 0x0A, 0x0B, 0x0C, 0x07, 0x08, 0x09,
105  0x05, 0x06, 0x07, 0x01, 0x02, 0x03, 0x04, 0x05,
106  0x0D,
107 };
108 static const int8_t mpc8_dscf1_bits[MPC8_DSCF1_SIZE] = {
109  15, 14, 14, 13, 13, 13, 12, 12,
110  12, 12, 11, 11, 11, 11, 10, 10,
111  10, 10,  9,  9,  9,  8,  8,  7,
112   7,  6,  5,  4,  4,  3,  3,  3,
113   3,  3,  4,  5,  5,  6,  7,  8,
114   8,  9,  9, 10, 10, 10, 11, 11,
115  11, 12, 12, 12, 12, 13, 13, 13,
116  14, 14, 14, 15, 15, 15, 15, 15,
117  12,
118 };
119
120 #define MPC8_RES_SIZE 17
121 #define MPC8_RES_BITS 9
122
123 static const uint8_t mpc8_res_codes[2][MPC8_RES_SIZE] = {
124   {
125     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
126     0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01,
127     0x01,
128   },
129   {
130     0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
131     0x00, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01,
132     0x03,
133   }
134 };
135 static const int8_t mpc8_res_bits[2][MPC8_RES_SIZE] = {
136   {
137      1,  2,  4,  5,  6,  7,  9, 10,
138     11, 12, 13, 14, 15, 16, 16,  8,
139      3,
140   },
141   {
142      2,  2,  3,  5,  7,  8, 10, 12,
143     14, 14, 14, 14, 11,  9,  6,  4,
144      2,
145   }
146 };
147
148 #define MPC8_Q1_SIZE 19
149 #define MPC8_Q1_BITS 9
150
151 static const uint8_t mpc8_q1_codes[MPC8_Q1_SIZE] = {
152  0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
153  0x03, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01,
154  0x01, 0x00, 0x01,
155 };
156 static const int8_t mpc8_q1_bits[MPC8_Q1_SIZE] = {
157   6,  4,  4,  3,  3,  3,  3,  3,
158   4,  4,  4,  5,  7,  8,  9, 10,
159  11, 12, 12,
160 };
161
162 #define MPC8_Q9UP_SIZE 256
163 #define MPC8_Q9UP_BITS 9
164
165 static const uint8_t mpc8_q9up_codes[MPC8_Q9UP_SIZE] = {
166  0x01, 0x02, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07,
167  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
168  0x10, 0x11, 0x12, 0x26, 0x27, 0x13, 0x14, 0x15,
169  0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
170  0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
171  0x28, 0x26, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
172  0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
173  0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E,
174  0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
175  0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,
176  0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
177  0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
178  0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
179  0x67, 0x68, 0x69, 0x6A, 0x56, 0x57, 0x58, 0x59,
180  0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61,
181  0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x3E,
182  0x3F, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
183  0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
184  0x78, 0x79, 0x7A, 0x6B, 0x7B, 0x6C, 0x6D, 0x6E,
185  0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
186  0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
187  0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86,
188  0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
189  0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
190  0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E,
191  0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
192  0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0x27, 0x28, 0x29,
193  0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31,
194  0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
195  0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41,
196  0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
197  0x4A, 0x4B, 0x06, 0x07, 0x08, 0x09, 0x00, 0x01,
198 };
199 static const int8_t mpc8_q9up_bits[MPC8_Q9UP_SIZE] = {
200  10, 10, 10, 10, 10,  9,  9,  9,
201   9,  9,  9,  9,  9,  9,  9,  9,
202   9,  9,  9,  8,  8,  9,  9,  9,
203   9,  9,  9,  9,  9,  9,  9,  9,
204   9,  9,  9,  9,  9,  9,  9,  9,
205   8,  9,  8,  8,  8,  8,  8,  8,
206   8,  8,  8,  8,  8,  8,  8,  8,
207   8,  8,  8,  8,  8,  8,  8,  8,
208   8,  8,  8,  8,  8,  8,  8,  8,
209   8,  8,  8,  8,  8,  8,  8,  8,
210   8,  8,  8,  8,  8,  8,  8,  8,
211   8,  8,  8,  8,  8,  8,  8,  8,
212   8,  8,  8,  8,  8,  8,  8,  8,
213   8,  8,  8,  8,  7,  7,  7,  7,
214   7,  7,  7,  7,  7,  7,  7,  7,
215   7,  7,  7,  7,  7,  7,  7,  6,
216   6,  7,  7,  7,  7,  7,  7,  7,
217   7,  7,  7,  7,  7,  7,  7,  7,
218   7,  7,  7,  8,  7,  8,  8,  8,
219   8,  8,  8,  8,  8,  8,  8,  8,
220   8,  8,  8,  8,  8,  8,  8,  8,
221   8,  8,  8,  8,  8,  8,  8,  8,
222   8,  8,  8,  8,  8,  8,  8,  8,
223   8,  8,  8,  8,  8,  8,  8,  8,
224   8,  8,  8,  8,  8,  8,  8,  8,
225   8,  8,  8,  8,  8,  8,  8,  8,
226   8,  8,  8,  8,  8,  9,  9,  9,
227   9,  9,  9,  9,  9,  9,  9,  9,
228   9,  9,  9,  9,  9,  9,  9,  9,
229   9,  9,  9,  9,  9,  9,  9,  9,
230   9,  9,  9,  9,  9,  9,  9,  9,
231   9,  9, 10, 10, 10, 10, 11, 11,
232 };
233
234 #define MPC8_Q2_SIZE 125
235 #define MPC8_Q2_BITS 9
236
237 static const uint8_t mpc8_q2_codes[2][MPC8_Q2_SIZE] = {
238 {
239  0x02, 0x03, 0x0F, 0x04, 0x00, 0x05, 0x0C, 0x12,
240  0x0D, 0x06, 0x07, 0x13, 0x15, 0x14, 0x08, 0x09,
241  0x0E, 0x15, 0x0F, 0x0A, 0x03, 0x0B, 0x10, 0x0C,
242  0x01, 0x0D, 0x10, 0x16, 0x11, 0x0E, 0x12, 0x0F,
243  0x10, 0x16, 0x13, 0x17, 0x11, 0x08, 0x12, 0x18,
244  0x14, 0x13, 0x14, 0x17, 0x15, 0x0F, 0x16, 0x19,
245  0x17, 0x10, 0x11, 0x1A, 0x18, 0x1B, 0x12, 0x1C,
246  0x15, 0x09, 0x16, 0x1D, 0x19, 0x0A, 0x07, 0x0B,
247  0x1A, 0x1E, 0x17, 0x0C, 0x18, 0x1F, 0x13, 0x20,
248  0x1B, 0x21, 0x14, 0x11, 0x18, 0x22, 0x19, 0x12,
249  0x1A, 0x19, 0x1A, 0x1B, 0x1B, 0x23, 0x1C, 0x0D,
250  0x1D, 0x24, 0x1C, 0x1C, 0x1E, 0x1F, 0x1D, 0x13,
251  0x1E, 0x25, 0x1F, 0x14, 0x02, 0x15, 0x15, 0x16,
252  0x04, 0x17, 0x20, 0x26, 0x21, 0x18, 0x16, 0x27,
253  0x1D, 0x28, 0x19, 0x1A, 0x22, 0x29, 0x23, 0x1B,
254  0x03, 0x1C, 0x17, 0x1D, 0x05,
255 },
256 {
257  0x02, 0x03, 0x0F, 0x04, 0x00, 0x05, 0x0C, 0x0D,
258  0x0E, 0x06, 0x07, 0x0F, 0x1E, 0x10, 0x10, 0x08,
259  0x11, 0x12, 0x13, 0x09, 0x03, 0x0A, 0x11, 0x0B,
260  0x01, 0x0C, 0x14, 0x15, 0x16, 0x0D, 0x17, 0x12,
261  0x0E, 0x13, 0x18, 0x19, 0x14, 0x0F, 0x10, 0x1A,
262  0x1B, 0x15, 0x11, 0x16, 0x1C, 0x0E, 0x1D, 0x1E,
263  0x1F, 0x0F, 0x12, 0x20, 0x1F, 0x21, 0x13, 0x22,
264  0x12, 0x13, 0x14, 0x23, 0x20, 0x15, 0x0F, 0x16,
265  0x21, 0x24, 0x17, 0x18, 0x19, 0x25, 0x14, 0x26,
266  0x22, 0x27, 0x15, 0x10, 0x28, 0x29, 0x2A, 0x11,
267  0x2B, 0x17, 0x1A, 0x18, 0x2C, 0x2D, 0x1B, 0x1C,
268  0x19, 0x2E, 0x2F, 0x1A, 0x1D, 0x1B, 0x30, 0x12,
269  0x31, 0x32, 0x33, 0x13, 0x02, 0x14, 0x15, 0x16,
270  0x04, 0x17, 0x34, 0x35, 0x36, 0x18, 0x16, 0x37,
271  0x23, 0x38, 0x19, 0x1A, 0x39, 0x3A, 0x3B, 0x1B,
272  0x03, 0x1C, 0x17, 0x1D, 0x05,
273 }
274 };
275 static const int8_t mpc8_q2_bits[2][MPC8_Q2_SIZE] = {
276 {
277  12, 11, 10, 11, 13, 11,  9,  8,
278   9, 11, 11,  8,  7,  8, 11, 11,
279   9,  8,  9, 11, 12, 11, 10, 11,
280  13, 11,  9,  8,  9, 11,  9,  6,
281   6,  7,  9,  8,  6,  4,  6,  8,
282   9,  6,  6,  7,  9, 11,  9,  8,
283   9, 11, 10,  8,  7,  8, 10,  8,
284   6,  4,  6,  8,  7,  4,  3,  4,
285   7,  8,  6,  4,  6,  8, 10,  8,
286   7,  8, 10, 11,  9,  8,  9, 11,
287   9,  6,  6,  6,  9,  8,  6,  4,
288   6,  8,  9,  7,  6,  6,  9, 11,
289   9,  8,  9, 11, 13, 11, 10, 11,
290  12, 11,  9,  8,  9, 11, 10,  8,
291   7,  8, 11, 11,  9,  8,  9, 11,
292  13, 11, 10, 11, 12,
293 },
294 {
295  11, 10,  9, 10, 12, 10,  8,  8,
296   8, 10, 10,  8,  7,  8,  9, 10,
297   8,  8,  8, 10, 11, 10,  9, 10,
298  12, 10,  8,  8,  8, 10,  8,  6,
299   5,  6,  8,  8,  6,  5,  5,  8,
300   8,  6,  5,  6,  8, 10,  8,  8,
301   8, 10,  9,  8,  7,  8,  9,  8,
302   5,  5,  5,  8,  7,  5,  4,  5,
303   7,  8,  5,  5,  5,  8,  9,  8,
304   7,  8,  9, 10,  8,  8,  8, 10,
305   8,  6,  5,  6,  8,  8,  5,  5,
306   6,  8,  8,  6,  5,  6,  8, 10,
307   8,  8,  8, 10, 12, 10, 10, 10,
308  11, 10,  8,  8,  8, 10,  9,  8,
309   7,  8, 10, 10,  8,  8,  8, 10,
310  12, 10,  9, 10, 11,
311 }
312 };
313
314 #define MPC8_Q3_SIZE 49
315 #define MPC8_Q3_BITS 9
316 #define MPC8_Q3_OFFSET -48
317
318 static const uint8_t mpc8_q3_codes[MPC8_Q3_SIZE] = {
319  0x07, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x0F,
320  0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x13, 0x12, 0x11,
321  0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09,
322  0x11, 0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A,
323  0x09, 0x08, 0x07, 0x06, 0x05, 0x09, 0x08, 0x07,
324  0x06, 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x01,
325  0x00,
326 };
327 static const int8_t mpc8_q3_bits[MPC8_Q3_SIZE] = {
328   3,  4,  4,  4,  4,  4,  4,  5,
329   5,  5,  5,  5,  5,  6,  6,  6,
330   6,  6,  6,  6,  6,  6,  6,  6,
331   7,  7,  7,  7,  7,  7,  7,  7,
332   7,  7,  7,  7,  7,  8,  8,  8,
333   8,  8,  8,  8,  8,  9,  9,  9,
334   9,
335 };
336 static const int8_t mpc8_q3_syms[MPC8_Q3_SIZE] = {
337    48,    65,    64,    49,    63,    32,    47,    80,
338    79,    50,    62,    33,    16,    82,    81,    95,
339    94,    66,    78,    34,    46,    17,    31,    30,
340    97,    96,   111,    67,    77,    51,    61,    35,
341    45,    18,     1,     0,    15,    98,   110,    83,
342    93,    19,    29,     2,    14,    99,   109,     3,
343    13,
344 };
345
346 #define MPC8_Q4_SIZE 81
347 #define MPC8_Q4_BITS 9
348 #define MPC8_Q4_OFFSET -64
349
350 static const uint8_t mpc8_q4_codes[MPC8_Q4_SIZE] = {
351  0x0F, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17,
352  0x16, 0x15, 0x14, 0x13, 0x12, 0x23, 0x22, 0x21,
353  0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19,
354  0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11,
355  0x10, 0x0F, 0x0E, 0x0D, 0x19, 0x18, 0x17, 0x16,
356  0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0F, 0x0E,
357  0x0D, 0x0C, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12,
358  0x11, 0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A,
359  0x09, 0x08, 0x07, 0x06, 0x05, 0x09, 0x08, 0x07,
360  0x06, 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x01,
361  0x00,
362 };
363 static const int8_t mpc8_q4_bits[MPC8_Q4_SIZE] = {
364   4,  5,  5,  5,  5,  5,  5,  5,
365   5,  5,  5,  5,  5,  6,  6,  6,
366   6,  6,  6,  6,  6,  6,  6,  6,
367   6,  6,  6,  6,  6,  6,  6,  6,
368   6,  6,  6,  6,  7,  7,  7,  7,
369   7,  7,  7,  7,  7,  7,  7,  7,
370   7,  7,  8,  8,  8,  8,  8,  8,
371   8,  8,  8,  8,  8,  8,  8,  8,
372   8,  8,  8,  8,  8,  9,  9,  9,
373   9,  9,  9,  9,  9, 10, 10, 10,
374  10,
375 };
376 static const int8_t mpc8_q4_syms[MPC8_Q4_SIZE] = {
377    64,    96,    81,    80,    95,    66,    65,    79,
378    78,    49,    48,    63,    32,   113,   112,    98,
379    97,   111,   110,    83,    82,    94,    93,    67,
380    77,    51,    50,    62,    61,    34,    33,    47,
381    46,    17,    16,    31,   128,   114,   127,   126,
382    99,   109,    68,    76,    35,    45,    18,    30,
383     0,    15,   130,   129,   143,   142,   115,   125,
384   100,   108,    84,    92,    52,    60,    36,    44,
385    19,    29,     2,     1,    14,   131,   141,   116,
386   124,    20,    28,     3,    13,   132,   140,     4,
387    12,
388 };
389
390 #define MPC8_Q5_SIZE 15
391 #define MPC8_Q5_BITS 7
392 #define MPC8_Q5_OFFSET -7
393
394 static const uint8_t mpc8_q5_codes[2][MPC8_Q5_SIZE] = {
395 {
396  0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
397  0x04, 0x05, 0x03, 0x03, 0x03, 0x02, 0x03,
398 },
399 {
400  0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05,
401  0x06, 0x07, 0x04, 0x05, 0x03, 0x02, 0x03,
402 }
403 };
404 static const int8_t mpc8_q5_bits[2][MPC8_Q5_SIZE] = {
405 {
406   7,  7,  6,  5,  4,  3,  3,  2,
407   3,  3,  4,  5,  6,  7,  7,
408 },
409 {
410   6,  6,  5,  4,  4,  3,  3,  3,
411   3,  3,  4,  4,  5,  6,  6,
412 }
413 };
414
415 #define MPC8_Q6_SIZE 31
416 #define MPC8_Q6_BITS 9
417 #define MPC8_Q6_OFFSET -15
418
419 static const uint8_t mpc8_q6_codes[2][MPC8_Q6_SIZE] = {
420 {
421  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x04, 0x03,
422  0x04, 0x05, 0x05, 0x06, 0x04, 0x05, 0x04, 0x03,
423  0x05, 0x06, 0x07, 0x07, 0x06, 0x07, 0x08, 0x09,
424  0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07,
425 },
426 {
427  0x00, 0x01, 0x02, 0x03, 0x04, 0x04, 0x05, 0x04,
428  0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
429  0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x07, 0x08, 0x09,
430  0x06, 0x07, 0x05, 0x06, 0x07, 0x02, 0x03,
431 }
432 };
433 static const int8_t mpc8_q6_bits[2][MPC8_Q6_SIZE] = {
434 {
435   9,  9,  9,  9,  8,  8,  7,  6,
436   6,  6,  5,  5,  4,  4,  3,  2,
437   3,  4,  4,  5,  6,  6,  6,  6,
438   7,  8,  8,  9,  9,  9,  9,
439 },
440 {
441   8,  8,  7,  7,  7,  6,  6,  5,
442   5,  5,  4,  4,  4,  4,  4,  4,
443   4,  4,  4,  4,  4,  5,  5,  5,
444   6,  6,  7,  7,  7,  8,  8,
445 }
446 };
447
448 #define MPC8_Q7_SIZE 63
449 #define MPC8_Q7_BITS 9
450 #define MPC8_Q7_OFFSET -31
451
452 static const uint8_t mpc8_q7_codes[2][MPC8_Q7_SIZE] = {
453 {
454  0x00, 0x01, 0x02, 0x08, 0x09, 0x03, 0x04, 0x05,
455  0x06, 0x07, 0x0A, 0x0B, 0x0C, 0x0D, 0x0A, 0x0B,
456  0x0C, 0x0D, 0x0E, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
457  0x0A, 0x0B, 0x0C, 0x08, 0x09, 0x06, 0x04, 0x03,
458  0x05, 0x07, 0x0A, 0x0B, 0x0D, 0x0E, 0x0F, 0x0F,
459  0x10, 0x11, 0x12, 0x0F, 0x13, 0x10, 0x11, 0x12,
460  0x13, 0x0E, 0x0F, 0x10, 0x11, 0x08, 0x09, 0x0A,
461  0x0B, 0x0C, 0x12, 0x13, 0x0D, 0x0E, 0x0F,
462 },
463 {
464  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
465  0x08, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x09, 0x0A,
466  0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x0C, 0x0D,
467  0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
468  0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
469  0x1E, 0x1F, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
470  0x17, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x09, 0x0A,
471  0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x02, 0x03,
472 }
473 };
474 static const int8_t mpc8_q7_bits[2][MPC8_Q7_SIZE] = {
475 {
476  10, 10, 10,  9,  9, 10, 10, 10,
477  10, 10,  9,  9,  9,  9,  8,  8,
478   8,  8,  8,  7,  7,  7,  7,  7,
479   6,  6,  6,  5,  5,  4,  3,  2,
480   3,  4,  5,  5,  6,  6,  6,  7,
481   7,  7,  7,  8,  7,  8,  8,  8,
482   8,  9,  9,  9,  9, 10, 10, 10,
483  10, 10,  9,  9, 10, 10, 10,
484 },
485 {
486   9,  9,  8,  8,  8,  8,  8,  8,
487   8,  7,  7,  7,  7,  7,  6,  6,
488   6,  6,  6,  6,  6,  6,  5,  5,
489   5,  5,  5,  5,  5,  5,  5,  5,
490   5,  5,  5,  5,  5,  5,  5,  5,
491   5,  5,  6,  6,  6,  6,  6,  6,
492   6,  7,  7,  7,  7,  7,  8,  8,
493   8,  8,  8,  8,  8,  9,  9,
494 }
495 };
496
497 #define MPC8_Q8_SIZE 127
498 #define MPC8_Q8_BITS 9
499 #define MPC8_Q8_OFFSET -63
500
501 static const uint8_t mpc8_q8_codes[2][MPC8_Q8_SIZE] = {
502 {
503  0x03, 0x04, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1A,
504  0x0F, 0x1B, 0x10, 0x00, 0x01, 0x05, 0x06, 0x07,
505  0x08, 0x09, 0x0A, 0x0B, 0x11, 0x0C, 0x12, 0x13,
506  0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1C, 0x1A,
507  0x1B, 0x1C, 0x1D, 0x1E, 0x1D, 0x1E, 0x1F, 0x20,
508  0x21, 0x22, 0x23, 0x24, 0x19, 0x25, 0x1A, 0x1B,
509  0x1C, 0x1D, 0x1E, 0x1F, 0x14, 0x15, 0x16, 0x17,
510  0x0E, 0x0F, 0x10, 0x11, 0x0B, 0x07, 0x04, 0x03,
511  0x05, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x18,
512  0x19, 0x1A, 0x1B, 0x20, 0x21, 0x22, 0x23, 0x24,
513  0x25, 0x26, 0x27, 0x26, 0x27, 0x28, 0x29, 0x2A,
514  0x2B, 0x2C, 0x2D, 0x2E, 0x1F, 0x20, 0x2F, 0x21,
515  0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
516  0x0D, 0x0E, 0x2A, 0x0F, 0x10, 0x11, 0x12, 0x02,
517  0x13, 0x03, 0x04, 0x05, 0x2B, 0x2C, 0x30, 0x31,
518  0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
519 },
520 {
521  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
522  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
523  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x15, 0x16,
524  0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,
525  0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
526  0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
527  0x2F, 0x30, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
528  0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
529  0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
530  0x3C, 0x3D, 0x3E, 0x31, 0x3F, 0x32, 0x33, 0x34,
531  0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
532  0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,
533  0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x16,
534  0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,
535  0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
536  0x27, 0x28, 0x29, 0x04, 0x05, 0x06, 0x07,
537 }
538 };
539 static const int8_t mpc8_q8_bits[2][MPC8_Q8_SIZE] = {
540 {
541  11, 11, 10, 10, 10, 10, 10,  9,
542  10,  9, 10, 12, 12, 11, 11, 11,
543  11, 11, 11, 11, 10, 11, 10, 10,
544  10, 10, 10, 10, 10, 10,  9, 10,
545  10, 10, 10, 10,  9,  9,  9,  9,
546   9,  9,  9,  9,  8,  9,  8,  8,
547   8,  8,  8,  8,  7,  7,  7,  7,
548   6,  6,  6,  6,  5,  4,  3,  2,
549   3,  5,  5,  6,  6,  6,  6,  7,
550   7,  7,  7,  8,  8,  8,  8,  8,
551   8,  8,  8,  9,  9,  9,  9,  9,
552   9,  9,  9,  9, 10, 10,  9, 10,
553  10, 10, 10, 10, 10, 10, 10, 10,
554  11, 11, 10, 11, 11, 11, 11, 12,
555  11, 12, 12, 12, 10, 10,  9,  9,
556  10, 10, 10, 10, 10, 10, 10,
557 },
558 {
559   9,  9,  9,  9,  8,  8,  8,  8,
560   8,  8,  8,  8,  8,  8,  8,  8,
561   8,  8,  8,  8,  8,  8,  7,  7,
562   7,  7,  7,  7,  7,  7,  7,  7,
563   7,  7,  7,  7,  7,  7,  7,  7,
564   7,  7,  7,  7,  7,  7,  7,  7,
565   7,  7,  6,  6,  6,  6,  6,  6,
566   6,  6,  6,  6,  6,  6,  6,  6,
567   6,  6,  6,  6,  6,  6,  6,  6,
568   6,  6,  6,  7,  6,  7,  7,  7,
569   7,  7,  7,  7,  7,  7,  7,  7,
570   7,  7,  7,  7,  7,  7,  7,  7,
571   7,  7,  7,  7,  7,  7,  7,  8,
572   8,  8,  8,  8,  8,  8,  8,  8,
573   8,  8,  8,  8,  8,  8,  8,  8,
574   8,  8,  8,  9,  9,  9,  9,
575 }
576 };
577
578 #endif /* AVCODEC_MPC8HUFF_H */