|
|
|
@ -1235,6 +1235,7 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, |
|
|
|
|
int16_t *out_samples = (int16_t *)data; |
|
|
|
|
int blk, ch, err; |
|
|
|
|
const uint8_t *channel_map; |
|
|
|
|
const float *output[AC3_MAX_CHANNELS]; |
|
|
|
|
|
|
|
|
|
/* initialize the GetBitContext with the start of valid AC-3 Frame */ |
|
|
|
|
if (s->input_buffer) { |
|
|
|
@ -1326,14 +1327,13 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, |
|
|
|
|
|
|
|
|
|
/* decode the audio blocks */ |
|
|
|
|
channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on]; |
|
|
|
|
for (ch = 0; ch < s->out_channels; ch++) |
|
|
|
|
output[ch] = s->output[channel_map[ch]]; |
|
|
|
|
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"); |
|
|
|
|
err = 1; |
|
|
|
|
} |
|
|
|
|
for (ch = 0; ch < s->out_channels; ch++) |
|
|
|
|
output[ch] = s->output[channel_map[ch]]; |
|
|
|
|
s->dsp.float_to_int16_interleave(out_samples, output, 256, s->out_channels); |
|
|
|
|
out_samples += 256 * s->out_channels; |
|
|
|
|
} |
|
|
|
|