diff options
author | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-07-01 21:18:42 +0000 |
---|---|---|
committer | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-07-01 21:18:42 +0000 |
commit | 52f17dfe9d5221fdc83b2c5d719fe701dce46f24 (patch) | |
tree | 6fdecfc1e9560e2566214bc8336b401df02663bc /apps/codecs/libfaad/bits.h | |
parent | b013fb76c464b5125026b4d6c95c49a046d0924c (diff) | |
download | rockbox-52f17dfe9d5221fdc83b2c5d719fe701dce46f24.tar.gz rockbox-52f17dfe9d5221fdc83b2c5d719fe701dce46f24.zip |
Submit FS#11445. Speed up of faad (aac) decoder via several optimizations like refactoring some requantization routines, moving several arrays and code tables to IRAM, using an optimized swap32() function and inlining several huffman decoder functions. Decoding is sped up by ~10% (PP5002, PP5022, MCF5249) and ~22% (MCF5250).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27225 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libfaad/bits.h')
-rw-r--r-- | apps/codecs/libfaad/bits.h | 34 |
1 files changed, 6 insertions, 28 deletions
diff --git a/apps/codecs/libfaad/bits.h b/apps/codecs/libfaad/bits.h index 0ebe04b03f..815db59c68 100644 --- a/apps/codecs/libfaad/bits.h +++ b/apps/codecs/libfaad/bits.h | |||
@@ -55,15 +55,11 @@ typedef struct _bitfile | |||
55 | void *buffer; | 55 | void *buffer; |
56 | } bitfile; | 56 | } bitfile; |
57 | 57 | ||
58 | 58 | /* rockbox: use asm optimized swap32() | |
59 | #if defined (_WIN32) && !defined(_WIN32_WCE) && !defined(__MINGW32__) | ||
60 | #define BSWAP(a) __asm mov eax,a __asm bswap eax __asm mov a, eax | ||
61 | #elif defined(LINUX) || defined(DJGPP) || defined(__MINGW32__) | ||
62 | #define BSWAP(a) __asm__ ( "bswapl %0\n" : "=r" (a) : "0" (a) ) | ||
63 | #else | ||
64 | #define BSWAP(a) \ | 59 | #define BSWAP(a) \ |
65 | ((a) = ( ((a)&0xff)<<24) | (((a)&0xff00)<<8) | (((a)>>8)&0xff00) | (((a)>>24)&0xff)) | 60 | ((a) = ( ((a)&0xff)<<24) | (((a)&0xff00)<<8) | (((a)>>8)&0xff00) | (((a)>>24)&0xff)) |
66 | #endif | 61 | */ |
62 | #define BSWAP(a) swap32(a) | ||
67 | 63 | ||
68 | static uint32_t bitmask[] = { | 64 | static uint32_t bitmask[] = { |
69 | 0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, | 65 | 0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, |
@@ -81,7 +77,7 @@ void faad_initbits_rev(bitfile *ld, void *buffer, | |||
81 | uint32_t bits_in_buffer); | 77 | uint32_t bits_in_buffer); |
82 | uint8_t faad_byte_align(bitfile *ld); | 78 | uint8_t faad_byte_align(bitfile *ld); |
83 | uint32_t faad_get_processed_bits(bitfile *ld); | 79 | uint32_t faad_get_processed_bits(bitfile *ld); |
84 | void faad_flushbits_ex(bitfile *ld, uint32_t bits); | 80 | INLINE void faad_flushbits_ex(bitfile *ld, uint32_t bits); |
85 | void faad_rewindbits(bitfile *ld); | 81 | void faad_rewindbits(bitfile *ld); |
86 | uint8_t *faad_getbitbuffer(bitfile *ld, uint32_t bits | 82 | uint8_t *faad_getbitbuffer(bitfile *ld, uint32_t bits |
87 | DEBUGDEC); | 83 | DEBUGDEC); |
@@ -93,28 +89,10 @@ uint32_t faad_origbitbuffer_size(bitfile *ld); | |||
93 | /* circumvent memory alignment errors on ARM */ | 89 | /* circumvent memory alignment errors on ARM */ |
94 | static INLINE uint32_t getdword(void *mem) | 90 | static INLINE uint32_t getdword(void *mem) |
95 | { | 91 | { |
96 | #ifdef ARM | ||
97 | uint32_t tmp; | ||
98 | #ifndef ARCH_IS_BIG_ENDIAN | 92 | #ifndef ARCH_IS_BIG_ENDIAN |
99 | ((uint8_t*)&tmp)[0] = ((uint8_t*)mem)[3]; | 93 | return BSWAP(*(uint32_t*)mem); |
100 | ((uint8_t*)&tmp)[1] = ((uint8_t*)mem)[2]; | ||
101 | ((uint8_t*)&tmp)[2] = ((uint8_t*)mem)[1]; | ||
102 | ((uint8_t*)&tmp)[3] = ((uint8_t*)mem)[0]; | ||
103 | #else | ||
104 | ((uint8_t*)&tmp)[0] = ((uint8_t*)mem)[0]; | ||
105 | ((uint8_t*)&tmp)[1] = ((uint8_t*)mem)[1]; | ||
106 | ((uint8_t*)&tmp)[2] = ((uint8_t*)mem)[2]; | ||
107 | ((uint8_t*)&tmp)[3] = ((uint8_t*)mem)[3]; | ||
108 | #endif | ||
109 | |||
110 | return tmp; | ||
111 | #else | 94 | #else |
112 | uint32_t tmp; | 95 | return *(uint32_t*)mem; |
113 | tmp = *(uint32_t*)mem; | ||
114 | #ifndef ARCH_IS_BIG_ENDIAN | ||
115 | BSWAP(tmp); | ||
116 | #endif | ||
117 | return tmp; | ||
118 | #endif | 96 | #endif |
119 | } | 97 | } |
120 | 98 | ||