mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
(e)ac3enc: use planar sample format
This commit is contained in:
parent
f3e2d68df6
commit
b1540fc884
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user