diff options
Diffstat (limited to 'libavcodec/aacenc.c')
-rw-r--r-- | libavcodec/aacenc.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c index 4ade340bf7..2775dd9f7a 100644 --- a/libavcodec/aacenc.c +++ b/libavcodec/aacenc.c @@ -57,7 +57,7 @@ static void put_audio_specific_config(AVCodecContext *avctx) AACEncContext *s = avctx->priv_data; init_put_bits(&pb, avctx->extradata, avctx->extradata_size); - put_bits(&pb, 5, 2); //object type - AAC-LC + put_bits(&pb, 5, s->profile+1); //profile put_bits(&pb, 4, s->samplerate_index); //sample rate index put_bits(&pb, 4, s->channels); //GASpecificConfig @@ -748,10 +748,18 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) "Unsupported sample rate %d\n", avctx->sample_rate); ERROR_IF(s->channels > AAC_MAX_CHANNELS, "Unsupported number of channels: %d\n", s->channels); - ERROR_IF(avctx->profile != FF_PROFILE_UNKNOWN && avctx->profile != FF_PROFILE_AAC_LOW, - "Unsupported profile %d\n", avctx->profile); WARN_IF(1024.0 * avctx->bit_rate / avctx->sample_rate > 6144 * s->channels, "Too many bits per frame requested, clamping to max\n"); + if (avctx->profile == FF_PROFILE_AAC_MAIN) { + s->options.pred = 1; + } else if (avctx->profile == FF_PROFILE_AAC_LOW && s->options.pred) { + s->profile = 0; /* Main */ + WARN_IF(1, "Prediction requested, changing profile to AAC-Main\n"); + } else if (avctx->profile == FF_PROFILE_AAC_LOW) { + s->profile = 1; /* Low */ + } else { + ERROR_IF(1, "Unsupported profile %d\n", avctx->profile); + } avctx->bit_rate = (int)FFMIN( 6144 * s->channels / 1024.0 * avctx->sample_rate, |