aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-08-25 13:11:10 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2012-10-06 13:23:13 -0400
commitb1540fc8843dfe35b228c733d7aeca2e83ef4739 (patch)
tree6db082a11b9cf234c0e2c87a4710981379d29298
parentf3e2d68df62d3ef13759d76bb1d87903d08ee586 (diff)
downloadffmpeg-b1540fc8843dfe35b228c733d7aeca2e83ef4739.tar.gz
(e)ac3enc: use planar sample format
-rw-r--r--libavcodec/ac3enc_fixed.c2
-rw-r--r--libavcodec/ac3enc_float.c2
-rw-r--r--libavcodec/ac3enc_template.c26
-rw-r--r--libavcodec/eac3enc.c2
4 files changed, 12 insertions, 20 deletions
diff --git a/libavcodec/ac3enc_fixed.c b/libavcodec/ac3enc_fixed.c
index 1430c3352c..e471edf08c 100644
--- a/libavcodec/ac3enc_fixed.c
+++ b/libavcodec/ac3enc_fixed.c
@@ -149,7 +149,7 @@ AVCodec ff_ac3_fixed_encoder = {
.init = ac3_fixed_encode_init,
.encode2 = ff_ac3_fixed_encode_frame,
.close = ff_ac3_encode_close,
- .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
+ .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
.priv_class = &ac3enc_class,
diff --git a/libavcodec/ac3enc_float.c b/libavcodec/ac3enc_float.c
index 45645da655..a225d9b4bd 100644
--- a/libavcodec/ac3enc_float.c
+++ b/libavcodec/ac3enc_float.c
@@ -148,7 +148,7 @@ AVCodec ff_ac3_encoder = {
.init = ff_ac3_encode_init,
.encode2 = ff_ac3_float_encode_frame,
.close = ff_ac3_encode_close,
- .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
+ .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
.priv_class = &ac3enc_class,
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);
diff --git a/libavcodec/eac3enc.c b/libavcodec/eac3enc.c
index c5ba9d6c40..3c7a611e87 100644
--- a/libavcodec/eac3enc.c
+++ b/libavcodec/eac3enc.c
@@ -254,7 +254,7 @@ AVCodec ff_eac3_encoder = {
.init = ff_ac3_encode_init,
.encode2 = ff_ac3_float_encode_frame,
.close = ff_ac3_encode_close,
- .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
+ .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52 E-AC-3"),
.priv_class = &eac3enc_class,