diff options
| author | Michael Giacomelli <giac2000@hotmail.com> | 2009-10-02 00:47:15 +0000 |
|---|---|---|
| committer | Michael Giacomelli <giac2000@hotmail.com> | 2009-10-02 00:47:15 +0000 |
| commit | e4fb3dc14c0a676776d0139e06361f8758278ade (patch) | |
| tree | 2e24dc98ef906f9d215a74f923e37852aab13da3 | |
| parent | 2d3f20886e9684d82364c2119fd3ee7dfe62dc44 (diff) | |
| download | rockbox-e4fb3dc14c0a676776d0139e06361f8758278ade.zip rockbox-e4fb3dc14c0a676776d0139e06361f8758278ade.tar.gz rockbox-e4fb3dc14c0a676776d0139e06361f8758278ade.tar.bz2 rockbox-e4fb3dc14c0a676776d0139e06361f8758278ade.tar.xz | |
Commit unrolled version of WMA's exponent decode taken from latest ffmpeg. Gives a 1% speedup @ 192kbps.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22871 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/codecs/libwma/wmadeci.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/apps/codecs/libwma/wmadeci.c b/apps/codecs/libwma/wmadeci.c index e0625de..87af30b 100644 --- a/apps/codecs/libwma/wmadeci.c +++ b/apps/codecs/libwma/wmadeci.c @@ -767,11 +767,12 @@ static int decode_exp_vlc(WMADecodeContext *s, int ch) v = pow_10_to_yover16_ptr[last_exp]; max_scale = v; n = *ptr++; - do - { - *q++ = v; - } - while (--n); + switch (n & 3) do { + case 0: *q++ = v; + case 3: *q++ = v; + case 2: *q++ = v; + case 1: *q++ = v; + } while ((n -= 4) > 0); } else { last_exp = 36; } @@ -792,12 +793,12 @@ static int decode_exp_vlc(WMADecodeContext *s, int ch) max_scale = v; } n = *ptr++; - do - { - *q++ = v; - - } - while (--n); + switch (n & 3) do { + case 0: *q++ = v; + case 3: *q++ = v; + case 2: *q++ = v; + case 1: *q++ = v; + } while ((n -= 4) > 0); } s->max_exponent[ch] = max_scale; |