Make the IMDCT temporary working buffer a local variable instead of keeping one for each channel. Saves 4KB of RAM.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22339 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
c74319b2f4
commit
415546921b
2 changed files with 5 additions and 5 deletions
|
@ -665,17 +665,18 @@ static int decodeChannelSoundUnit (GetBitContext *gb, channel_unit *pSnd, int32_
|
|||
if (lastTonal >= 0)
|
||||
numBands = FFMAX((lastTonal + 256) >> 8, numBands);
|
||||
|
||||
|
||||
|
||||
/* Reconstruct time domain samples. */
|
||||
for (band=0; band<4; band++) {
|
||||
int32_t IMDCT_buf[1024];
|
||||
/* Perform the IMDCT step without overlapping. */
|
||||
if (band <= numBands) {
|
||||
IMLT(&(pSnd->spectrum[band*256]), pSnd->IMDCT_buf, band&1);
|
||||
IMLT(&(pSnd->spectrum[band*256]), IMDCT_buf, band&1);
|
||||
} else
|
||||
memset(pSnd->IMDCT_buf, 0, 512 * sizeof(int32_t));
|
||||
memset(IMDCT_buf, 0, 512 * sizeof(int32_t));
|
||||
|
||||
/* gain compensation and overlapping */
|
||||
gainCompensateAndOverlap (pSnd->IMDCT_buf, &(pSnd->prevFrame[band*256]), &(pOut[band*256]),
|
||||
gainCompensateAndOverlap (IMDCT_buf, &(pSnd->prevFrame[band*256]), &(pOut[band*256]),
|
||||
&((pSnd->gainBlock[1 - (pSnd->gcBlkSwitch)]).gBlock[band]),
|
||||
&((pSnd->gainBlock[pSnd->gcBlkSwitch]).gBlock[band]));
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ typedef struct {
|
|||
gain_block gainBlock[2];
|
||||
|
||||
int32_t spectrum[1024] __attribute__((aligned(16)));
|
||||
int32_t IMDCT_buf[1024] __attribute__((aligned(16)));
|
||||
|
||||
int32_t delayBuf1[46]; ///<qmf delay buffers
|
||||
int32_t delayBuf2[46];
|
||||
|
|
Loading…
Reference in a new issue