@ -908,40 +908,50 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
uint8_t grouping [ AAC_MAX_CHANNELS ] ;
int lengths [ 2 ] ;
s - > channels = avctx - > channels ;
s - > chan_map = aac_chan_configs [ s - > channels - 1 ] ;
s - > lambda = avctx - > global_quality > 0 ? avctx - > global_quality : 120 ;
/* Constants */
s - > last_frame_pb_count = 0 ;
avctx - > extradata_size = 5 ;
avctx - > frame_size = 1024 ;
avctx - > initial_padding = 1024 ;
avctx - > bit_rate = ( int ) FFMIN (
6144 * s - > channels / 1024.0 * avctx - > sample_rate ,
avctx - > bit_rate ) ;
avctx - > profile = avctx - > profile = = FF_PROFILE_UNKNOWN ? FF_PROFILE_AAC_LOW :
avctx - > profile ;
s - > lambda = avctx - > global_quality > 0 ? avctx - > global_quality : 120 ;
/* Channel map and unspecified bitrate guessing */
s - > channels = avctx - > channels ;
ERROR_IF ( s - > channels > AAC_MAX_CHANNELS | | s - > channels = = 7 ,
" Unsupported number of channels: %d \n " , s - > channels ) ;
s - > chan_map = aac_chan_configs [ s - > channels - 1 ] ;
if ( ! avctx - > bit_rate ) {
for ( i = 1 ; i < = s - > chan_map [ 0 ] ; i + + ) {
avctx - > bit_rate + = s - > chan_map [ i ] = = TYPE_CPE ? 128000 : /* Pair */
s - > chan_map [ i ] = = TYPE_LFE ? 16000 : /* LFE */
69000 ; /* SCE */
}
}
/* Samplerate */
for ( i = 0 ; i < 16 ; i + + )
if ( avctx - > sample_rate = = avpriv_mpeg4audio_sample_rates [ i ] )
break ;
s - > samplerate_index = i ;
ERROR_IF ( s - > samplerate_index = = 16 | |
s - > samplerate_index > = ff_aac_swb_size_1024_len | |
s - > samplerate_index > = ff_aac_swb_size_128_len ,
" Unsupported sample rate %d \n " , avctx - > sample_rate ) ;
ERROR_IF ( s - > channels > AAC_MAX_CHANNELS | | s - > channels = = 7 ,
" Unsupported number of channels: %d \n " , s - > channels ) ;
/* Bitrate limiting */
WARN_IF ( 1024.0 * avctx - > bit_rate / avctx - > sample_rate > 6144 * s - > channels ,
" Too many bits %f > %d per frame requested, clamping to max \n " ,
1024.0 * avctx - > bit_rate / avctx - > sample_rate ,
6144 * s - > channels ) ;
avctx - > bit_rate = ( int64_t ) FFMIN ( 6144 * s - > channels / 1024.0 * avctx - > sample_rate ,
avctx - > bit_rate ) ;
/* Profile and option setting */
avctx - > profile = avctx - > profile = = FF_PROFILE_UNKNOWN ? FF_PROFILE_AAC_LOW :
avctx - > profile ;
for ( i = 0 ; i < FF_ARRAY_ELEMS ( aacenc_profiles ) ; i + + )
if ( avctx - > profile = = aacenc_profiles [ i ] )
break ;
ERROR_IF ( i = = FF_ARRAY_ELEMS ( aacenc_profiles ) ,
" Unsupported encoding profile: %d \n " , avctx - > profile ) ;
if ( avctx - > profile = = FF_PROFILE_MPEG2_AAC_LOW ) {
avctx - > profile = FF_PROFILE_AAC_LOW ;
ERROR_IF ( s - > options . pred ,
@ -973,15 +983,15 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
" LTP prediction unavailable in the \" aac_main \" profile \n " ) ;
}
s - > profile = avctx - > profile ;
s - > coder = & ff_aac_coders [ s - > options . coder ] ;
/* Coder limitations */
s - > coder = & ff_aac_coders [ s - > options . coder ] ;
if ( s - > options . coder ! = AAC_CODER_TWOLOOP ) {
ERROR_IF ( avctx - > strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL ,
" Coders other than twoloop require -strict -2 and some may be removed in the future \n " ) ;
s - > options . intensity_stereo = 0 ;
s - > options . pns = 0 ;
}
ERROR_IF ( s - > options . ltp & & avctx - > strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL ,
" The LPT profile requires experimental compliance, add -strict -2 to enable! \n " ) ;
@ -1042,6 +1052,11 @@ static const AVClass aacenc_class = {
LIBAVUTIL_VERSION_INT ,
} ;
static const AVCodecDefault aac_encode_defaults [ ] = {
{ " b " , " 0 " } ,
{ NULL }
} ;
AVCodec ff_aac_encoder = {
. name = " aac " ,
. long_name = NULL_IF_CONFIG_SMALL ( " AAC (Advanced Audio Coding) " ) ,
@ -1051,6 +1066,7 @@ AVCodec ff_aac_encoder = {
. init = aac_encode_init ,
. encode2 = aac_encode_frame ,
. close = aac_encode_end ,
. defaults = aac_encode_defaults ,
. supported_samplerates = mpeg4audio_sample_rates ,
. caps_internal = FF_CODEC_CAP_INIT_THREADSAFE ,
. capabilities = AV_CODEC_CAP_SMALL_LAST_FRAME | AV_CODEC_CAP_DELAY ,