diff options
author | Magnus Holmgren <magnushol@gmail.com> | 2005-12-28 20:42:24 +0000 |
---|---|---|
committer | Magnus Holmgren <magnushol@gmail.com> | 2005-12-28 20:42:24 +0000 |
commit | 41cea75095e6dcd17cff2f57c07553c0ec2a298e (patch) | |
tree | 4acd38bc18a591b53526ef4e9948b360e69031c7 /apps/codecs/Tremor/bitwise.c | |
parent | 074999ded3b7f41ef25167b06b0c618306ed9d5e (diff) | |
download | rockbox-41cea75095e6dcd17cff2f57c07553c0ec2a298e.tar.gz rockbox-41cea75095e6dcd17cff2f57c07553c0ec2a298e.zip |
Vorbis optimizations from Brandon Low (part of patch 1387611). Reduces cpu boost ratio on a test track by about 6 percentage points. Also fixes broken simulator playback caused by my previous Tremor commit.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8291 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/Tremor/bitwise.c')
-rw-r--r-- | apps/codecs/Tremor/bitwise.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/apps/codecs/Tremor/bitwise.c b/apps/codecs/Tremor/bitwise.c index 7b6682720a..743389b008 100644 --- a/apps/codecs/Tremor/bitwise.c +++ b/apps/codecs/Tremor/bitwise.c | |||
@@ -22,6 +22,15 @@ | |||
22 | #include <string.h> | 22 | #include <string.h> |
23 | #include "ogg.h" | 23 | #include "ogg.h" |
24 | 24 | ||
25 | const unsigned long oggpack_mask[] ICONST_ATTR = | ||
26 | {0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f, | ||
27 | 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff, | ||
28 | 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff, | ||
29 | 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff, | ||
30 | 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff, | ||
31 | 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff, | ||
32 | 0x3fffffff,0x7fffffff,0xffffffff }; | ||
33 | |||
25 | void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ | 34 | void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ |
26 | memset(b,0,sizeof(*b)); | 35 | memset(b,0,sizeof(*b)); |
27 | 36 | ||
@@ -42,7 +51,7 @@ void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ | |||
42 | /* Read in bits without advancing the bitptr; bits <= 32 */ | 51 | /* Read in bits without advancing the bitptr; bits <= 32 */ |
43 | long oggpack_look_full(oggpack_buffer *b,int bits) ICODE_ATTR; | 52 | long oggpack_look_full(oggpack_buffer *b,int bits) ICODE_ATTR; |
44 | long oggpack_look_full(oggpack_buffer *b,int bits){ | 53 | long oggpack_look_full(oggpack_buffer *b,int bits){ |
45 | unsigned long m=(1<<bits)-1; | 54 | unsigned long m=oggpack_mask[bits]; |
46 | unsigned long ret=0; | 55 | unsigned long ret=0; |
47 | 56 | ||
48 | bits+=b->headbit; | 57 | bits+=b->headbit; |
@@ -127,8 +136,9 @@ int oggpack_eop(oggpack_buffer *b){ | |||
127 | } | 136 | } |
128 | 137 | ||
129 | /* bits <= 32 */ | 138 | /* bits <= 32 */ |
139 | long oggpack_read(oggpack_buffer *b,int bits) ICODE_ATTR; | ||
130 | long oggpack_read(oggpack_buffer *b,int bits){ | 140 | long oggpack_read(oggpack_buffer *b,int bits){ |
131 | unsigned long m=(1<<bits)-1; | 141 | unsigned long m=oggpack_mask[bits]; |
132 | ogg_uint32_t ret=0; | 142 | ogg_uint32_t ret=0; |
133 | 143 | ||
134 | bits+=b->headbit; | 144 | bits+=b->headbit; |
@@ -198,8 +208,8 @@ long oggpack_read(oggpack_buffer *b,int bits){ | |||
198 | } | 208 | } |
199 | } | 209 | } |
200 | 210 | ||
201 | b->headptr+=bits/8; | 211 | b->headptr+=((unsigned)bits)/8; |
202 | b->headend-=bits/8; | 212 | b->headend-=((unsigned)bits)/8; |
203 | } | 213 | } |
204 | 214 | ||
205 | ret&=m; | 215 | ret&=m; |