summaryrefslogtreecommitdiff
path: root/apps/codecs/Tremor/bitwise.c
diff options
context:
space:
mode:
authorMagnus Holmgren <magnushol@gmail.com>2005-12-28 20:42:24 +0000
committerMagnus Holmgren <magnushol@gmail.com>2005-12-28 20:42:24 +0000
commit41cea75095e6dcd17cff2f57c07553c0ec2a298e (patch)
tree4acd38bc18a591b53526ef4e9948b360e69031c7 /apps/codecs/Tremor/bitwise.c
parent074999ded3b7f41ef25167b06b0c618306ed9d5e (diff)
downloadrockbox-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.c18
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
25const 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
25void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ 34void 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 */
43long oggpack_look_full(oggpack_buffer *b,int bits) ICODE_ATTR; 52long oggpack_look_full(oggpack_buffer *b,int bits) ICODE_ATTR;
44long oggpack_look_full(oggpack_buffer *b,int bits){ 53long 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 */
139long oggpack_read(oggpack_buffer *b,int bits) ICODE_ATTR;
130long oggpack_read(oggpack_buffer *b,int bits){ 140long 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;