forked from len0rd/rockbox
opus: allocate buffers for X and freq in iram
speeds up decoding of 64kbps test file by 19MHz on h300 (cf) and 2.5MHz on c200 (pp) Change-Id: Idacd2f8962c20c518055d586daeec6b932b7ded2 Signed-off-by: Nils Wallménius <nils@rockbox.org>
This commit is contained in:
parent
341e2c46ca
commit
b6bcb1338e
1 changed files with 15 additions and 2 deletions
|
@ -2296,6 +2296,9 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, opus_val16 * OPUS_R
|
||||||
RESTORE_STACK;
|
RESTORE_STACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define FREQ_X_BUF_SIZE (2*8*120) /* stereo * nbShortMdcts * shortMdctSize */
|
||||||
|
static celt_sig s_freq[FREQ_X_BUF_SIZE] IBSS_ATTR MEM_ALIGN_ATTR; /* 7680 byte */
|
||||||
|
static celt_norm s_X[FREQ_X_BUF_SIZE] IBSS_ATTR MEM_ALIGN_ATTR; /* 3840 byte */
|
||||||
int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *data, int len, opus_val16 * OPUS_RESTRICT pcm, int frame_size, ec_dec *dec)
|
int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *data, int len, opus_val16 * OPUS_RESTRICT pcm, int frame_size, ec_dec *dec)
|
||||||
{
|
{
|
||||||
int c, i, N;
|
int c, i, N;
|
||||||
|
@ -2398,8 +2401,18 @@ int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *dat
|
||||||
if (effEnd > st->mode->effEBands)
|
if (effEnd > st->mode->effEBands)
|
||||||
effEnd = st->mode->effEBands;
|
effEnd = st->mode->effEBands;
|
||||||
|
|
||||||
ALLOC(freq, IMAX(CC,C)*N, celt_sig); /**< Interleaved signal MDCTs */
|
/**< Interleaved signal MDCTs */
|
||||||
ALLOC(X, C*N, celt_norm); /**< Interleaved normalised MDCTs */
|
if (FREQ_X_BUF_SIZE >= IMAX(CC,C)*N)
|
||||||
|
freq = s_freq;
|
||||||
|
else
|
||||||
|
ALLOC(freq, IMAX(CC,C)*N, celt_sig);
|
||||||
|
|
||||||
|
/**< Interleaved normalised MDCTs */
|
||||||
|
if (FREQ_X_BUF_SIZE >= C*N)
|
||||||
|
X = s_X;
|
||||||
|
else
|
||||||
|
ALLOC(X, C*N, celt_norm);
|
||||||
|
|
||||||
ALLOC(bandE, st->mode->nbEBands*C, celt_ener);
|
ALLOC(bandE, st->mode->nbEBands*C, celt_ener);
|
||||||
c=0; do
|
c=0; do
|
||||||
for (i=0;i<M*st->mode->eBands[st->start];i++)
|
for (i=0;i<M*st->mode->eBands[st->start];i++)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue