av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
err = 1;
}
- for (ch = 0; ch < s->out_channels; ch++)
- memcpy(s->frame.data[ch] + blk * 1024, output[ch], 1024);
+ if (err)
+ for (ch = 0; ch < s->out_channels; ch++)
+ memcpy(s->outptr[channel_map[ch]], output[ch], 1024);
+ for (ch = 0; ch < s->out_channels; ch++) {
+ output[ch] = s->outptr[channel_map[ch]];
+ s->outptr[channel_map[ch]] += AC3_BLOCK_SIZE;
+ }
}
+ s->frame.decode_error_flags = err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0;
+
+ /* keep last block for error concealment in next frame */
+ for (ch = 0; ch < s->out_channels; ch++)
+ memcpy(s->output[ch], output[ch], 1024);
+
*got_frame_ptr = 1;
*(AVFrame *)data = s->frame;