3 * Copyright (c) 2007 Konstantin Shishkov
5 * This file is part of FFmpeg.
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.
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.
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
22 #ifndef AVCODEC_MPC8HUFF_H
23 #define AVCODEC_MPC8HUFF_H
27 #define MPC8_MAX_VLC_SIZE 256
29 #define MPC8_BANDS_SIZE 33
30 #define MPC8_BANDS_BITS 9
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
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
40 #define MPC8_SCFI0_SIZE 4
41 #define MPC8_SCFI0_BITS 3
43 static const uint8_t mpc8_scfi0_syms[MPC8_SCFI0_SIZE] = {
47 #define MPC8_SCFI1_SIZE 16
48 #define MPC8_SCFI1_BITS 7
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
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 },
59 #define MPC8_DSCF0_SIZE 64
60 #define MPC8_DSCF0_BITS 9
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,
69 #define MPC8_DSCF1_SIZE 65
70 #define MPC8_DSCF1_BITS 9
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,
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 },
84 #define MPC8_RES_SIZE 17
85 #define MPC8_RES_BITS 9
87 static const uint8_t mpc8_res_syms[2][MPC8_RES_SIZE] = {
89 13, 14, 12, 11, 10, 9, 8, 7, 6, 15, 5, 4, 3, 2, 16, 1, 0,
92 8, 9, 10, 11, 7, 12, 6, 13, 5, 4, 14, 3, 15, 2, 0, 1, 16,
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 },
101 #define MPC8_Q1_SIZE 19
102 #define MPC8_Q1_BITS 9
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,
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
112 #define MPC8_Q9UP_SIZE 256
113 #define MPC8_Q9UP_BITS 9
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,
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
140 #define MPC8_Q2_SIZE 125
141 #define MPC8_Q2_BITS 9
143 static const uint8_t mpc8_q2_syms[2][MPC8_Q2_SIZE] = {
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,
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,
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 },
173 #define MPC8_Q3_SIZE 49
174 #define MPC8_Q3_BITS 9
175 #define MPC8_Q3_OFFSET -48
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
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,
187 #define MPC8_Q4_SIZE 81
188 #define MPC8_Q4_BITS 9
189 #define MPC8_Q4_OFFSET -64
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
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,
203 #define MPC8_Q5_SIZE 15
204 #define MPC8_Q5_BITS 7
205 #define MPC8_Q5_OFFSET -7
207 static const uint8_t mpc8_q5_syms[2][MPC8_Q5_SIZE] = {
209 0, 1, 13, 14, 2, 12, 3, 11, 4, 10, 5, 6, 8, 9, 7,
212 0, 1, 13, 14, 2, 12, 3, 4, 10, 11, 5, 6, 7, 8, 9,
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 },
221 #define MPC8_Q6_SIZE 31
222 #define MPC8_Q6_BITS 9
223 #define MPC8_Q6_OFFSET -15
225 static const uint8_t mpc8_q6_syms[2][MPC8_Q6_SIZE] = {
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,
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,
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 },
241 #define MPC8_Q7_SIZE 63
242 #define MPC8_Q7_BITS 9
243 #define MPC8_Q7_OFFSET -31
245 static const uint8_t mpc8_q7_syms[2][MPC8_Q7_SIZE] = {
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,
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,
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 },
265 #define MPC8_Q8_SIZE 127
266 #define MPC8_Q8_BITS 9
267 #define MPC8_Q8_OFFSET -63
269 static const uint8_t mpc8_q8_syms[2][MPC8_Q8_SIZE] = {
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,
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,
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 },
299 #endif /* AVCODEC_MPC8HUFF_H */