From 80d44277e6ae6291a1ddba476939bb394a2ed822 Mon Sep 17 00:00:00 2001 From: Nathan Caldwell Date: Fri, 6 Jan 2012 14:24:37 -0700 Subject: [PATCH] aacenc: Move Q^3/4 calculation to it's own table This should be moved to tablegen at some point. Signed-off-by: Alex Converse --- libavcodec/aaccoder.c | 7 ++++--- libavcodec/aacenc.c | 5 +++++ libavcodec/aacenc.h | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/libavcodec/aaccoder.c b/libavcodec/aaccoder.c index ec78acc936..72be2a272b 100644 --- a/libavcodec/aaccoder.c +++ b/libavcodec/aaccoder.c @@ -110,14 +110,15 @@ static av_always_inline float quantize_and_encode_band_cost_template( int *bits, int BT_ZERO, int BT_UNSIGNED, int BT_PAIR, int BT_ESC) { - const float IQ = ff_aac_pow2sf_tab[POW_SF2_ZERO + scale_idx - SCALE_ONE_POS + SCALE_DIV_512]; - const float Q = ff_aac_pow2sf_tab[POW_SF2_ZERO - scale_idx + SCALE_ONE_POS - SCALE_DIV_512]; + const int q_idx = POW_SF2_ZERO - scale_idx + SCALE_ONE_POS - SCALE_DIV_512; + const float Q = ff_aac_pow2sf_tab [q_idx]; + const float Q34 = ff_aac_pow34sf_tab[q_idx]; + const float IQ = ff_aac_pow2sf_tab [POW_SF2_ZERO + scale_idx - SCALE_ONE_POS + SCALE_DIV_512]; const float CLIPPED_ESCAPE = 165140.0f*IQ; int i, j; float cost = 0; const int dim = BT_PAIR ? 2 : 4; int resbits = 0; - const float Q34 = sqrtf(Q * sqrtf(Q)); const int range = aac_cb_range[cb]; const int maxval = aac_cb_maxval[cb]; int off; diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c index 3bd04bffe1..8356ca8db3 100644 --- a/libavcodec/aacenc.c +++ b/libavcodec/aacenc.c @@ -52,6 +52,8 @@ return AVERROR(EINVAL); \ } +float ff_aac_pow34sf_tab[428]; + static const uint8_t swb_size_1024_96[] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 12, 12, 12, 12, 12, 16, 16, 24, 28, 36, 44, @@ -691,6 +693,9 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) ff_aac_tableinit(); + for (i = 0; i < 428; i++) + ff_aac_pow34sf_tab[i] = sqrt(ff_aac_pow2sf_tab[i] * sqrt(ff_aac_pow2sf_tab[i])); + return 0; fail: aac_encode_end(avctx); diff --git a/libavcodec/aacenc.h b/libavcodec/aacenc.h index 1f5e6503ca..79d542f70a 100644 --- a/libavcodec/aacenc.h +++ b/libavcodec/aacenc.h @@ -74,4 +74,6 @@ typedef struct AACEncContext { DECLARE_ALIGNED(32, float, scoefs)[1024]; ///< scaled coefficients } AACEncContext; +extern float ff_aac_pow34sf_tab[428]; + #endif /* AVCODEC_AACENC_H */