diff options
Diffstat (limited to 'apps/codecs/Tremor/bitwise.c')
-rw-r--r-- | apps/codecs/Tremor/bitwise.c | 62 |
1 files changed, 5 insertions, 57 deletions
diff --git a/apps/codecs/Tremor/bitwise.c b/apps/codecs/Tremor/bitwise.c index 41941f2506..7b6682720a 100644 --- a/apps/codecs/Tremor/bitwise.c +++ b/apps/codecs/Tremor/bitwise.c | |||
@@ -22,45 +22,6 @@ | |||
22 | #include <string.h> | 22 | #include <string.h> |
23 | #include "ogg.h" | 23 | #include "ogg.h" |
24 | 24 | ||
25 | static const unsigned long 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 | |||
34 | /* mark read process as having run off the end */ | ||
35 | static void _adv_halt(oggpack_buffer *b){ | ||
36 | b->headptr=b->head->buffer->data+b->head->begin+b->head->length; | ||
37 | b->headend=-1; | ||
38 | b->headbit=0; | ||
39 | } | ||
40 | |||
41 | /* spans forward, skipping as many bytes as headend is negative; if | ||
42 | headend is zero, simply finds next byte. If we're up to the end | ||
43 | of the buffer, leaves headend at zero. If we've read past the end, | ||
44 | halt the decode process. */ | ||
45 | static void _span(oggpack_buffer *b){ | ||
46 | while(b->headend<1){ | ||
47 | if(b->head->next){ | ||
48 | b->count+=b->head->length; | ||
49 | b->head=b->head->next; | ||
50 | b->headptr=b->head->buffer->data+b->head->begin-b->headend; | ||
51 | b->headend+=b->head->length; | ||
52 | }else{ | ||
53 | /* we've either met the end of decode, or gone past it. halt | ||
54 | only if we're past */ | ||
55 | if(b->headend<0 || b->headbit) | ||
56 | /* read has fallen off the end */ | ||
57 | _adv_halt(b); | ||
58 | |||
59 | break; | ||
60 | } | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ | 25 | void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ |
65 | memset(b,0,sizeof(*b)); | 26 | memset(b,0,sizeof(*b)); |
66 | 27 | ||
@@ -79,9 +40,9 @@ void oggpack_readinit(oggpack_buffer *b,ogg_reference *r){ | |||
79 | } | 40 | } |
80 | 41 | ||
81 | /* Read in bits without advancing the bitptr; bits <= 32 */ | 42 | /* Read in bits without advancing the bitptr; bits <= 32 */ |
82 | long oggpack_look(oggpack_buffer *b,int bits) ICODE_ATTR; | 43 | long oggpack_look_full(oggpack_buffer *b,int bits) ICODE_ATTR; |
83 | long oggpack_look(oggpack_buffer *b,int bits){ | 44 | long oggpack_look_full(oggpack_buffer *b,int bits){ |
84 | unsigned long m=mask[bits]; | 45 | unsigned long m=(1<<bits)-1; |
85 | unsigned long ret=0; | 46 | unsigned long ret=0; |
86 | 47 | ||
87 | bits+=b->headbit; | 48 | bits+=b->headbit; |
@@ -139,19 +100,6 @@ long oggpack_look(oggpack_buffer *b,int bits){ | |||
139 | return ret; | 100 | return ret; |
140 | } | 101 | } |
141 | 102 | ||
142 | /* limited to 32 at a time */ | ||
143 | #if CONFIG_CPU!=PP5020 | ||
144 | /* TODO: This function (and this function only) causes a "relocation | ||
145 | truncated to fit: R_ARM_PC24" error when in IRAM on ARM targets */ | ||
146 | void oggpack_adv(oggpack_buffer *b,int bits) ICODE_ATTR; | ||
147 | #endif | ||
148 | void oggpack_adv(oggpack_buffer *b,int bits){ | ||
149 | bits+=b->headbit; | ||
150 | b->headbit=bits&7; | ||
151 | b->headptr+=bits/8; | ||
152 | if((b->headend-=bits/8)<1)_span(b); | ||
153 | } | ||
154 | |||
155 | /* spans forward and finds next byte. Never halts */ | 103 | /* spans forward and finds next byte. Never halts */ |
156 | static void _span_one(oggpack_buffer *b){ | 104 | static void _span_one(oggpack_buffer *b){ |
157 | while(b->headend<1){ | 105 | while(b->headend<1){ |
@@ -180,7 +128,7 @@ int oggpack_eop(oggpack_buffer *b){ | |||
180 | 128 | ||
181 | /* bits <= 32 */ | 129 | /* bits <= 32 */ |
182 | long oggpack_read(oggpack_buffer *b,int bits){ | 130 | long oggpack_read(oggpack_buffer *b,int bits){ |
183 | unsigned long m=mask[bits]; | 131 | unsigned long m=(1<<bits)-1; |
184 | ogg_uint32_t ret=0; | 132 | ogg_uint32_t ret=0; |
185 | 133 | ||
186 | bits+=b->headbit; | 134 | bits+=b->headbit; |
@@ -235,7 +183,7 @@ long oggpack_read(oggpack_buffer *b,int bits){ | |||
235 | } | 183 | } |
236 | } | 184 | } |
237 | }else{ | 185 | }else{ |
238 | 186 | ||
239 | ret=b->headptr[0]>>b->headbit; | 187 | ret=b->headptr[0]>>b->headbit; |
240 | if(bits>8){ | 188 | if(bits>8){ |
241 | ret|=b->headptr[1]<<(8-b->headbit); | 189 | ret|=b->headptr[1]<<(8-b->headbit); |