From b1540fc8843dfe35b228c733d7aeca2e83ef4739 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sat, 25 Aug 2012 13:11:10 -0400 Subject: (e)ac3enc: use planar sample format --- libavcodec/ac3enc_template.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'libavcodec/ac3enc_template.c') diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c index 6e0a2b6f34..388d75377e 100644 --- a/libavcodec/ac3enc_template.c +++ b/libavcodec/ac3enc_template.c @@ -65,30 +65,23 @@ alloc_fail: /* - * Deinterleave input samples. + * Copy input samples. * Channels are reordered from Libav's default order to AC-3 order. */ -static void deinterleave_input_samples(AC3EncodeContext *s, - const SampleType *samples) +static void copy_input_samples(AC3EncodeContext *s, SampleType **samples) { - int ch, i; + int ch; - /* deinterleave and remap input samples */ + /* copy and remap input samples */ for (ch = 0; ch < s->channels; ch++) { - const SampleType *sptr; - int sinc; - /* copy last 256 samples of previous frame to the start of the current frame */ memcpy(&s->planar_samples[ch][0], &s->planar_samples[ch][AC3_BLOCK_SIZE * s->num_blocks], AC3_BLOCK_SIZE * sizeof(s->planar_samples[0][0])); - /* deinterleave */ - sinc = s->channels; - sptr = samples + s->channel_map[ch]; - for (i = AC3_BLOCK_SIZE; i < AC3_BLOCK_SIZE * (s->num_blocks + 1); i++) { - s->planar_samples[ch][i] = *sptr; - sptr += sinc; - } + /* copy new samples for current frame */ + memcpy(&s->planar_samples[ch][AC3_BLOCK_SIZE], + samples[s->channel_map[ch]], + AC3_BLOCK_SIZE * s->num_blocks * sizeof(s->planar_samples[0][0])); } } @@ -400,7 +393,6 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) { AC3EncodeContext *s = avctx->priv_data; - const SampleType *samples = (const SampleType *)frame->data[0]; int ret; if (s->options.allow_per_frame_metadata) { @@ -412,7 +404,7 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, if (s->bit_alloc.sr_code == 1 || s->eac3) ff_ac3_adjust_frame_size(s); - deinterleave_input_samples(s, samples); + copy_input_samples(s, (SampleType **)frame->extended_data); apply_mdct(s); -- cgit v1.2.3