---
configure | 1 +
libavcodec/Makefile | 3 ++-
libavcodec/allcodecs.c | 1 +
libavcodec/libfaac.c | 22 +++++++++++++++++++++-
4 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index 5b81e0b..fc5bab3 100755
--- a/configure
+++ b/configure
@@ -1376,6 +1376,7 @@ h264_parser_select="golomb h264dsp h264pred"
libdirac_decoder_deps="libdirac !libschroedinger"
libdirac_encoder_deps="libdirac"
libfaac_encoder_deps="libfaac"
+libfaac_latm_encoder_deps="libfaac"
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
libgsm_ms_decoder_deps="libgsm"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index fa70216..04b3e24 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -552,7 +552,8 @@ OBJS-$(CONFIG_WTV_DEMUXER) += mpeg4audio.o
mpegaudiodata.o
# external codec libraries
OBJS-$(CONFIG_LIBDIRAC_DECODER) += libdiracdec.o
OBJS-$(CONFIG_LIBDIRAC_ENCODER) += libdiracenc.o libdirac_libschro.o
-OBJS-$(CONFIG_LIBFAAC_ENCODER) += libfaac.o
+OBJS-$(CONFIG_LIBFAAC_ENCODER) += libfaac.o mpeg4audio.o
+OBJS-$(CONFIG_LIBFAAC_LATM_ENCODER) += libfaac.o mpeg4audio.o
OBJS-$(CONFIG_LIBGSM_DECODER) += libgsm.o
OBJS-$(CONFIG_LIBGSM_ENCODER) += libgsm.o
OBJS-$(CONFIG_LIBGSM_MS_DECODER) += libgsm.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 3466ad9..5fce48c 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -358,6 +358,7 @@ void avcodec_register_all(void)
/* external libraries */
REGISTER_ENCDEC (LIBDIRAC, libdirac);
REGISTER_ENCODER (LIBFAAC, libfaac);
+ REGISTER_ENCODER (LIBFAAC_LATM, libfaac_latm);
REGISTER_ENCDEC (LIBGSM, libgsm);
REGISTER_ENCDEC (LIBGSM_MS, libgsm_ms);
REGISTER_ENCODER (LIBMP3LAME, libmp3lame);
diff --git a/libavcodec/libfaac.c b/libavcodec/libfaac.c
index 51d965e..41aaa2d 100644
--- a/libavcodec/libfaac.c
+++ b/libavcodec/libfaac.c
@@ -26,6 +26,7 @@
#include "avcodec.h"
#include <faac.h>
+#include "mpeg4audio.h"
typedef struct FaacAudioContext {
faacEncHandle faac_handle;
@@ -94,7 +95,10 @@ static av_cold int Faac_encode_init(AVCodecContext *avctx)
/* Set decoder specific info */
avctx->extradata_size = 0;
- if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
+ if (avctx->codec_id == CODEC_ID_AAC_LATM) {
+ ff_aac_make_latm_header(avctx);
+ faac_cfg->outputFormat = 0;
+ } else if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
unsigned char *buffer = NULL;
unsigned long decoder_specific_info_size;
@@ -132,6 +136,8 @@ static int Faac_encode_frame(AVCodecContext *avctx,
frame,
buf_size);
+ if (avctx->codec_id == CODEC_ID_AAC_LATM)
+ return ff_aac_latm_wrap(avctx, frame, bytes_written, buf_size);
return bytes_written;
}
@@ -167,3 +173,17 @@ AVCodec ff_libfaac_encoder = {
.long_name = NULL_IF_CONFIG_SMALL("libfaac AAC (Advanced Audio Codec)"),
.profiles = NULL_IF_CONFIG_SMALL(profiles),
};
+
+AVCodec ff_libfaac_latm_encoder = {
+ "libfaac_latm",
+ AVMEDIA_TYPE_AUDIO,
+ CODEC_ID_AAC_LATM,
+ sizeof(FaacAudioContext),
+ Faac_encode_init,
+ Faac_encode_frame,
+ Faac_encode_close,
+ .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
+ .sample_fmts = (const enum
AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
+ .long_name = NULL_IF_CONFIG_SMALL("libfaac AAC (Advanced Audio Codec)"),
+ .profiles = NULL_IF_CONFIG_SMALL(profiles),
+};
--
1.7.3.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel