av_init_random(0, &s->dith_state);
/* set bias values for float to int16 conversion */
- if(s->dsp.float_to_int16 == ff_float_to_int16_c) {
+ if(s->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
s->add_bias = 385.0f;
s->mul_bias = 1.0f;
} else {
for(i=0; i<128; i++)
x[i] = s->transform_coeffs[ch][2*i];
ff_imdct_half(&s->imdct_256, s->tmp_output, x);
- s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, 0, 128);
+ s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, s->add_bias, 128);
for(i=0; i<128; i++)
x[i] = s->transform_coeffs[ch][2*i+1];
ff_imdct_half(&s->imdct_256, s->delay[ch-1], x);
} else {
ff_imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
- s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, 0, 128);
+ s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, s->add_bias, 128);
memcpy(s->delay[ch-1], s->tmp_output+128, 128*sizeof(float));
}
}
do_imdct(s, s->out_channels);
}
- /* convert float to 16-bit integer */
- for(ch=0; ch<s->out_channels; ch++) {
- for(i=0; i<256; i++) {
- s->output[ch][i] += s->add_bias;
- }
- s->dsp.float_to_int16(s->int_output[ch], s->output[ch], 256);
- }
-
return 0;
}
{
AC3DecodeContext *s = avctx->priv_data;
int16_t *out_samples = (int16_t *)data;
- int i, blk, ch, err;
+ int blk, ch, err;
/* initialize the GetBitContext with the start of valid AC-3 Frame */
if (s->input_buffer) {
/* decode the audio blocks */
for (blk = 0; blk < s->num_blocks; blk++) {
+ const float *output[s->out_channels];
if (!err && decode_audio_block(s, blk)) {
av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
}
-
- /* interleave output samples */
- for (i = 0; i < 256; i++)
- for (ch = 0; ch < s->out_channels; ch++)
- *(out_samples++) = s->int_output[ch][i];
+ for (ch = 0; ch < s->out_channels; ch++)
+ output[ch] = s->output[ch];
+ s->dsp.float_to_int16_interleave(out_samples, output, 256, s->out_channels);
+ out_samples += 256 * s->out_channels;
}
*data_size = s->num_blocks * 256 * avctx->channels * sizeof (int16_t);
return s->frame_size;