summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Giacomelli <giac2000@hotmail.com>2009-10-02 00:47:15 +0000
committerMichael Giacomelli <giac2000@hotmail.com>2009-10-02 00:47:15 +0000
commite4fb3dc14c0a676776d0139e06361f8758278ade (patch)
tree2e24dc98ef906f9d215a74f923e37852aab13da3
parent2d3f20886e9684d82364c2119fd3ee7dfe62dc44 (diff)
downloadrockbox-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.c23
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;