91 int cachedBits, padBits, len, startBits, linBits, maxBits, minBits;
93 unsigned short cw, *tBase, *tCurr;
101 startBits = bitsLeft;
114 cachedBits = (8 - bitOffset) & 0x07;
116 cache = (
unsigned int)(*buf++) << (32 - cachedBits);
117 bitsLeft -= cachedBits;
121 for (i = 0; i < nVals; i+=2) {
126 }
else if (tabType ==
oneShot) {
133 if (bitsLeft >= 16) {
135 cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
136 cache |= (
unsigned int)(*buf++) << (16 - cachedBits);
141 if (cachedBits + bitsLeft <= 0)
return -1;
142 if (bitsLeft > 0) cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
143 if (bitsLeft > 8) cache |= (
unsigned int)(*buf++) << (16 - cachedBits);
144 cachedBits += bitsLeft;
147 cache &= (
signed int)(
int32_t)0x80000000 >> (cachedBits - 1);
149 cachedBits += padBits;
153 while (nVals > 0 && cachedBits >= 11 ) {
154 cw = tBase[cache >> (32 - maxBits)];
163 if (cachedBits < padBits)
171 bitsLeft += (cachedBits - padBits);
172 return (startBits - bitsLeft);
178 if (bitsLeft >= 16) {
180 cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
181 cache |= (
unsigned int)(*buf++) << (16 - cachedBits);
186 if (cachedBits + bitsLeft <= 0)
return -1;
187 if (bitsLeft > 0) cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
188 if (bitsLeft > 8) cache |= (
unsigned int)(*buf++) << (16 - cachedBits);
189 cachedBits += bitsLeft;
192 cache &= (
signed int)(
int32_t)0x80000000 >> (cachedBits - 1);
194 cachedBits += padBits;
198 while (nVals > 0 && cachedBits >= 11 ) {
200 cw = tCurr[(cache >> (32 - maxBits)) + 1];
203 cachedBits -= maxBits;
215 minBits = linBits + 1 + (
y ? 1 : 0);
216 if (cachedBits + bitsLeft < minBits)
218 while (cachedBits < minBits) {
219 cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
224 cachedBits += bitsLeft;
226 cache &= (
signed int)(
int32_t)0x80000000 >> (cachedBits - 1);
228 x += (int)(cache >> (32 - linBits));
229 cachedBits -= linBits;
232 if (
x) {
ApplySign(
x, cache); cache <<= 1; cachedBits--;}
235 minBits = linBits + 1;
236 if (cachedBits + bitsLeft < minBits)
238 while (cachedBits < minBits) {
239 cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
244 cachedBits += bitsLeft;
246 cache &= (
signed int)(
int32_t)0x80000000 >> (cachedBits - 1);
248 y += (int)(cache >> (32 - linBits));
249 cachedBits -= linBits;
252 if (
y) {
ApplySign(
y, cache); cache <<= 1; cachedBits--;}
255 if (cachedBits < padBits)
264 bitsLeft += (cachedBits - padBits);
265 return (startBits - bitsLeft);
295 int len, maxBits, cachedBits, padBits;
297 unsigned char cw, *tBase;
307 cachedBits = (8 - bitOffset) & 0x07;
309 cache = (
unsigned int)(*buf++) << (32 - cachedBits);
310 bitsLeft -= cachedBits;
313 while (i < (nVals - 3)) {
315 if (bitsLeft >= 16) {
317 cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
318 cache |= (
unsigned int)(*buf++) << (16 - cachedBits);
323 if (cachedBits + bitsLeft <= 0)
return i;
324 if (bitsLeft > 0) cache |= (
unsigned int)(*buf++) << (24 - cachedBits);
325 if (bitsLeft > 8) cache |= (
unsigned int)(*buf++) << (16 - cachedBits);
326 cachedBits += bitsLeft;
329 cache &= (
signed int)(
int32_t)0x80000000 >> (cachedBits - 1);
331 cachedBits += padBits;
335 while (i < (nVals - 3) && cachedBits >= 10 ) {
336 cw = tBase[cache >> (32 - maxBits)];
347 if (cachedBits < padBits)
387 int r1Start, r2Start, rEnd[4];
388 int i, w, bitsUsed, bitsLeft;
389 const unsigned char *startBuf = buf;
397 if (!mp3DecInfo || !mp3DecInfo->FrameHeaderPS || !mp3DecInfo->SideInfoPS || !mp3DecInfo->ScaleFactorInfoPS || !mp3DecInfo->HuffmanInfoPS)
401 si = ((
SideInfo *)(mp3DecInfo->SideInfoPS));
402 sis = &si->
sis[gr][ch];
405 if (huffBlockBits < 0)
418 r1Start = fh->
sfBand->
l[6] + 2*w;
429 rEnd[2] =
MIN(r2Start, rEnd[3]);
430 rEnd[1] =
MIN(r1Start, rEnd[3]);
437 bitsLeft = huffBlockBits;
438 for (i = 0; i < 3; i++) {
440 if (bitsUsed < 0 || bitsUsed > bitsLeft)
444 buf += (bitsUsed + *bitOffset) >> 3;
445 *bitOffset = (bitsUsed + *bitOffset) & 0x07;
446 bitsLeft -= bitsUsed;
459 buf += (bitsLeft + *bitOffset) >> 3;
460 *bitOffset = (bitsLeft + *bitOffset) & 0x07;
462 return (buf - startBuf);