diff options
author | Måns Rullgård <mans@mansr.com> | 2010-01-11 20:21:26 +0000 |
---|---|---|
committer | Måns Rullgård <mans@mansr.com> | 2010-01-11 20:21:26 +0000 |
commit | dc0d86facecd5b017fec4cd1cc3b0a55b31b0014 (patch) | |
tree | 8fb5a9a6fb8ab249e8b85f378aa54f2383fc4069 /libavcodec/aac.c | |
parent | 4bf0faaafe9f9bc4b0d760561265d72daab9e27e (diff) | |
download | ffmpeg-streaming-dc0d86facecd5b017fec4cd1cc3b0a55b31b0014.zip ffmpeg-streaming-dc0d86facecd5b017fec4cd1cc3b0a55b31b0014.tar.gz |
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
Diffstat (limited to 'libavcodec/aac.c')
-rw-r--r-- | libavcodec/aac.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libavcodec/aac.c b/libavcodec/aac.c index d23d4da..d6aa364 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]; } |