diff options
author | Nils Wallménius <nils@rockbox.org> | 2012-10-04 19:20:55 +0200 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2012-10-04 19:20:55 +0200 |
commit | 6d2ad505dccda640439b6fa75fb742caf2981e11 (patch) | |
tree | 97a9759cb9230ffeb0b685932eaa8b44f5a5d6ef /lib/rbcodec/codecs/libopus/celt/vq.c | |
parent | 283277e5ab95b3c74a9bee0bef25cb55d55e016b (diff) | |
download | rockbox-6d2ad505dccda640439b6fa75fb742caf2981e11.tar.gz rockbox-6d2ad505dccda640439b6fa75fb742caf2981e11.zip |
opus: put arrays frequently used by pulse decoding on the stack
speeds up decoding of a 64kbps test file by 14MHz on h300 (cf)
and 1MHz on c200 (pp)
Change-Id: I852cb66808676ea51109423f5b70cfc8782dd109
Diffstat (limited to 'lib/rbcodec/codecs/libopus/celt/vq.c')
-rw-r--r-- | lib/rbcodec/codecs/libopus/celt/vq.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/rbcodec/codecs/libopus/celt/vq.c b/lib/rbcodec/codecs/libopus/celt/vq.c index 6a00edf9cd..f6b6e4fc64 100644 --- a/lib/rbcodec/codecs/libopus/celt/vq.c +++ b/lib/rbcodec/codecs/libopus/celt/vq.c | |||
@@ -325,12 +325,16 @@ unsigned alg_unquant(celt_norm *X, int N, int K, int spread, int B, | |||
325 | int i; | 325 | int i; |
326 | opus_val32 Ryy; | 326 | opus_val32 Ryy; |
327 | unsigned collapse_mask; | 327 | unsigned collapse_mask; |
328 | VARDECL(int, iy); | 328 | /* VARDECL(int, iy); |
329 | SAVE_STACK; | 329 | SAVE_STACK; */ |
330 | |||
331 | /* the difference between the last two values of eband5ms shifted by maxLM | ||
332 | which is 22 << 3 with the static mode */ | ||
333 | int iy[176]; | ||
330 | 334 | ||
331 | celt_assert2(K>0, "alg_unquant() needs at least one pulse"); | 335 | celt_assert2(K>0, "alg_unquant() needs at least one pulse"); |
332 | celt_assert2(N>1, "alg_unquant() needs at least two dimensions"); | 336 | celt_assert2(N>1, "alg_unquant() needs at least two dimensions"); |
333 | ALLOC(iy, N, int); | 337 | /* ALLOC(iy, N, int); */ |
334 | decode_pulses(iy, N, K, dec); | 338 | decode_pulses(iy, N, K, dec); |
335 | Ryy = 0; | 339 | Ryy = 0; |
336 | i=0; | 340 | i=0; |
@@ -340,7 +344,7 @@ unsigned alg_unquant(celt_norm *X, int N, int K, int spread, int B, | |||
340 | normalise_residual(iy, X, N, Ryy, gain); | 344 | normalise_residual(iy, X, N, Ryy, gain); |
341 | exp_rotation(X, N, -1, B, K, spread); | 345 | exp_rotation(X, N, -1, B, K, spread); |
342 | collapse_mask = extract_collapse_mask(iy, N, B); | 346 | collapse_mask = extract_collapse_mask(iy, N, B); |
343 | RESTORE_STACK; | 347 | /* RESTORE_STACK; */ |
344 | return collapse_mask; | 348 | return collapse_mask; |
345 | } | 349 | } |
346 | 350 | ||