comparison mpc.c @ 5868:2cc044ac80d4 libavcodec

Split Musepack decoder into SV7 decoder and synth core (for upcoming SV8 decoder)
author kostya
date Fri, 02 Nov 2007 06:40:42 +0000
parents 2b72f9bc4f06
children f7cbb7733146
comparison
equal deleted inserted replaced
5867:67e62f3367e0 5868:2cc044ac80d4
1 /* 1 /*
2 * Musepack decoder 2 * Musepack decoder core
3 * Copyright (c) 2006 Konstantin Shishkov 3 * Copyright (c) 2006 Konstantin Shishkov
4 * 4 *
5 * This file is part of FFmpeg. 5 * This file is part of FFmpeg.
6 * 6 *
7 * FFmpeg is free software; you can redistribute it and/or 7 * FFmpeg is free software; you can redistribute it and/or
18 * License along with FFmpeg; if not, write to the Free Software 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 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */ 20 */
21 21
22 /** 22 /**
23 * @file mpc.c Musepack decoder 23 * @file mpc.c Musepack decoder core
24 * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples 24 * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
25 * divided into 32 subbands. 25 * divided into 32 subbands.
26 */ 26 */
27 27
28 #include "avcodec.h" 28 #include "avcodec.h"
33 #ifdef CONFIG_MPEGAUDIO_HP 33 #ifdef CONFIG_MPEGAUDIO_HP
34 #define USE_HIGHPRECISION 34 #define USE_HIGHPRECISION
35 #endif 35 #endif
36 #include "mpegaudio.h" 36 #include "mpegaudio.h"
37 37
38 #include "mpc.h"
38 #include "mpcdata.h" 39 #include "mpcdata.h"
39
40 #define BANDS 32
41 #define SAMPLES_PER_BAND 36
42 #define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND)
43
44 static VLC scfi_vlc, dscf_vlc, hdr_vlc, quant_vlc[MPC7_QUANT_VLC_TABLES][2];
45 40
46 static DECLARE_ALIGNED_16(MPA_INT, mpa_window[512]); 41 static DECLARE_ALIGNED_16(MPA_INT, mpa_window[512]);
47 42
48 typedef struct { 43 void ff_mpc_init()
49 DSPContext dsp;
50 int IS, MSS, gapless;
51 int lastframelen, bands;
52 int oldDSCF[2][BANDS];
53 AVRandomState rnd;
54 int frames_to_skip;
55 /* for synthesis */
56 DECLARE_ALIGNED_16(MPA_INT, synth_buf[MPA_MAX_CHANNELS][512*2]);
57 int synth_buf_offset[MPA_MAX_CHANNELS];
58 DECLARE_ALIGNED_16(int32_t, sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]);
59 } MPCContext;
60
61 /** Subband structure - hold all variables for each subband */
62 typedef struct {
63 int msf; ///< mid-stereo flag
64 int res[2];
65 int scfi[2];
66 int scf_idx[2][3];
67 int Q[2];
68 }Band;
69
70 static int mpc7_decode_init(AVCodecContext * avctx)
71 { 44 {
72 int i, j;
73 MPCContext *c = avctx->priv_data;
74 GetBitContext gb;
75 uint8_t buf[16];
76 static int vlc_inited = 0;
77
78 if(avctx->extradata_size < 16){
79 av_log(avctx, AV_LOG_ERROR, "Too small extradata size (%i)!\n", avctx->extradata_size);
80 return -1;
81 }
82 memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
83 av_init_random(0xDEADBEEF, &c->rnd);
84 dsputil_init(&c->dsp, avctx);
85 c->dsp.bswap_buf(buf, avctx->extradata, 4);
86 ff_mpa_synth_init(mpa_window); 45 ff_mpa_synth_init(mpa_window);
87 init_get_bits(&gb, buf, 128);
88
89 c->IS = get_bits1(&gb);
90 c->MSS = get_bits1(&gb);
91 c->bands = get_bits(&gb, 6);
92 if(c->bands >= BANDS){
93 av_log(avctx, AV_LOG_ERROR, "Too many bands: %i\n", c->bands);
94 return -1;
95 }
96 skip_bits(&gb, 88);
97 c->gapless = get_bits1(&gb);
98 c->lastframelen = get_bits(&gb, 11);
99 av_log(avctx, AV_LOG_DEBUG, "IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d\n",
100 c->IS, c->MSS, c->gapless, c->lastframelen, c->bands);
101 c->frames_to_skip = 0;
102
103 if(vlc_inited) return 0;
104 av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
105 if(init_vlc(&scfi_vlc, MPC7_SCFI_BITS, MPC7_SCFI_SIZE,
106 &mpc7_scfi[1], 2, 1,
107 &mpc7_scfi[0], 2, 1, INIT_VLC_USE_STATIC)){
108 av_log(avctx, AV_LOG_ERROR, "Cannot init SCFI VLC\n");
109 return -1;
110 }
111 if(init_vlc(&dscf_vlc, MPC7_DSCF_BITS, MPC7_DSCF_SIZE,
112 &mpc7_dscf[1], 2, 1,
113 &mpc7_dscf[0], 2, 1, INIT_VLC_USE_STATIC)){
114 av_log(avctx, AV_LOG_ERROR, "Cannot init DSCF VLC\n");
115 return -1;
116 }
117 if(init_vlc(&hdr_vlc, MPC7_HDR_BITS, MPC7_HDR_SIZE,
118 &mpc7_hdr[1], 2, 1,
119 &mpc7_hdr[0], 2, 1, INIT_VLC_USE_STATIC)){
120 av_log(avctx, AV_LOG_ERROR, "Cannot init HDR VLC\n");
121 return -1;
122 }
123 for(i = 0; i < MPC7_QUANT_VLC_TABLES; i++){
124 for(j = 0; j < 2; j++){
125 if(init_vlc(&quant_vlc[i][j], 9, mpc7_quant_vlc_sizes[i],
126 &mpc7_quant_vlc[i][j][1], 4, 2,
127 &mpc7_quant_vlc[i][j][0], 4, 2, INIT_VLC_USE_STATIC)){
128 av_log(avctx, AV_LOG_ERROR, "Cannot init QUANT VLC %i,%i\n",i,j);
129 return -1;
130 }
131 }
132 }
133 vlc_inited = 1;
134 return 0;
135 } 46 }
136 47
137 /** 48 /**
138 * Process decoded Musepack data and produce PCM 49 * Process decoded Musepack data and produce PCM
139 * @todo make it available for MPC8 and MPC6
140 */ 50 */
141 static void mpc_synth(MPCContext *c, int16_t *out) 51 static void mpc_synth(MPCContext *c, int16_t *out)
142 { 52 {
143 int dither_state = 0; 53 int dither_state = 0;
144 int i, ch; 54 int i, ch;
156 } 66 }
157 for(i = 0; i < MPC_FRAME_SIZE*2; i++) 67 for(i = 0; i < MPC_FRAME_SIZE*2; i++)
158 *out++=samples[i]; 68 *out++=samples[i];
159 } 69 }
160 70
161 /** 71 void ff_mpc_dequantize_and_synth(MPCContext * c, int maxband, void *data)
162 * Fill samples for given subband
163 */
164 static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *dst)
165 { 72 {
166 int i, i1, t; 73 int i, j, ch;
167 switch(idx){ 74 Band *bands = c->bands;
168 case -1:
169 for(i = 0; i < SAMPLES_PER_BAND; i++){
170 *dst++ = (av_random(&c->rnd) & 0x3FC) - 510;
171 }
172 break;
173 case 1:
174 i1 = get_bits1(gb);
175 for(i = 0; i < SAMPLES_PER_BAND/3; i++){
176 t = get_vlc2(gb, quant_vlc[0][i1].table, 9, 2);
177 *dst++ = mpc_idx30[t];
178 *dst++ = mpc_idx31[t];
179 *dst++ = mpc_idx32[t];
180 }
181 break;
182 case 2:
183 i1 = get_bits1(gb);
184 for(i = 0; i < SAMPLES_PER_BAND/2; i++){
185 t = get_vlc2(gb, quant_vlc[1][i1].table, 9, 2);
186 *dst++ = mpc_idx50[t];
187 *dst++ = mpc_idx51[t];
188 }
189 break;
190 case 3: case 4: case 5: case 6: case 7:
191 i1 = get_bits1(gb);
192 for(i = 0; i < SAMPLES_PER_BAND; i++)
193 *dst++ = get_vlc2(gb, quant_vlc[idx-1][i1].table, 9, 2) - mpc7_quant_vlc_off[idx-1];
194 break;
195 case 8: case 9: case 10: case 11: case 12:
196 case 13: case 14: case 15: case 16: case 17:
197 t = (1 << (idx - 2)) - 1;
198 for(i = 0; i < SAMPLES_PER_BAND; i++)
199 *dst++ = get_bits(gb, idx - 1) - t;
200 break;
201 default: // case 0 and -2..-17
202 return;
203 }
204 }
205
206 static int mpc7_decode_frame(AVCodecContext * avctx,
207 void *data, int *data_size,
208 uint8_t * buf, int buf_size)
209 {
210 MPCContext *c = avctx->priv_data;
211 GetBitContext gb;
212 uint8_t *bits;
213 int i, j, ch, t;
214 int mb = -1;
215 Band bands[BANDS];
216 int Q[2][MPC_FRAME_SIZE];
217 int off; 75 int off;
218 float mul; 76 float mul;
219 int bits_used, bits_avail;
220 77
221 memset(bands, 0, sizeof(bands));
222 if(buf_size <= 4){
223 av_log(avctx, AV_LOG_ERROR, "Too small buffer passed (%i bytes)\n", buf_size);
224 }
225
226 bits = av_malloc(((buf_size - 1) & ~3) + FF_INPUT_BUFFER_PADDING_SIZE);
227 c->dsp.bswap_buf(bits, buf + 4, (buf_size - 4) >> 2);
228 init_get_bits(&gb, bits, (buf_size - 4)* 8);
229 skip_bits(&gb, buf[0]);
230
231 /* read subband indexes */
232 for(i = 0; i <= c->bands; i++){
233 for(ch = 0; ch < 2; ch++){
234 if(i) t = get_vlc2(&gb, hdr_vlc.table, MPC7_HDR_BITS, 1) - 5;
235 if(!i || (t == 4)) bands[i].res[ch] = get_bits(&gb, 4);
236 else bands[i].res[ch] = bands[i-1].res[ch] + t;
237 }
238
239 if(bands[i].res[0] || bands[i].res[1]){
240 mb = i;
241 if(c->MSS) bands[i].msf = get_bits1(&gb);
242 }
243 }
244 /* get scale indexes coding method */
245 for(i = 0; i <= mb; i++)
246 for(ch = 0; ch < 2; ch++)
247 if(bands[i].res[ch]) bands[i].scfi[ch] = get_vlc2(&gb, scfi_vlc.table, MPC7_SCFI_BITS, 1);
248 /* get scale indexes */
249 for(i = 0; i <= mb; i++){
250 for(ch = 0; ch < 2; ch++){
251 if(bands[i].res[ch]){
252 bands[i].scf_idx[ch][2] = c->oldDSCF[ch][i];
253 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
254 bands[i].scf_idx[ch][0] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][2] + t);
255 switch(bands[i].scfi[ch]){
256 case 0:
257 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
258 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
259 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
260 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
261 break;
262 case 1:
263 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
264 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
265 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1];
266 break;
267 case 2:
268 bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];
269 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
270 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
271 break;
272 case 3:
273 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];
274 break;
275 }
276 c->oldDSCF[ch][i] = bands[i].scf_idx[ch][2];
277 }
278 }
279 }
280 /* get quantizers */
281 memset(Q, 0, sizeof(Q));
282 off = 0;
283 for(i = 0; i < BANDS; i++, off += SAMPLES_PER_BAND)
284 for(ch = 0; ch < 2; ch++)
285 idx_to_quant(c, &gb, bands[i].res[ch], Q[ch] + off);
286 /* dequantize */ 78 /* dequantize */
287 memset(c->sb_samples, 0, sizeof(c->sb_samples)); 79 memset(c->sb_samples, 0, sizeof(c->sb_samples));
288 off = 0; 80 off = 0;
289 for(i = 0; i <= mb; i++, off += SAMPLES_PER_BAND){ 81 for(i = 0; i <= maxband; i++, off += SAMPLES_PER_BAND){
290 for(ch = 0; ch < 2; ch++){ 82 for(ch = 0; ch < 2; ch++){
291 if(bands[i].res[ch]){ 83 if(bands[i].res[ch]){
292 j = 0; 84 j = 0;
293 mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][0]]; 85 mul = mpc_CC[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][0]];
294 for(; j < 12; j++) 86 for(; j < 12; j++)
295 c->sb_samples[ch][j][i] = mul * Q[ch][j + off]; 87 c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
296 mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][1]]; 88 mul = mpc_CC[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][1]];
297 for(; j < 24; j++) 89 for(; j < 24; j++)
298 c->sb_samples[ch][j][i] = mul * Q[ch][j + off]; 90 c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
299 mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][2]]; 91 mul = mpc_CC[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][2]];
300 for(; j < 36; j++) 92 for(; j < 36; j++)
301 c->sb_samples[ch][j][i] = mul * Q[ch][j + off]; 93 c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
302 } 94 }
303 } 95 }
304 if(bands[i].msf){ 96 if(bands[i].msf){
305 int t1, t2; 97 int t1, t2;
306 for(j = 0; j < SAMPLES_PER_BAND; j++){ 98 for(j = 0; j < SAMPLES_PER_BAND; j++){
311 } 103 }
312 } 104 }
313 } 105 }
314 106
315 mpc_synth(c, data); 107 mpc_synth(c, data);
316
317 av_free(bits);
318
319 bits_used = get_bits_count(&gb);
320 bits_avail = (buf_size - 4) * 8;
321 if(!buf[1] && ((bits_avail < bits_used) || (bits_used + 32 <= bits_avail))){
322 av_log(NULL,0, "Error decoding frame: used %i of %i bits\n", bits_used, bits_avail);
323 return -1;
324 }
325 if(c->frames_to_skip){
326 c->frames_to_skip--;
327 *data_size = 0;
328 return buf_size;
329 }
330 *data_size = (buf[1] ? c->lastframelen : MPC_FRAME_SIZE) * 4;
331
332 return buf_size;
333 } 108 }
334
335 static void mpc7_decode_flush(AVCodecContext *avctx)
336 {
337 MPCContext *c = avctx->priv_data;
338
339 memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
340 c->frames_to_skip = 32;
341 }
342
343 AVCodec mpc7_decoder = {
344 "mpc sv7",
345 CODEC_TYPE_AUDIO,
346 CODEC_ID_MUSEPACK7,
347 sizeof(MPCContext),
348 mpc7_decode_init,
349 NULL,
350 NULL,
351 mpc7_decode_frame,
352 .flush = mpc7_decode_flush,
353 };