]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
ac3dec: move channel remapping to outside of block loop
authorjbr <jbr@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 5 May 2009 23:38:12 +0000 (23:38 +0000)
committerjbr <jbr@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 5 May 2009 23:38:12 +0000 (23:38 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@18749 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/ac3dec.c

index c142ca9bb21a5109c036103282edd83579de2252..56dfd8f9869ba65790c2cd26dea6f8b1b52e7ac2 100644 (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;
     }