summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2005-11-03 18:14:37 +0000
committerDave Chapman <dave@dchapman.com>2005-11-03 18:14:37 +0000
commit439ba9bdbb059d9065aa4d26688e50ab90ed5930 (patch)
tree77405510a11cbee41e492920f1da75938e5fc295
parent6f7f921ebee5589c7bc9e1196392c0ae7f28f96c (diff)
downloadrockbox-439ba9bdbb059d9065aa4d26688e50ab90ed5930.tar.gz
rockbox-439ba9bdbb059d9065aa4d26688e50ab90ed5930.zip
Move code into IRAM and explicitly inline some functions (gcc was inlining them anyway, but this way is better)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7741 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/libalac/alac.c33
-rw-r--r--apps/codecs/libalac/decomp.h6
2 files changed, 30 insertions, 9 deletions
diff --git a/apps/codecs/libalac/alac.c b/apps/codecs/libalac/alac.c
index 22d04d2def..638ca93c16 100644
--- a/apps/codecs/libalac/alac.c
+++ b/apps/codecs/libalac/alac.c
@@ -105,7 +105,7 @@ void alac_set_info(alac_file *alac, char *inputbuffer)
105/* stream reading */ 105/* stream reading */
106 106
107/* supports reading 1 to 16 bits, in big endian format */ 107/* supports reading 1 to 16 bits, in big endian format */
108static uint32_t readbits_16(alac_file *alac, int bits) 108static inline uint32_t readbits_16(alac_file *alac, int bits)
109{ 109{
110 uint32_t result; 110 uint32_t result;
111 int new_accumulator; 111 int new_accumulator;
@@ -137,7 +137,7 @@ static uint32_t readbits_16(alac_file *alac, int bits)
137} 137}
138 138
139/* supports reading 1 to 32 bits, in big endian format */ 139/* supports reading 1 to 32 bits, in big endian format */
140static uint32_t readbits(alac_file *alac, int bits) 140static inline uint32_t readbits(alac_file *alac, int bits)
141{ 141{
142 int32_t result = 0; 142 int32_t result = 0;
143 143
@@ -153,7 +153,7 @@ static uint32_t readbits(alac_file *alac, int bits)
153} 153}
154 154
155/* reads a single bit */ 155/* reads a single bit */
156static int readbit(alac_file *alac) 156static inline int readbit(alac_file *alac)
157{ 157{
158 int result; 158 int result;
159 int new_accumulator; 159 int new_accumulator;
@@ -173,7 +173,7 @@ static int readbit(alac_file *alac)
173 return result; 173 return result;
174} 174}
175 175
176static void unreadbits(alac_file *alac, int bits) 176static inline void unreadbits(alac_file *alac, int bits)
177{ 177{
178 int new_accumulator = (alac->input_buffer_bitaccumulator - bits); 178 int new_accumulator = (alac->input_buffer_bitaccumulator - bits);
179 179
@@ -187,7 +187,7 @@ static void unreadbits(alac_file *alac, int bits)
187/* hideously inefficient. could use a bitmask search, 187/* hideously inefficient. could use a bitmask search,
188 * alternatively bsr on x86, 188 * alternatively bsr on x86,
189 */ 189 */
190static int count_leading_zeros(int32_t input) 190static inline int count_leading_zeros(int32_t input)
191{ 191{
192 int i = 0; 192 int i = 0;
193 while (!(0x80000000 & input) && i < 32) 193 while (!(0x80000000 & input) && i < 32)
@@ -206,7 +206,16 @@ void basterdised_rice_decompress(alac_file *alac,
206 int rice_kmodifier, /* arg424->d */ 206 int rice_kmodifier, /* arg424->d */
207 int rice_historymult, /* arg424->c */ 207 int rice_historymult, /* arg424->c */
208 int rice_kmodifier_mask /* arg424->e */ 208 int rice_kmodifier_mask /* arg424->e */
209 ) 209 ) ICODE_ATTR;
210void basterdised_rice_decompress(alac_file *alac,
211 int32_t *output_buffer,
212 int output_size,
213 int readsamplesize, /* arg_10 */
214 int rice_initialhistory, /* arg424->b */
215 int rice_kmodifier, /* arg424->d */
216 int rice_historymult, /* arg424->c */
217 int rice_kmodifier_mask /* arg424->e */
218 )
210{ 219{
211 int output_count; 220 int output_count;
212 unsigned int history = rice_initialhistory; 221 unsigned int history = rice_initialhistory;
@@ -344,6 +353,13 @@ static void predictor_decompress_fir_adapt(int32_t *error_buffer,
344 int readsamplesize, 353 int readsamplesize,
345 int16_t *predictor_coef_table, 354 int16_t *predictor_coef_table,
346 int predictor_coef_num, 355 int predictor_coef_num,
356 int predictor_quantitization) ICODE_ATTR;
357static void predictor_decompress_fir_adapt(int32_t *error_buffer,
358 int32_t *buffer_out,
359 int output_size,
360 int readsamplesize,
361 int16_t *predictor_coef_table,
362 int predictor_coef_num,
347 int predictor_quantitization) 363 int predictor_quantitization)
348{ 364{
349 int i; 365 int i;
@@ -609,6 +625,11 @@ void deinterlace_16(int32_t* buffer0,
609 int32_t* buffer1, 625 int32_t* buffer1,
610 int numsamples, 626 int numsamples,
611 uint8_t interlacing_shift, 627 uint8_t interlacing_shift,
628 uint8_t interlacing_leftweight) ICODE_ATTR;
629void deinterlace_16(int32_t* buffer0,
630 int32_t* buffer1,
631 int numsamples,
632 uint8_t interlacing_shift,
612 uint8_t interlacing_leftweight) 633 uint8_t interlacing_leftweight)
613{ 634{
614 int i; 635 int i;
diff --git a/apps/codecs/libalac/decomp.h b/apps/codecs/libalac/decomp.h
index caa9f90059..853c9d884a 100644
--- a/apps/codecs/libalac/decomp.h
+++ b/apps/codecs/libalac/decomp.h
@@ -31,12 +31,12 @@ typedef struct
31 /* end setinfo stuff */ 31 /* end setinfo stuff */
32} alac_file; 32} alac_file;
33 33
34void create_alac(int samplesize, int numchannels, alac_file* alac); 34void create_alac(int samplesize, int numchannels, alac_file* alac) ICODE_ATTR;
35int alac_decode_frame(alac_file *alac, 35int alac_decode_frame(alac_file *alac,
36 unsigned char *inbuffer, 36 unsigned char *inbuffer,
37 int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE], 37 int32_t outputbuffer[ALAC_MAX_CHANNELS][ALAC_BLOCKSIZE],
38 void (*yield)(void)); 38 void (*yield)(void)) ICODE_ATTR;
39void alac_set_info(alac_file *alac, char *inputbuffer); 39void alac_set_info(alac_file *alac, char *inputbuffer) ICODE_ATTR;
40 40
41#endif /* __ALAC__DECOMP_H */ 41#endif /* __ALAC__DECOMP_H */
42 42