From 800e3d9a978b246c3a49bd51e65b4de94fa668e4 Mon Sep 17 00:00:00 2001 From: Andree Buschmann Date: Mon, 15 Feb 2010 22:38:01 +0000 Subject: Major optimization of atrac3 codec for Coldfire targets. Moving several number cruncher arrays to IRAM. Decoder is sped up by +50% on h300, decoder now finally is realtime on Coldfire targets as well. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24677 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/libatrac/atrac3.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'apps/codecs/libatrac/atrac3.c') diff --git a/apps/codecs/libatrac/atrac3.c b/apps/codecs/libatrac/atrac3.c index b2f675ef18..3c6ecc9197 100644 --- a/apps/codecs/libatrac/atrac3.c +++ b/apps/codecs/libatrac/atrac3.c @@ -55,9 +55,12 @@ #define FFMIN(a,b) ((a) > (b) ? (b) : (a)) #define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) -static int32_t qmf_window[48] IBSS_ATTR; -static VLC spectral_coeff_tab[7]; -static channel_unit channel_units[2] IBSS_ATTR_LARGE_IRAM; +static VLC spectral_coeff_tab[7]; +static int32_t qmf_window[48] IBSS_ATTR; +static int32_t atrac3_spectrum [2][1024] IBSS_ATTR __attribute__((aligned(16))); +static int32_t atrac3_IMDCT_buf[2][ 512] IBSS_ATTR __attribute__((aligned(16))); +static int32_t atrac3_prevFrame[2][1024] IBSS_ATTR; +static channel_unit channel_units[2] IBSS_ATTR_LARGE_IRAM; /** @@ -425,7 +428,7 @@ static void inverseQuantizeSpectrum(int *mantissas, int32_t *pOut, * @return outSubbands subband counter, fix for broken specification/files */ -int decodeSpectrum (GetBitContext *gb, int32_t *pOut) ICODE_ATTR; +int decodeSpectrum (GetBitContext *gb, int32_t *pOut) ICODE_ATTR_LARGE_IRAM; int decodeSpectrum (GetBitContext *gb, int32_t *pOut) { int numSubbands, codingMode, cnt, first, last, subbWidth; @@ -1228,7 +1231,14 @@ int atrac3_decode_init(ATRAC3Context *q, RMContext *rmctx) q->matrix_coeff_index_next[i] = 3; } + /* Link the iram'ed arrays to the decoder's data structure */ q->pUnits = channel_units; + q->pUnits[0].spectrum = &atrac3_spectrum [0][0]; + q->pUnits[1].spectrum = &atrac3_spectrum [1][0]; + q->pUnits[0].IMDCT_buf = &atrac3_IMDCT_buf[0][0]; + q->pUnits[1].IMDCT_buf = &atrac3_IMDCT_buf[1][0]; + q->pUnits[0].prevFrame = &atrac3_prevFrame[0][0]; + q->pUnits[1].prevFrame = &atrac3_prevFrame[1][0]; return 0; } -- cgit v1.2.3