AVLFG random_state;
/* transform data */
- MDCTContext mdct_ctx;
+ FFTContext mdct_ctx;
float* mlt_window;
/* VLC data */
/* data buffers */
uint8_t* decoded_bytes_buffer;
- DECLARE_ALIGNED_16(float,mono_mdct_output[2048]);
+ DECLARE_ALIGNED_16(float,mono_mdct_output)[2048];
float decode_buffer_1[1024];
float decode_buffer_2[1024];
float decode_buffer_0[1060]; /* static allocation for joint decode */
q->mlt_window[j] *= sqrt(2.0 / q->samples_per_channel);
/* Initialize the MDCT. */
- if (ff_mdct_init(&q->mdct_ctx, av_log2(mlt_size)+1, 1)) {
+ if (ff_mdct_init(&q->mdct_ctx, av_log2(mlt_size)+1, 1, 1.0)) {
av_free(q->mlt_window);
return -1;
}
for(i=1;i<q->num_subpackets;i++){
q->subpacket[i].size = 2 * buf[avctx->block_align - q->num_subpackets + i];
- q->subpacket[0].size -= (q->subpacket[i].size + 1);
+ q->subpacket[0].size -= q->subpacket[i].size + 1;
+ if (q->subpacket[0].size < 0) {
+ av_log(avctx,AV_LOG_DEBUG,"frame subpacket size total > avctx->block_align!\n");
+ return -1;
+ }
}
/* decode supbackets */
q->bit_rate = avctx->bit_rate;
/* Initialize RNG. */
- av_lfg_init(&q->random_state, ff_random_get_seed());
+ av_lfg_init(&q->random_state, 0);
while(edata_ptr < edata_ptr_end){
/* 8 for mono, 16 for stereo, ? for multichannel
av_log(avctx,AV_LOG_DEBUG,"MONO\n");
break;
case STEREO:
- if (q->nb_channels != 1)
+ if (q->nb_channels != 1) {
q->subpacket[s].bits_per_subpdiv = 1;
- q->subpacket[s].num_channels = 2;
+ q->subpacket[s].num_channels = 2;
+ }
av_log(avctx,AV_LOG_DEBUG,"STEREO\n");
break;
case JOINT_STEREO: