Commit b1540fc8 authored by Justin Ruggles's avatar Justin Ruggles

(e)ac3enc: use planar sample format

parent f3e2d68d
...@@ -149,7 +149,7 @@ AVCodec ff_ac3_fixed_encoder = { ...@@ -149,7 +149,7 @@ AVCodec ff_ac3_fixed_encoder = {
.init = ac3_fixed_encode_init, .init = ac3_fixed_encode_init,
.encode2 = ff_ac3_fixed_encode_frame, .encode2 = ff_ac3_fixed_encode_frame,
.close = ff_ac3_encode_close, .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 }, AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"), .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
.priv_class = &ac3enc_class, .priv_class = &ac3enc_class,
......
...@@ -148,7 +148,7 @@ AVCodec ff_ac3_encoder = { ...@@ -148,7 +148,7 @@ AVCodec ff_ac3_encoder = {
.init = ff_ac3_encode_init, .init = ff_ac3_encode_init,
.encode2 = ff_ac3_float_encode_frame, .encode2 = ff_ac3_float_encode_frame,
.close = ff_ac3_encode_close, .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 }, AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"), .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
.priv_class = &ac3enc_class, .priv_class = &ac3enc_class,
......
...@@ -65,30 +65,23 @@ alloc_fail: ...@@ -65,30 +65,23 @@ alloc_fail:
/* /*
* Deinterleave input samples. * Copy input samples.
* Channels are reordered from Libav's default order to AC-3 order. * Channels are reordered from Libav's default order to AC-3 order.
*/ */
static void deinterleave_input_samples(AC3EncodeContext *s, static void copy_input_samples(AC3EncodeContext *s, SampleType **samples)
const SampleType *samples)
{ {
int ch, i; int ch;
/* deinterleave and remap input samples */ /* copy and remap input samples */
for (ch = 0; ch < s->channels; ch++) { 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 */ /* 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], 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])); AC3_BLOCK_SIZE * sizeof(s->planar_samples[0][0]));
/* deinterleave */ /* copy new samples for current frame */
sinc = s->channels; memcpy(&s->planar_samples[ch][AC3_BLOCK_SIZE],
sptr = samples + s->channel_map[ch]; samples[s->channel_map[ch]],
for (i = AC3_BLOCK_SIZE; i < AC3_BLOCK_SIZE * (s->num_blocks + 1); i++) { AC3_BLOCK_SIZE * s->num_blocks * sizeof(s->planar_samples[0][0]));
s->planar_samples[ch][i] = *sptr;
sptr += sinc;
}
} }
} }
...@@ -400,7 +393,6 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, ...@@ -400,7 +393,6 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt,
const AVFrame *frame, int *got_packet_ptr) const AVFrame *frame, int *got_packet_ptr)
{ {
AC3EncodeContext *s = avctx->priv_data; AC3EncodeContext *s = avctx->priv_data;
const SampleType *samples = (const SampleType *)frame->data[0];
int ret; int ret;
if (s->options.allow_per_frame_metadata) { if (s->options.allow_per_frame_metadata) {
...@@ -412,7 +404,7 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt, ...@@ -412,7 +404,7 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt,
if (s->bit_alloc.sr_code == 1 || s->eac3) if (s->bit_alloc.sr_code == 1 || s->eac3)
ff_ac3_adjust_frame_size(s); ff_ac3_adjust_frame_size(s);
deinterleave_input_samples(s, samples); copy_input_samples(s, (SampleType **)frame->extended_data);
apply_mdct(s); apply_mdct(s);
......
...@@ -254,7 +254,7 @@ AVCodec ff_eac3_encoder = { ...@@ -254,7 +254,7 @@ AVCodec ff_eac3_encoder = {
.init = ff_ac3_encode_init, .init = ff_ac3_encode_init,
.encode2 = ff_ac3_float_encode_frame, .encode2 = ff_ac3_float_encode_frame,
.close = ff_ac3_encode_close, .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 }, AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52 E-AC-3"), .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52 E-AC-3"),
.priv_class = &eac3enc_class, .priv_class = &eac3enc_class,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment