@@ -55,6 +55,10 @@ OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o \
aacpsy.o aactab.o \
psymodel.o iirfilter.o \
mpeg4audio.o kbdwin.o
+OBJS-$(CONFIG_AAC_LATM_ENCODER) += aacenc.o aaccoder.o \
+ aacpsy.o aactab.o \
+ psymodel.o iirfilter.o \
+ mpeg4audio.o kbdwin.o
OBJS-$(CONFIG_AASC_DECODER) += aasc.o msrledec.o
OBJS-$(CONFIG_AC3_DECODER) += ac3dec.o ac3dec_data.o ac3.o kbdwin.o
OBJS-$(CONFIG_AC3_ENCODER) += ac3enc_float.o ac3tab.o ac3.o kbdwin.o
@@ -216,6 +216,9 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
ff_aac_tableinit();
+ if (avctx->codec_id == CODEC_ID_AAC_LATM)
+ ff_aac_make_latm_header(avctx);
+
return 0;
}
@@ -629,6 +632,9 @@ static int aac_encode_frame(AVCodecContext *avctx,
s->last_frame = 1;
memcpy(s->samples, s->samples + 1024 * avctx->channels,
1024 * avctx->channels * sizeof(s->samples[0]));
+
+ if (avctx->codec_id == CODEC_ID_AAC_LATM)
+ return ff_aac_latm_wrap(avctx, frame, put_bits_count(&s->pb)>>3, buf_size);
return put_bits_count(&s->pb)>>3;
}
@@ -657,3 +663,16 @@ AVCodec ff_aac_encoder = {
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
};
+
+AVCodec ff_aac_latm_encoder = {
+ "aac_latm",
+ AVMEDIA_TYPE_AUDIO,
+ CODEC_ID_AAC_LATM,
+ sizeof(AACEncContext),
+ aac_encode_init,
+ aac_encode_frame,
+ aac_encode_end,
+ .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL,
+ .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
+ .long_name = NULL_IF_CONFIG_SMALL("Advanced Audio Coding"),
+};
@@ -226,7 +226,7 @@ void avcodec_register_all(void)
/* audio codecs */
REGISTER_ENCDEC (AAC, aac);
- REGISTER_DECODER (AAC_LATM, aac_latm);
+ REGISTER_ENCDEC (AAC_LATM, aac_latm);
REGISTER_ENCDEC (AC3, ac3);
REGISTER_ENCODER (AC3_FIXED, ac3_fixed);
REGISTER_ENCDEC (ALAC, alac);
@@ -37,6 +37,7 @@ av_cold int ff_psy_init(FFPsyContext *ctx, AVCodecContext *avctx,
memcpy(ctx->num_bands, num_bands, sizeof(ctx->num_bands[0]) * num_lens);
switch (ctx->avctx->codec_id) {
case CODEC_ID_AAC:
+ case CODEC_ID_AAC_LATM:
ctx->model = &ff_aac_psy_model;
break;
}