libfdk-aacenc: add LATM/LOAS encapsulation support
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
		
				
					committed by
					
						
						Martin Storsjö
					
				
			
			
				
	
			
			
			
						parent
						
							ecfff0e992
						
					
				
				
					commit
					160a27c590
				
			@@ -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[] = {
 | 
				
			|||||||
    { "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)
 | 
				
			|||||||
    /* 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 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#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, \
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user