[FFmpeg-cvslog] aacenc: do not reject AAC-Main profile

Rostislav Pehlivanov git at videolan.org
Fri Aug 21 20:47:01 CEST 2015


ffmpeg | branch: master | Rostislav Pehlivanov <atomnuker at gmail.com> | Fri Aug 21 19:20:22 2015 +0100| [eab12d072e657ec748f0259b5281bd6912dccd70] | committer: Rostislav Pehlivanov

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 at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=eab12d072e657ec748f0259b5281bd6912dccd70
---

 libavcodec/aacenc.c |   14 +++++++++++---
 libavcodec/aacenc.h |    2 ++
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c
index 4ade340..2775dd9 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 dc88f59..eb3e378 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



More information about the ffmpeg-cvslog mailing list