forked from len0rd/rockbox
opus: allocate mdct f2 buffer in iram
Speeds up decoding of 64kbps test file by 6.3MHz on h300 (cf) and 1.2MHz on c200 (pp). Signed-off-by: Nils Wallménius <nils@rockbox.org> Change-Id: I08c2c332153abcbef9447c81986777fd2fcc73fe
This commit is contained in:
parent
b6bcb1338e
commit
d7799aaf33
1 changed files with 17 additions and 5 deletions
|
@ -208,22 +208,34 @@ void clt_mdct_forward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define S_F_BUF_SIZE (1920>>1) /* N = 1920 for static modes */
|
||||||
|
static kiss_fft_scalar s_f2[S_F_BUF_SIZE] IBSS_ATTR MEM_ALIGN_ATTR;
|
||||||
void clt_mdct_backward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * OPUS_RESTRICT out,
|
void clt_mdct_backward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * OPUS_RESTRICT out,
|
||||||
const opus_val16 * OPUS_RESTRICT window, int overlap, int shift, int stride)
|
const opus_val16 * OPUS_RESTRICT window, int overlap, int shift, int stride)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int N, N2, N4;
|
int N, N2, N4;
|
||||||
kiss_twiddle_scalar sine;
|
kiss_twiddle_scalar sine;
|
||||||
/* VARDECL(kiss_fft_scalar, f); */
|
VARDECL(kiss_fft_scalar, f);
|
||||||
VARDECL(kiss_fft_scalar, f2);
|
VARDECL(kiss_fft_scalar, f2);
|
||||||
SAVE_STACK;
|
SAVE_STACK;
|
||||||
N = l->n; /* static modes => N = 1920 */
|
N = l->n;
|
||||||
N >>= shift;
|
N >>= shift;
|
||||||
N2 = N>>1;
|
N2 = N>>1;
|
||||||
N4 = N>>2;
|
N4 = N>>2;
|
||||||
/* ALLOC(f, N2, kiss_fft_scalar); */
|
kiss_fft_scalar s_f[S_F_BUF_SIZE];
|
||||||
kiss_fft_scalar f[N2]; /* worst case 3840b */
|
|
||||||
ALLOC(f2, N2, kiss_fft_scalar);
|
if (S_F_BUF_SIZE >= N2)
|
||||||
|
{
|
||||||
|
f = s_f;
|
||||||
|
f2 = s_f2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ALLOC(f , N2, kiss_fft_scalar);
|
||||||
|
ALLOC(f2, N2, kiss_fft_scalar);
|
||||||
|
}
|
||||||
|
|
||||||
/* sin(x) ~= x here */
|
/* sin(x) ~= x here */
|
||||||
#ifdef FIXED_POINT
|
#ifdef FIXED_POINT
|
||||||
sine = TRIG_UPSCALE*(QCONST16(0.7853981f, 15)+N2)/N;
|
sine = TRIG_UPSCALE*(QCONST16(0.7853981f, 15)+N2)/N;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue