1
mirror of https://git.videolan.org/git/ffmpeg.git synced 2024-08-21 08:45:06 +02:00

ac3dec: move channel remapping to outside of block loop

Originally committed as revision 18749 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Justin Ruggles 2009-05-05 23:38:12 +00:00
parent a3015225c7
commit 13ec942869

View File

@ -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;
}