3 * Copyright (c) 2006 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
24 * @file mpc.c Musepack decoder
25 * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
26 * divided into 32 subbands.
30 #include "bitstream.h"
34 #ifdef CONFIG_MPEGAUDIO_HP
35 #define USE_HIGHPRECISION
37 #include "mpegaudio.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 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 static int vlc_inited
= 0;
79 if(avctx
->extradata_size
< 16){
80 av_log(avctx
, AV_LOG_ERROR
, "Too small extradata size (%i)!\n", avctx
->extradata_size
);
83 memset(c
->oldDSCF
, 0, sizeof(c
->oldDSCF
));
84 av_init_random(0xDEADBEEF, &c
->rnd
);
85 dsputil_init(&c
->dsp
, avctx
);
86 c
->dsp
.bswap_buf(buf
, avctx
->extradata
, 4);
87 ff_mpa_synth_init(mpa_window
);
88 init_get_bits(&gb
, buf
, 128);
90 c
->IS
= get_bits1(&gb
);
91 c
->MSS
= get_bits1(&gb
);
92 c
->bands
= get_bits(&gb
, 6);
93 if(c
->bands
>= BANDS
){
94 av_log(avctx
, AV_LOG_ERROR
, "Too many bands: %i\n", c
->bands
);
98 c
->gapless
= get_bits1(&gb
);
99 c
->lastframelen
= get_bits(&gb
, 11);
100 av_log(avctx
, AV_LOG_DEBUG
, "IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d\n",
101 c
->IS
, c
->MSS
, c
->gapless
, c
->lastframelen
, c
->bands
);
102 c
->frames_to_skip
= 0;
104 if(vlc_inited
) return 0;
105 av_log(avctx
, AV_LOG_DEBUG
, "Initing VLC\n");
106 if(init_vlc(&scfi_vlc
, MPC7_SCFI_BITS
, MPC7_SCFI_SIZE
,
108 &mpc7_scfi
[0], 2, 1, INIT_VLC_USE_STATIC
)){
109 av_log(avctx
, AV_LOG_ERROR
, "Cannot init SCFI VLC\n");
112 if(init_vlc(&dscf_vlc
, MPC7_DSCF_BITS
, MPC7_DSCF_SIZE
,
114 &mpc7_dscf
[0], 2, 1, INIT_VLC_USE_STATIC
)){
115 av_log(avctx
, AV_LOG_ERROR
, "Cannot init DSCF VLC\n");
118 if(init_vlc(&hdr_vlc
, MPC7_HDR_BITS
, MPC7_HDR_SIZE
,
120 &mpc7_hdr
[0], 2, 1, INIT_VLC_USE_STATIC
)){
121 av_log(avctx
, AV_LOG_ERROR
, "Cannot init HDR VLC\n");
124 for(i
= 0; i
< MPC7_QUANT_VLC_TABLES
; i
++){
125 for(j
= 0; j
< 2; j
++){
126 if(init_vlc(&quant_vlc
[i
][j
], 9, mpc7_quant_vlc_sizes
[i
],
127 &mpc7_quant_vlc
[i
][j
][1], 4, 2,
128 &mpc7_quant_vlc
[i
][j
][0], 4, 2, INIT_VLC_USE_STATIC
)){
129 av_log(avctx
, AV_LOG_ERROR
, "Cannot init QUANT VLC %i,%i\n",i
,j
);
139 * Process decoded Musepack data and produce PCM
140 * @todo make it available for MPC8 and MPC6
142 static void mpc_synth(MPCContext
*c
, int16_t *out
)
144 int dither_state
= 0;
146 OUT_INT samples
[MPA_MAX_CHANNELS
* MPA_FRAME_SIZE
], *samples_ptr
;
148 for(ch
= 0; ch
< 2; ch
++){
149 samples_ptr
= samples
+ ch
;
150 for(i
= 0; i
< SAMPLES_PER_BAND
; i
++) {
151 ff_mpa_synth_filter(c
->synth_buf
[ch
], &(c
->synth_buf_offset
[ch
]),
152 mpa_window
, &dither_state
,
154 c
->sb_samples
[ch
][i
]);
158 for(i
= 0; i
< MPC_FRAME_SIZE
*2; i
++)
163 * Fill samples for given subband
165 static inline void idx_to_quant(MPCContext
*c
, GetBitContext
*gb
, int idx
, int *dst
)
170 for(i
= 0; i
< SAMPLES_PER_BAND
; i
++){
171 *dst
++ = (av_random(&c
->rnd
) & 0x3FC) - 510;
176 for(i
= 0; i
< SAMPLES_PER_BAND
/3; i
++){
177 t
= get_vlc2(gb
, quant_vlc
[0][i1
].table
, 9, 2);
178 *dst
++ = mpc_idx30
[t
];
179 *dst
++ = mpc_idx31
[t
];
180 *dst
++ = mpc_idx32
[t
];
185 for(i
= 0; i
< SAMPLES_PER_BAND
/2; i
++){
186 t
= get_vlc2(gb
, quant_vlc
[1][i1
].table
, 9, 2);
187 *dst
++ = mpc_idx50
[t
];
188 *dst
++ = mpc_idx51
[t
];
191 case 3: case 4: case 5: case 6: case 7:
193 for(i
= 0; i
< SAMPLES_PER_BAND
; i
++)
194 *dst
++ = get_vlc2(gb
, quant_vlc
[idx
-1][i1
].table
, 9, 2) - mpc7_quant_vlc_off
[idx
-1];
196 case 8: case 9: case 10: case 11: case 12:
197 case 13: case 14: case 15: case 16: case 17:
198 t
= (1 << (idx
- 2)) - 1;
199 for(i
= 0; i
< SAMPLES_PER_BAND
; i
++)
200 *dst
++ = get_bits(gb
, idx
- 1) - t
;
202 default: // case 0 and -2..-17
207 static int mpc7_decode_frame(AVCodecContext
* avctx
,
208 void *data
, int *data_size
,
209 uint8_t * buf
, int buf_size
)
211 MPCContext
*c
= avctx
->priv_data
;
217 int Q
[2][MPC_FRAME_SIZE
];
220 int bits_used
, bits_avail
;
222 memset(bands
, 0, sizeof(bands
));
224 av_log(avctx
, AV_LOG_ERROR
, "Too small buffer passed (%i bytes)\n", buf_size
);
227 bits
= av_malloc(((buf_size
- 1) & ~3) + FF_INPUT_BUFFER_PADDING_SIZE
);
228 c
->dsp
.bswap_buf(bits
, buf
+ 4, (buf_size
- 4) >> 2);
229 init_get_bits(&gb
, bits
, (buf_size
- 4)* 8);
230 skip_bits(&gb
, buf
[0]);
232 /* read subband indexes */
233 for(i
= 0; i
<= c
->bands
; i
++){
234 for(ch
= 0; ch
< 2; ch
++){
235 if(i
) t
= get_vlc2(&gb
, hdr_vlc
.table
, MPC7_HDR_BITS
, 1) - 5;
236 if(!i
|| (t
== 4)) bands
[i
].res
[ch
] = get_bits(&gb
, 4);
237 else bands
[i
].res
[ch
] = bands
[i
-1].res
[ch
] + t
;
240 if(bands
[i
].res
[0] || bands
[i
].res
[1]){
242 if(c
->MSS
) bands
[i
].msf
= get_bits1(&gb
);
245 /* get scale indexes coding method */
246 for(i
= 0; i
<= mb
; i
++)
247 for(ch
= 0; ch
< 2; ch
++)
248 if(bands
[i
].res
[ch
]) bands
[i
].scfi
[ch
] = get_vlc2(&gb
, scfi_vlc
.table
, MPC7_SCFI_BITS
, 1);
249 /* get scale indexes */
250 for(i
= 0; i
<= mb
; i
++){
251 for(ch
= 0; ch
< 2; ch
++){
252 if(bands
[i
].res
[ch
]){
253 bands
[i
].scf_idx
[ch
][2] = c
->oldDSCF
[ch
][i
];
254 t
= get_vlc2(&gb
, dscf_vlc
.table
, MPC7_DSCF_BITS
, 1) - 7;
255 bands
[i
].scf_idx
[ch
][0] = (t
== 8) ? get_bits(&gb
, 6) : (bands
[i
].scf_idx
[ch
][2] + t
);
256 switch(bands
[i
].scfi
[ch
]){
258 t
= get_vlc2(&gb
, dscf_vlc
.table
, MPC7_DSCF_BITS
, 1) - 7;
259 bands
[i
].scf_idx
[ch
][1] = (t
== 8) ? get_bits(&gb
, 6) : (bands
[i
].scf_idx
[ch
][0] + t
);
260 t
= get_vlc2(&gb
, dscf_vlc
.table
, MPC7_DSCF_BITS
, 1) - 7;
261 bands
[i
].scf_idx
[ch
][2] = (t
== 8) ? get_bits(&gb
, 6) : (bands
[i
].scf_idx
[ch
][1] + t
);
264 t
= get_vlc2(&gb
, dscf_vlc
.table
, MPC7_DSCF_BITS
, 1) - 7;
265 bands
[i
].scf_idx
[ch
][1] = (t
== 8) ? get_bits(&gb
, 6) : (bands
[i
].scf_idx
[ch
][0] + t
);
266 bands
[i
].scf_idx
[ch
][2] = bands
[i
].scf_idx
[ch
][1];
269 bands
[i
].scf_idx
[ch
][1] = bands
[i
].scf_idx
[ch
][0];
270 t
= get_vlc2(&gb
, dscf_vlc
.table
, MPC7_DSCF_BITS
, 1) - 7;
271 bands
[i
].scf_idx
[ch
][2] = (t
== 8) ? get_bits(&gb
, 6) : (bands
[i
].scf_idx
[ch
][1] + t
);
274 bands
[i
].scf_idx
[ch
][2] = bands
[i
].scf_idx
[ch
][1] = bands
[i
].scf_idx
[ch
][0];
277 c
->oldDSCF
[ch
][i
] = bands
[i
].scf_idx
[ch
][2];
282 memset(Q
, 0, sizeof(Q
));
284 for(i
= 0; i
< BANDS
; i
++, off
+= SAMPLES_PER_BAND
)
285 for(ch
= 0; ch
< 2; ch
++)
286 idx_to_quant(c
, &gb
, bands
[i
].res
[ch
], Q
[ch
] + off
);
288 memset(c
->sb_samples
, 0, sizeof(c
->sb_samples
));
290 for(i
= 0; i
<= mb
; i
++, off
+= SAMPLES_PER_BAND
){
291 for(ch
= 0; ch
< 2; ch
++){
292 if(bands
[i
].res
[ch
]){
294 mul
= mpc_CC
[bands
[i
].res
[ch
]] * mpc7_SCF
[bands
[i
].scf_idx
[ch
][0]];
296 c
->sb_samples
[ch
][j
][i
] = mul
* Q
[ch
][j
+ off
];
297 mul
= mpc_CC
[bands
[i
].res
[ch
]] * mpc7_SCF
[bands
[i
].scf_idx
[ch
][1]];
299 c
->sb_samples
[ch
][j
][i
] = mul
* Q
[ch
][j
+ off
];
300 mul
= mpc_CC
[bands
[i
].res
[ch
]] * mpc7_SCF
[bands
[i
].scf_idx
[ch
][2]];
302 c
->sb_samples
[ch
][j
][i
] = mul
* Q
[ch
][j
+ off
];
307 for(j
= 0; j
< SAMPLES_PER_BAND
; j
++){
308 t1
= c
->sb_samples
[0][j
][i
];
309 t2
= c
->sb_samples
[1][j
][i
];
310 c
->sb_samples
[0][j
][i
] = t1
+ t2
;
311 c
->sb_samples
[1][j
][i
] = t1
- t2
;
320 bits_used
= get_bits_count(&gb
);
321 bits_avail
= (buf_size
- 4) * 8;
322 if(!buf
[1] && ((bits_avail
< bits_used
) || (bits_used
+ 32 <= bits_avail
))){
323 av_log(NULL
,0, "Error decoding frame: used %i of %i bits\n", bits_used
, bits_avail
);
326 if(c
->frames_to_skip
){
331 *data_size
= (buf
[1] ? c
->lastframelen
: MPC_FRAME_SIZE
) * 4;
336 static void mpc7_decode_flush(AVCodecContext
*avctx
)
338 MPCContext
*c
= avctx
->priv_data
;
340 memset(c
->oldDSCF
, 0, sizeof(c
->oldDSCF
));
341 c
->frames_to_skip
= 32;
344 AVCodec mpc7_decoder
= {
353 .flush
= mpc7_decode_flush
,