382{
384 int32_t xBuf[18], xPrevWin[18];
386 int32_t xo, xe, c, *xp, yLo, yHi;
388
389 acc1 = acc2 = 0;
390 xCurr += 17;
391
392
393 if (gb < 7) {
394
395 es = 7 - gb;
396 for (i = 8; i >= 0; i--) {
397 acc1 = ((*xCurr--) >> es) - acc1;
398 acc2 = acc1 - acc2;
399 acc1 = ((*xCurr--) >> es) - acc1;
400 xBuf[i+9] = acc2;
401 xBuf[i+0] = acc1;
402 xPrev[i] >>= es;
403 }
404 } else {
405 es = 0;
406
407 for (i = 8; i >= 0; i--) {
408 acc1 = (*xCurr--) - acc1;
409 acc2 = acc1 - acc2;
410 acc1 = (*xCurr--) - acc1;
411 xBuf[i+9] = acc2;
412 xBuf[i+0] = acc1;
413 }
414 }
415
416 xBuf[9] >>= 1;
417 xBuf[0] >>= 1;
418
419
422
423 xp = xBuf + 8;
425 mOut = 0;
426 if (btPrev == 0 && btCurr == 0) {
427
429 for (i = 0; i < 9; i++) {
430
431 c = *cp--; xo = *(xp + 9); xe = *xp--;
432
434 xe >>= 2;
435
436 s = -(*xPrev);
437 d = -(xe - xo);
438 (*xPrev++) = xe + xo;
440
447 }
448 } else {
449
450
451
453
455 for (i = 0; i < 9; i++) {
456 c = *cp--; xo = *(xp + 9); xe = *xp--;
457
459 xe >>= 2;
460
461 d = xe - xo;
462 (*xPrev++) = xe + xo;
463
464 yLo = (xPrevWin[i] +
MULSHIFT32(d, wp[i])) * 4L;
465 yHi = (xPrevWin[17-i] +
MULSHIFT32(d, wp[17-i])) * 4L;
470 }
471 }
472
473 xPrev -= 9;
475
476 return mOut;
477}
static int32_t FreqInvertRescale(int32_t *y, int32_t *xPrev, int32_t blockIdx, int32_t es) FL_NOEXCEPT
__inline int32_t MULSHIFT32(int32_t x, int32_t y) FL_NOEXCEPT
Multiply together two 32-bit numbers and return the top 32-bits of the result.
__inline int32_t FASTABS(int32_t x) FL_NOEXCEPT
Absolute value of x.
static void WinPrevious(int32_t *xPrev, int32_t *xPrevWin, int32_t btPrev) FL_NOEXCEPT
const int32_t imdctWin[4][36]
static __inline void idct9(int32_t *x) FL_NOEXCEPT
static const int32_t c18[9]