From 270d9eaee80c96d23d249d05b6d11eca8381486e Mon Sep 17 00:00:00 2001 From: Andree Buschmann Date: Fri, 28 Sep 2012 18:46:43 +0200 Subject: opus: statically allocate decoder state in iram MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Speeds up decoding of a 64kbps test file 26MHz on H300 (cf) and 2MHz on c200 (pp) Change-Id: I2fb4fe6c0a29321087e02fbd17fd1b1eb84e7b57 Signed-off-by: Nils Wallménius --- lib/rbcodec/codecs/libopus/opus_decoder.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/rbcodec/codecs/libopus/opus_decoder.c b/lib/rbcodec/codecs/libopus/opus_decoder.c index 7103b183b8..3d42bb2e70 100644 --- a/lib/rbcodec/codecs/libopus/opus_decoder.c +++ b/lib/rbcodec/codecs/libopus/opus_decoder.c @@ -131,10 +131,13 @@ int opus_decoder_init(OpusDecoder *st, opus_int32 Fs, int channels) return OPUS_OK; } +#define STATIC_DECODER_SIZE 26532 /* 26486 for 32bit, 26532 for 64bit environment */ +static char s_dec[STATIC_DECODER_SIZE] IBSS_ATTR MEM_ALIGN_ATTR; + OpusDecoder *opus_decoder_create(opus_int32 Fs, int channels, int *error) { int ret; - OpusDecoder *st; + OpusDecoder *st = NULL; if ((Fs!=48000&&Fs!=24000&&Fs!=16000&&Fs!=12000&&Fs!=8000) || (channels!=1&&channels!=2)) { @@ -142,7 +145,12 @@ OpusDecoder *opus_decoder_create(opus_int32 Fs, int channels, int *error) *error = OPUS_BAD_ARG; return NULL; } - st = (OpusDecoder *)opus_alloc(opus_decoder_get_size(channels)); + + if (STATIC_DECODER_SIZE >= opus_decoder_get_size(channels)) + st = (OpusDecoder *)s_dec; + else + st = (OpusDecoder *)opus_alloc(opus_decoder_get_size(channels)); + if (st == NULL) { if (error) -- cgit v1.2.3