37
36
#include "mpegaudio.h"
39
39
#include "mpcdata.h"
42
#define SAMPLES_PER_BAND 36
43
#define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND)
45
static VLC scfi_vlc, dscf_vlc, hdr_vlc, quant_vlc[MPC7_QUANT_VLC_TABLES][2];
47
41
static DECLARE_ALIGNED_16(MPA_INT, mpa_window[512]);
52
int lastframelen, bands;
53
int oldDSCF[2][BANDS];
57
DECLARE_ALIGNED_16(MPA_INT, synth_buf[MPA_MAX_CHANNELS][512*2]);
58
int synth_buf_offset[MPA_MAX_CHANNELS];
59
DECLARE_ALIGNED_16(int32_t, sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]);
62
/** Subband structure - hold all variables for each subband */
64
int msf; ///< mid-stereo flag
71
static int mpc7_decode_init(AVCodecContext * avctx)
74
MPCContext *c = avctx->priv_data;
77
float f1=1.20050805774840750476 * 256;
78
static int vlc_inited = 0;
80
if(avctx->extradata_size < 16){
81
av_log(avctx, AV_LOG_ERROR, "Too small extradata size (%i)!\n", avctx->extradata_size);
84
memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
85
av_init_random(0xDEADBEEF, &c->rnd);
86
dsputil_init(&c->dsp, avctx);
87
c->dsp.bswap_buf(buf, avctx->extradata, 4);
88
45
ff_mpa_synth_init(mpa_window);
89
init_get_bits(&gb, buf, 128);
91
c->IS = get_bits1(&gb);
92
c->MSS = get_bits1(&gb);
93
c->bands = get_bits(&gb, 6);
94
if(c->bands >= BANDS){
95
av_log(avctx, AV_LOG_ERROR, "Too many bands: %i\n", c->bands);
99
c->gapless = get_bits1(&gb);
100
c->lastframelen = get_bits(&gb, 11);
101
av_log(avctx, AV_LOG_DEBUG, "IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d\n",
102
c->IS, c->MSS, c->gapless, c->lastframelen, c->bands);
103
c->frames_to_skip = 0;
105
if(vlc_inited) return 0;
106
av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
107
if(init_vlc(&scfi_vlc, MPC7_SCFI_BITS, MPC7_SCFI_SIZE,
109
&mpc7_scfi[0], 2, 1, INIT_VLC_USE_STATIC)){
110
av_log(avctx, AV_LOG_ERROR, "Cannot init SCFI VLC\n");
113
if(init_vlc(&dscf_vlc, MPC7_DSCF_BITS, MPC7_DSCF_SIZE,
115
&mpc7_dscf[0], 2, 1, INIT_VLC_USE_STATIC)){
116
av_log(avctx, AV_LOG_ERROR, "Cannot init DSCF VLC\n");
119
if(init_vlc(&hdr_vlc, MPC7_HDR_BITS, MPC7_HDR_SIZE,
121
&mpc7_hdr[0], 2, 1, INIT_VLC_USE_STATIC)){
122
av_log(avctx, AV_LOG_ERROR, "Cannot init HDR VLC\n");
125
for(i = 0; i < MPC7_QUANT_VLC_TABLES; i++){
126
for(j = 0; j < 2; j++){
127
if(init_vlc(&quant_vlc[i][j], 9, mpc7_quant_vlc_sizes[i],
128
&mpc7_quant_vlc[i][j][1], 4, 2,
129
&mpc7_quant_vlc[i][j][0], 4, 2, INIT_VLC_USE_STATIC)){
130
av_log(avctx, AV_LOG_ERROR, "Cannot init QUANT VLC %i,%i\n",i,j);
140
49
* Process decoded Musepack data and produce PCM
141
* @todo make it available for MPC8 and MPC6
143
51
static void mpc_synth(MPCContext *c, int16_t *out)
160
68
*out++=samples[i];
164
* Fill samples for given subband
166
static void inline idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *dst)
171
for(i = 0; i < SAMPLES_PER_BAND; i++){
172
*dst++ = (av_random(&c->rnd) & 0x3FC) - 510;
177
for(i = 0; i < SAMPLES_PER_BAND/3; i++){
178
t = get_vlc2(gb, quant_vlc[0][i1].table, 9, 2);
179
*dst++ = mpc_idx30[t];
180
*dst++ = mpc_idx31[t];
181
*dst++ = mpc_idx32[t];
186
for(i = 0; i < SAMPLES_PER_BAND/2; i++){
187
t = get_vlc2(gb, quant_vlc[1][i1].table, 9, 2);
188
*dst++ = mpc_idx50[t];
189
*dst++ = mpc_idx51[t];
192
case 3: case 4: case 5: case 6: case 7:
194
for(i = 0; i < SAMPLES_PER_BAND; i++)
195
*dst++ = get_vlc2(gb, quant_vlc[idx-1][i1].table, 9, 2) - mpc7_quant_vlc_off[idx-1];
197
case 8: case 9: case 10: case 11: case 12:
198
case 13: case 14: case 15: case 16: case 17:
199
t = (1 << (idx - 2)) - 1;
200
for(i = 0; i < SAMPLES_PER_BAND; i++)
201
*dst++ = get_bits(gb, idx - 1) - t;
203
default: // case 0 and -2..-17
208
static int mpc7_decode_frame(AVCodecContext * avctx,
209
void *data, int *data_size,
210
uint8_t * buf, int buf_size)
212
MPCContext *c = avctx->priv_data;
218
int Q[2][MPC_FRAME_SIZE];
71
void ff_mpc_dequantize_and_synth(MPCContext * c, int maxband, void *data)
74
Band *bands = c->bands;
221
int bits_used, bits_avail;
223
memset(bands, 0, sizeof(bands));
225
av_log(avctx, AV_LOG_ERROR, "Too small buffer passed (%i bytes)\n", buf_size);
228
bits = av_malloc(((buf_size - 1) & ~3) + FF_INPUT_BUFFER_PADDING_SIZE);
229
c->dsp.bswap_buf(bits, buf + 4, (buf_size - 4) >> 2);
230
init_get_bits(&gb, bits, (buf_size - 4)* 8);
231
skip_bits(&gb, buf[0]);
233
/* read subband indexes */
234
for(i = 0; i <= c->bands; i++){
235
for(ch = 0; ch < 2; ch++){
236
if(i) t = get_vlc2(&gb, hdr_vlc.table, MPC7_HDR_BITS, 1) - 5;
237
if(!i || (t == 4)) bands[i].res[ch] = get_bits(&gb, 4);
238
else bands[i].res[ch] = bands[i-1].res[ch] + t;
241
if(bands[i].res[0] || bands[i].res[1]){
243
if(c->MSS) bands[i].msf = get_bits1(&gb);
246
/* get scale indexes coding method */
247
for(i = 0; i <= mb; i++)
248
for(ch = 0; ch < 2; ch++)
249
if(bands[i].res[ch]) bands[i].scfi[ch] = get_vlc2(&gb, scfi_vlc.table, MPC7_SCFI_BITS, 1);
250
/* get scale indexes */
251
for(i = 0; i <= mb; i++){
252
for(ch = 0; ch < 2; ch++){
253
if(bands[i].res[ch]){
254
bands[i].scf_idx[ch][2] = c->oldDSCF[ch][i];
255
t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
256
bands[i].scf_idx[ch][0] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][2] + t);
257
switch(bands[i].scfi[ch]){
259
t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
260
bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
261
t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
262
bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
265
t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
266
bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
267
bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1];
270
bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];
271
t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
272
bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
275
bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];
278
c->oldDSCF[ch][i] = bands[i].scf_idx[ch][2];
283
memset(Q, 0, sizeof(Q));
285
for(i = 0; i < BANDS; i++, off += SAMPLES_PER_BAND)
286
for(ch = 0; ch < 2; ch++)
287
idx_to_quant(c, &gb, bands[i].res[ch], Q[ch] + off);
289
79
memset(c->sb_samples, 0, sizeof(c->sb_samples));
291
for(i = 0; i <= mb; i++, off += SAMPLES_PER_BAND){
81
for(i = 0; i <= maxband; i++, off += SAMPLES_PER_BAND){
292
82
for(ch = 0; ch < 2; ch++){
293
83
if(bands[i].res[ch]){
295
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]];
296
86
for(; j < 12; j++)
297
c->sb_samples[ch][j][i] = mul * Q[ch][j + off];
298
mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][1]];
87
c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
88
mul = mpc_CC[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][1]];
299
89
for(; j < 24; j++)
300
c->sb_samples[ch][j][i] = mul * Q[ch][j + off];
301
mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][2]];
90
c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];
91
mul = mpc_CC[bands[i].res[ch]] * mpc_SCF[bands[i].scf_idx[ch][2]];
302
92
for(; j < 36; j++)
303
c->sb_samples[ch][j][i] = mul * Q[ch][j + off];
93
c->sb_samples[ch][j][i] = mul * c->Q[ch][j + off];