Commit 80d44277 authored by Nathan Caldwell's avatar Nathan Caldwell Committed by Alex Converse

aacenc: Move Q^3/4 calculation to it's own table

This should be moved to tablegen at some point.
Signed-off-by: 's avatarAlex Converse <alex.converse@gmail.com>
parent 025ccf1f
...@@ -110,14 +110,15 @@ static av_always_inline float quantize_and_encode_band_cost_template( ...@@ -110,14 +110,15 @@ static av_always_inline float quantize_and_encode_band_cost_template(
int *bits, int BT_ZERO, int BT_UNSIGNED, int *bits, int BT_ZERO, int BT_UNSIGNED,
int BT_PAIR, int BT_ESC) 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 int q_idx = 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 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; const float CLIPPED_ESCAPE = 165140.0f*IQ;
int i, j; int i, j;
float cost = 0; float cost = 0;
const int dim = BT_PAIR ? 2 : 4; const int dim = BT_PAIR ? 2 : 4;
int resbits = 0; int resbits = 0;
const float Q34 = sqrtf(Q * sqrtf(Q));
const int range = aac_cb_range[cb]; const int range = aac_cb_range[cb];
const int maxval = aac_cb_maxval[cb]; const int maxval = aac_cb_maxval[cb];
int off; int off;
......
...@@ -52,6 +52,8 @@ ...@@ -52,6 +52,8 @@
return AVERROR(EINVAL); \ return AVERROR(EINVAL); \
} }
float ff_aac_pow34sf_tab[428];
static const uint8_t swb_size_1024_96[] = { 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, 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, 12, 12, 12, 12, 12, 16, 16, 24, 28, 36, 44,
...@@ -691,6 +693,9 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) ...@@ -691,6 +693,9 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
ff_aac_tableinit(); 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; return 0;
fail: fail:
aac_encode_end(avctx); aac_encode_end(avctx);
......
...@@ -74,4 +74,6 @@ typedef struct AACEncContext { ...@@ -74,4 +74,6 @@ typedef struct AACEncContext {
DECLARE_ALIGNED(32, float, scoefs)[1024]; ///< scaled coefficients DECLARE_ALIGNED(32, float, scoefs)[1024]; ///< scaled coefficients
} AACEncContext; } AACEncContext;
extern float ff_aac_pow34sf_tab[428];
#endif /* AVCODEC_AACENC_H */ #endif /* AVCODEC_AACENC_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment