summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2010-01-11 20:21:26 +0000
committerMåns Rullgård <mans@mansr.com>2010-01-11 20:21:26 +0000
commitdc0d86facecd5b017fec4cd1cc3b0a55b31b0014 (patch)
tree8fb5a9a6fb8ab249e8b85f378aa54f2383fc4069
parent4bf0faaafe9f9bc4b0d760561265d72daab9e27e (diff)
AAC: use table for cbrtf(n)*n
The maximum length of escape_sequence is 21 bits, so adjust limit in code to match this. Up to 10% faster on Cortex-A8. Originally committed as revision 21153 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/aac.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/libavcodec/aac.c b/libavcodec/aac.c
index d23d4da2c4..d6aa364538 100644
--- a/libavcodec/aac.c
+++ b/libavcodec/aac.c
@@ -101,6 +101,7 @@ union float754 {
static VLC vlc_scalefactors;
static VLC vlc_spectral[11];
+static float cbrt_tab[1<<13];
static ChannelElement *get_che(AACContext *ac, int type, int elem_id)
{
@@ -555,6 +556,10 @@ static av_cold int aac_decode_init(AVCodecContext *avccontext)
ff_init_ff_sine_windows(10);
ff_init_ff_sine_windows( 7);
+ if (!cbrt_tab[(1<<13) - 1])
+ for (i = 0; i < 1<<13; i++)
+ cbrt_tab[i] = cbrtf(i) * i;
+
return 0;
}
@@ -949,7 +954,7 @@ static int decode_spectrum_and_dequant(AACContext *ac, float coef[1024],
return -1;
}
n = (1 << n) + get_bits(gb, n);
- coef[coef_tmp_idx + j] *= cbrtf(n) * n;
+ coef[coef_tmp_idx + j] *= cbrt_tab[n];
} else
coef[coef_tmp_idx + j] *= vq_ptr[j];
}