Commit 160a27c5 authored by Kieran Kunhya's avatar Kieran Kunhya Committed by Martin Storsjö

libfdk-aacenc: add LATM/LOAS encapsulation support

Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent ecfff0e9
...@@ -33,6 +33,8 @@ typedef struct AACContext { ...@@ -33,6 +33,8 @@ typedef struct AACContext {
int afterburner; int afterburner;
int eld_sbr; int eld_sbr;
int signaling; int signaling;
int latm;
int header_period;
AudioFrameQueue afq; AudioFrameQueue afq;
} AACContext; } AACContext;
...@@ -45,6 +47,8 @@ static const AVOption aac_enc_options[] = { ...@@ -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" }, { "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_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" }, { "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 } { NULL }
}; };
...@@ -204,12 +208,21 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) ...@@ -204,12 +208,21 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
/* Choose bitstream format - if global header is requested, use /* Choose bitstream format - if global header is requested, use
* raw access units, otherwise use ADTS. */ * raw access units, otherwise use ADTS. */
if ((err = aacEncoder_SetParam(s->handle, AACENC_TRANSMUX, 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", av_log(avctx, AV_LOG_ERROR, "Unable to set the transmux format: %s\n",
aac_get_error(err)); aac_get_error(err));
goto error; 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 no signaling mode is chosen, use explicit hierarchical signaling
* if using mp4 mode (raw access units, with global header) and * if using mp4 mode (raw access units, with global header) and
* implicit signaling if using ADTS. */ * implicit signaling if using ADTS. */
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#define LIBAVCODEC_VERSION_MAJOR 54 #define LIBAVCODEC_VERSION_MAJOR 54
#define LIBAVCODEC_VERSION_MINOR 23 #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, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
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