diff options
Diffstat (limited to 'apps/codecs/libmad/bit.c')
-rw-r--r-- | apps/codecs/libmad/bit.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/apps/codecs/libmad/bit.c b/apps/codecs/libmad/bit.c index 6c984ef078..f132347c25 100644 --- a/apps/codecs/libmad/bit.c +++ b/apps/codecs/libmad/bit.c | |||
@@ -82,14 +82,18 @@ unsigned short const crc_table[256] = { | |||
82 | 82 | ||
83 | # define CRC_POLY 0x8005 | 83 | # define CRC_POLY 0x8005 |
84 | 84 | ||
85 | #if INT_MAX != 0x7fffffff | ||
86 | #warning current libmad bit handling is optimized for architectures using 32 bit integers | ||
87 | #endif | ||
88 | |||
85 | /* | 89 | /* |
86 | * NAME: bit->init() | 90 | * NAME: bit->init() |
87 | * DESCRIPTION: initialize bit pointer struct | 91 | * DESCRIPTION: initialize bit pointer struct |
88 | */ | 92 | */ |
89 | void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte) | 93 | void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte) |
90 | { | 94 | { |
91 | bitptr->ptr = (unsigned long*)((long)byte & ~3); | 95 | bitptr->ptr = (uint32_t*)((uintptr_t)byte & ~3); |
92 | bitptr->readbit = ((unsigned long)byte & 3) << 3; | 96 | bitptr->readbit = ((uintptr_t)byte & 3) << 3; |
93 | } | 97 | } |
94 | 98 | ||
95 | /* | 99 | /* |
@@ -129,14 +133,14 @@ void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len) | |||
129 | * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value | 133 | * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value |
130 | */ | 134 | */ |
131 | 135 | ||
132 | unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len) ICODE_ATTR; | 136 | uint32_t mad_bit_read(struct mad_bitptr *bitptr, unsigned int len) ICODE_ATTR; |
133 | unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len) | 137 | uint32_t mad_bit_read(struct mad_bitptr *bitptr, unsigned int len) |
134 | { | 138 | { |
135 | unsigned long *curr = &bitptr->ptr[bitptr->readbit>>5]; | 139 | uint32_t *curr = &bitptr->ptr[bitptr->readbit>>5]; |
136 | 140 | ||
137 | if(len) | 141 | if(len) |
138 | { | 142 | { |
139 | unsigned long r = betoh32(curr[0]) << (bitptr->readbit & 31); | 143 | uint32_t r = betoh32(curr[0]) << (bitptr->readbit & 31); |
140 | 144 | ||
141 | if((bitptr->readbit & 31) + len > 32) | 145 | if((bitptr->readbit & 31) + len > 32) |
142 | r += betoh32(curr[1]) >> (-bitptr->readbit & 31); | 146 | r += betoh32(curr[1]) >> (-bitptr->readbit & 31); |
@@ -154,7 +158,7 @@ unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len) | |||
154 | * DESCRIPTION: write an arbitrary number of bits | 158 | * DESCRIPTION: write an arbitrary number of bits |
155 | */ | 159 | */ |
156 | void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len, | 160 | void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len, |
157 | unsigned long value) | 161 | uint32_t value) |
158 | { | 162 | { |
159 | unsigned char *ptr; | 163 | unsigned char *ptr; |
160 | 164 | ||
@@ -174,7 +178,7 @@ unsigned short mad_bit_crc(struct mad_bitptr bitptr, unsigned int len, | |||
174 | register unsigned int crc; | 178 | register unsigned int crc; |
175 | 179 | ||
176 | for (crc = init; len >= 32; len -= 32) { | 180 | for (crc = init; len >= 32; len -= 32) { |
177 | register unsigned long data; | 181 | register uint32_t data; |
178 | 182 | ||
179 | data = mad_bit_read(&bitptr, 32); | 183 | data = mad_bit_read(&bitptr, 32); |
180 | 184 | ||