From 72dabdfc58064fcb249f26fc7afca2221f18a832 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 29 Jul 2012 19:49:22 +0200 Subject: aacenc: new default cutoff Improves subjective quality Formula and testing by: kamedo2 Signed-off-by: Michael Niedermayer --- libavcodec/aacpsy.c | 2 +- libavcodec/psymodel.c | 3 +++ libavcodec/psymodel.h | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) (limited to 'libavcodec') diff --git a/libavcodec/aacpsy.c b/libavcodec/aacpsy.c index 585a249..a9a8988 100644 --- a/libavcodec/aacpsy.c +++ b/libavcodec/aacpsy.c @@ -292,7 +292,7 @@ static av_cold int psy_3gpp_init(FFPsyContext *ctx) { int i, j, g, start; float prev, minscale, minath, minsnr, pe_min; const int chan_bitrate = ctx->avctx->bit_rate / ctx->avctx->channels; - const int bandwidth = ctx->avctx->cutoff ? ctx->avctx->cutoff : ctx->avctx->sample_rate / 2; + const int bandwidth = ctx->avctx->cutoff ? ctx->avctx->cutoff : AAC_CUTOFF(ctx->avctx); const float num_bark = calc_bark((float)bandwidth); ctx->model_priv_data = av_mallocz(sizeof(AacPsyContext)); diff --git a/libavcodec/psymodel.c b/libavcodec/psymodel.c index a17aecc..bdd2509 100644 --- a/libavcodec/psymodel.c +++ b/libavcodec/psymodel.c @@ -100,6 +100,9 @@ av_cold struct FFPsyPreprocessContext* ff_psy_preprocess_init(AVCodecContext *av if (avctx->cutoff > 0) cutoff_coeff = 2.0 * avctx->cutoff / avctx->sample_rate; + if (!cutoff_coeff && avctx->codec_id == CODEC_ID_AAC) + cutoff_coeff = 2.0 * AAC_CUTOFF(avctx) / avctx->sample_rate; + if (cutoff_coeff) ctx->fcoeffs = ff_iir_filter_init_coeffs(avctx, FF_FILTER_TYPE_BUTTERWORTH, FF_FILTER_MODE_LOWPASS, FILT_ORDER, diff --git a/libavcodec/psymodel.h b/libavcodec/psymodel.h index 317974b..37c8191 100644 --- a/libavcodec/psymodel.h +++ b/libavcodec/psymodel.h @@ -29,6 +29,8 @@ /** maximum number of channels */ #define PSY_MAX_CHANS 20 +#define AAC_CUTOFF(s) (s->bit_rate ? FFMIN3(4000 + s->bit_rate/8, 12000 + s->bit_rate/32, s->sample_rate / 2) : (s->sample_rate / 2)) + /** * single band psychoacoustic information */ -- cgit v1.1