int ff_wma_init(AVCodecContext * avctx, int flags2)
{
- WMADecodeContext *s = avctx->priv_data;
+ WMACodecContext *s = avctx->priv_data;
int i;
- float *window;
float bps1, high_freq;
volatile float bps;
int sample_rate1;
int coef_vlc_table;
+ if( avctx->sample_rate<=0 || avctx->sample_rate>50000
+ || avctx->channels<=0 || avctx->channels>8
+ || avctx->bit_rate<=0)
+ return -1;
+
s->sample_rate = avctx->sample_rate;
s->nb_channels = avctx->channels;
s->bit_rate = avctx->bit_rate;
s->nb_block_sizes = 1;
}
- /* init rate dependant parameters */
+ /* init rate dependent parameters */
s->use_noise_coding = 1;
high_freq = s->sample_rate * 0.5;
high_freq = high_freq * 0.5;
}
}
- dprintf("flags1=0x%x flags2=0x%x\n", flags1, flags2);
- dprintf("version=%d channels=%d sample_rate=%d bitrate=%d block_align=%d\n",
+ dprintf(s->avctx, "flags2=0x%x\n", flags2);
+ dprintf(s->avctx, "version=%d channels=%d sample_rate=%d bitrate=%d block_align=%d\n",
s->version, s->nb_channels, s->sample_rate, s->bit_rate,
s->block_align);
- dprintf("bps=%f bps1=%f high_freq=%f bitoffset=%d\n",
+ dprintf(s->avctx, "bps=%f bps1=%f high_freq=%f bitoffset=%d\n",
bps, bps1, high_freq, s->byte_offset_bits);
- dprintf("use_noise_coding=%d use_exp_vlc=%d nb_block_sizes=%d\n",
+ dprintf(s->avctx, "use_noise_coding=%d use_exp_vlc=%d nb_block_sizes=%d\n",
s->use_noise_coding, s->use_exp_vlc, s->nb_block_sizes);
/* compute the scale factor band sizes for each MDCT block size */
}
s->exponent_high_sizes[k] = j;
#if 0
- tprintf("%5d: coefs_end=%d high_band_start=%d nb_high_bands=%d: ",
+ tprintf(s->avctx, "%5d: coefs_end=%d high_band_start=%d nb_high_bands=%d: ",
s->frame_len >> k,
s->coefs_end[k],
s->high_band_start[k],
s->exponent_high_sizes[k]);
for(j=0;j<s->exponent_high_sizes[k];j++)
- tprintf(" %d", s->exponent_high_bands[k][j]);
- tprintf("\n");
+ tprintf(s->avctx, " %d", s->exponent_high_bands[k][j]);
+ tprintf(s->avctx, "\n");
#endif
}
}
{
int i, j;
for(i = 0; i < s->nb_block_sizes; i++) {
- tprintf("%5d: n=%2d:",
+ tprintf(s->avctx, "%5d: n=%2d:",
s->frame_len >> i,
s->exponent_sizes[i]);
for(j=0;j<s->exponent_sizes[i];j++)
- tprintf(" %d", s->exponent_bands[i][j]);
- tprintf("\n");
+ tprintf(s->avctx, " %d", s->exponent_bands[i][j]);
+ tprintf(s->avctx, "\n");
}
}
#endif
/* init MDCT windows : simple sinus window */
for(i = 0; i < s->nb_block_sizes; i++) {
- int n, j;
- float alpha;
+ int n;
n = 1 << (s->frame_len_bits - i);
- window = av_malloc(sizeof(float) * n);
- alpha = M_PI / (2.0 * n);
- for(j=0;j<n;j++) {
- window[n - j - 1] = sin((j + 0.5) * alpha);
- }
- s->windows[i] = window;
+ ff_sine_window_init(ff_sine_windows[i], n);
+ s->windows[i] = ff_sine_windows[i];
}
s->reset_block_lengths = 1;
int ff_wma_end(AVCodecContext *avctx)
{
- WMADecodeContext *s = avctx->priv_data;
+ WMACodecContext *s = avctx->priv_data;
int i;
for(i = 0; i < s->nb_block_sizes; i++)
ff_mdct_end(&s->mdct_ctx[i]);
- for(i = 0; i < s->nb_block_sizes; i++)
- av_free(s->windows[i]);
if (s->use_exp_vlc) {
free_vlc(&s->exp_vlc);
free_vlc(&s->coef_vlc[i]);
av_free(s->run_table[i]);
av_free(s->level_table[i]);
+ av_free(s->int_table[i]);
}
return 0;