summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorRostislav Pehlivanov <atomnuker@gmail.com>2015-08-21 19:20:22 +0100
committerRostislav Pehlivanov <atomnuker@gmail.com>2015-08-21 19:20:22 +0100
commiteab12d072e657ec748f0259b5281bd6912dccd70 (patch)
treef7790b97014e4040183bf290f22e3004ad3bd77c /libavcodec
parentd1ca7142ac93e713dce5654476b7b91b00ebbef2 (diff)
aacenc: do not reject AAC-Main profile
This commit permits for the use of the Main profile in encoding. The functionality of that profile will be added in the commits following. By itself, this commit does not alter anything. Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
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