mirror of
https://github.com/Rockbox/rockbox.git
synced 2026-04-12 00:47:49 -04:00
Put two hot silk arrays on real stack (iram)
Speeds up decoding of 16kbps test file by 16.7MHz on H300. Change-Id: I39c90e3b423ae8e2ee5c2b88c5dcec8d48807f77
This commit is contained in:
parent
a602ea3d3d
commit
b592a7a8a5
2 changed files with 10 additions and 6 deletions
|
|
@ -49,7 +49,7 @@ void silk_decode_core(
|
|||
opus_int32 LTP_pred_Q13, LPC_pred_Q10, Gain_Q10, inv_gain_Q31, gain_adj_Q16, rand_seed, offset_Q10;
|
||||
opus_int32 *pred_lag_ptr, *pexc_Q14, *pres_Q14;
|
||||
VARDECL( opus_int32, res_Q14 );
|
||||
VARDECL( opus_int32, sLPC_Q14 );
|
||||
/* VARDECL( opus_int32, sLPC_Q14 ); */
|
||||
SAVE_STACK;
|
||||
|
||||
silk_assert( psDec->prev_gain_Q16 != 0 );
|
||||
|
|
@ -57,7 +57,8 @@ void silk_decode_core(
|
|||
ALLOC( sLTP, psDec->ltp_mem_length, opus_int16 );
|
||||
ALLOC( sLTP_Q15, psDec->ltp_mem_length + psDec->frame_length, opus_int32 );
|
||||
ALLOC( res_Q14, psDec->subfr_length, opus_int32 );
|
||||
ALLOC( sLPC_Q14, psDec->subfr_length + MAX_LPC_ORDER, opus_int32 );
|
||||
/* ALLOC( sLPC_Q14, psDec->subfr_length + MAX_LPC_ORDER, opus_int32 ); */
|
||||
opus_int32 sLPC_Q14[psDec->subfr_length + MAX_LPC_ORDER]; /* worst case is 80 + 16 */
|
||||
|
||||
offset_Q10 = silk_Quantization_Offsets_Q10[ psDec->indices.signalType >> 1 ][ psDec->indices.quantOffsetType ];
|
||||
|
||||
|
|
|
|||
|
|
@ -72,10 +72,13 @@ void silk_resampler_private_IIR_FIR(
|
|||
silk_resampler_state_struct *S = (silk_resampler_state_struct *)SS;
|
||||
opus_int32 nSamplesIn;
|
||||
opus_int32 max_index_Q16, index_increment_Q16;
|
||||
VARDECL( opus_int16, buf );
|
||||
SAVE_STACK;
|
||||
/* VARDECL( opus_int16, buf );
|
||||
SAVE_STACK; */
|
||||
|
||||
ALLOC( buf, 2 * S->batchSize + RESAMPLER_ORDER_FIR_12, opus_int16 );
|
||||
/* ALLOC( buf, 2 * S->batchSize + RESAMPLER_ORDER_FIR_12, opus_int16 ); */
|
||||
|
||||
/* worst case = 2*16*10+8 = 328 * 2 = 656bytes */
|
||||
opus_int16 buf[2 * S->batchSize + RESAMPLER_ORDER_FIR_12];
|
||||
|
||||
/* Copy buffered samples to start of buffer */
|
||||
silk_memcpy( buf, S->sFIR.i16, RESAMPLER_ORDER_FIR_12 * sizeof( opus_int16 ) );
|
||||
|
|
@ -103,5 +106,5 @@ void silk_resampler_private_IIR_FIR(
|
|||
|
||||
/* Copy last part of filtered signal to the state for the next call */
|
||||
silk_memcpy( S->sFIR.i16, &buf[ nSamplesIn << 1 ], RESAMPLER_ORDER_FIR_12 * sizeof( opus_int16 ) );
|
||||
RESTORE_STACK;
|
||||
/* RESTORE_STACK; */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue