aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2009-11-23 22:22:16 +0000
committerMåns Rullgård <mans@mansr.com>2009-11-23 22:22:16 +0000
commit168f92ffaa724df953be7be27d5bc7d7edd457d3 (patch)
tree31ed1c5524ca1aee92e8a1b31077c2df16cb9238
parent60fa95683df6c17939bb43d83edc724e7819b864 (diff)
downloadffmpeg-168f92ffaa724df953be7be27d5bc7d7edd457d3.tar.gz
WMA: extend exponent table up to 75
Fixes issue 1565. Originally committed as revision 20593 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/wmadec.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c
index 5a31963520..baaf930a0d 100644
--- a/libavcodec/wmadec.c
+++ b/libavcodec/wmadec.c
@@ -240,8 +240,8 @@ static void decode_exp_lsp(WMACodecContext *s, int ch)
s->block_len, lsp_coefs);
}
-/** pow(10, i / 16.0) for i in -60..67 */
-static const float pow_tab[128] = {
+/** pow(10, i / 16.0) for i in -60..75 */
+static const float pow_tab[] = {
1.7782794100389e-04, 2.0535250264571e-04,
2.3713737056617e-04, 2.7384196342644e-04,
3.1622776601684e-04, 3.6517412725484e-04,
@@ -306,6 +306,10 @@ static const float pow_tab[128] = {
7.4989420933246e+03, 8.6596432336007e+03,
1.0000000000000e+04, 1.1547819846895e+04,
1.3335214321633e+04, 1.5399265260595e+04,
+ 1.7782794100389e+04, 2.0535250264571e+04,
+ 2.3713737056617e+04, 2.7384196342644e+04,
+ 3.1622776601684e+04, 3.6517412725484e+04,
+ 4.2169650342858e+04, 4.8696752516586e+04,
};
/**
@@ -345,8 +349,11 @@ static int decode_exp_vlc(WMACodecContext *s, int ch)
return -1;
/* NOTE: this offset is the same as MPEG4 AAC ! */
last_exp += code - 60;
- if ((unsigned)last_exp + 60 > FF_ARRAY_ELEMS(pow_tab))
+ if ((unsigned)last_exp + 60 > FF_ARRAY_ELEMS(pow_tab)) {
+ av_log(s->avctx, AV_LOG_ERROR, "Exponent out of range: %d\n",
+ last_exp);
return -1;
+ }
v = ptab[last_exp];
iv = iptab[last_exp];
if (v > max_scale)