summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/aacenc.c14
-rw-r--r--libavcodec/aacenc.h2
2 files changed, 13 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,
diff --git a/libavcodec/aacenc.h b/libavcodec/aacenc.h
index dc88f598d9..eb3e378b76 100644
--- a/libavcodec/aacenc.h
+++ b/libavcodec/aacenc.h
@@ -45,6 +45,7 @@ typedef struct AACEncOptions {
int stereo_mode;
int aac_coder;
int pns;
+ int pred;
int intensity_stereo;
} AACEncOptions;
@@ -77,6 +78,7 @@ typedef struct AACEncContext {
AVFloatDSPContext *fdsp;
float *planar_samples[6]; ///< saved preprocessed input
+ int profile; ///< copied from avctx
LPCContext lpc; ///< used by TNS
int samplerate_index; ///< MPEG-4 samplerate index
int channels; ///< channel count