libfdk-aacenc: add LATM/LOAS encapsulation support
authorKieran Kunhya <kierank@ob-encoder.com>
Mon, 23 Jul 2012 16:20:04 +0000 (11:20 -0500)
committerMartin Storsjö <martin@martin.st>
Wed, 25 Jul 2012 17:32:33 +0000 (20:32 +0300)
Signed-off-by: Martin Storsjö <martin@martin.st>
libavcodec/libfdk-aacenc.c
libavcodec/version.h

index f2c3fbd..4d7aa7b 100644 (file)
@@ -33,6 +33,8 @@ typedef struct AACContext {
     int afterburner;
     int eld_sbr;
     int signaling;
+    int latm;
+    int header_period;
 
     AudioFrameQueue afq;
 } AACContext;
@@ -45,6 +47,8 @@ static const AVOption aac_enc_options[] = {
     { "implicit", "Implicit backwards compatible signaling", 0, AV_OPT_TYPE_CONST, { 0 }, 0, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, "signaling" },
     { "explicit_sbr", "Explicit SBR, implicit PS signaling", 0, AV_OPT_TYPE_CONST, { 1 }, 0, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, "signaling" },
     { "explicit_hierarchical", "Explicit hierarchical signaling", 0, AV_OPT_TYPE_CONST, { 2 }, 0, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, "signaling" },
+    { "latm", "Output LATM/LOAS encapsulated data", offsetof(AACContext, latm), AV_OPT_TYPE_INT, { 0 }, 0, 1, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
+    { "header_period", "StreamMuxConfig and PCE repetition period (in frames)", offsetof(AACContext, header_period), AV_OPT_TYPE_INT, { 0 }, 0, 0xffff, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },
     { NULL }
 };
 
@@ -204,12 +208,21 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
     /* Choose bitstream format - if global header is requested, use
      * raw access units, otherwise use ADTS. */
     if ((err = aacEncoder_SetParam(s->handle, AACENC_TRANSMUX,
-                                   avctx->flags & CODEC_FLAG_GLOBAL_HEADER ? 0 : 2)) != AACENC_OK) {
+                                   avctx->flags & CODEC_FLAG_GLOBAL_HEADER ? 0 : s->latm ? 10 : 2)) != AACENC_OK) {
         av_log(avctx, AV_LOG_ERROR, "Unable to set the transmux format: %s\n",
                aac_get_error(err));
         goto error;
     }
 
+    if (s->latm && s->header_period) {
+        if ((err = aacEncoder_SetParam(s->handle, AACENC_HEADER_PERIOD,
+                                       s->header_period)) != AACENC_OK) {
+             av_log(avctx, AV_LOG_ERROR, "Unable to set header period: %s\n",
+                    aac_get_error(err));
+             goto error;
+        }
+    }
+
     /* If no signaling mode is chosen, use explicit hierarchical signaling
      * if using mp4 mode (raw access units, with global header) and
      * implicit signaling if using ADTS. */
index 98d6690..acad4d4 100644 (file)
@@ -28,7 +28,7 @@
 
 #define LIBAVCODEC_VERSION_MAJOR 54
 #define LIBAVCODEC_VERSION_MINOR 23
-#define LIBAVCODEC_VERSION_MICRO  0
+#define LIBAVCODEC_VERSION_MICRO  1
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                LIBAVCODEC_VERSION_MINOR, \