From 9aee40d967ca56229e0d4f15e65c484548ad1a38 Mon Sep 17 00:00:00 2001 From: Benjamin Larsson Date: Sat, 19 Aug 2006 08:46:52 +0000 Subject: SIMD vector optimizations. 3% faster overall decoding. Originally committed as revision 6026 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/wmadec.c | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) (limited to 'libavcodec/wmadec.c') diff --git a/libavcodec/wmadec.c b/libavcodec/wmadec.c index 6f33d2a8f8..8f44817318 100644 --- a/libavcodec/wmadec.c +++ b/libavcodec/wmadec.c @@ -130,6 +130,7 @@ typedef struct WMADecodeContext { float lsp_pow_e_table[256]; float lsp_pow_m_table1[(1 << LSP_POW_BITS)]; float lsp_pow_m_table2[(1 << LSP_POW_BITS)]; + DSPContext dsp; #ifdef TRACE int frame_count; @@ -228,6 +229,8 @@ static int wma_decode_init(AVCodecContext * avctx) s->bit_rate = avctx->bit_rate; s->block_align = avctx->block_align; + dsputil_init(&s->dsp, avctx); + if (avctx->codec->id == CODEC_ID_WMAV1) { s->version = 1; } else { @@ -1109,7 +1112,7 @@ static int wma_decode_block(WMADecodeContext *s) if (s->channel_coded[ch]) { DECLARE_ALIGNED_16(FFTSample, output[BLOCK_MAX_SIZE * 2]); float *ptr; - int i, n4, index, n; + int n4, index, n; n = s->block_len; n4 = s->block_len / 2; @@ -1118,27 +1121,17 @@ static int wma_decode_block(WMADecodeContext *s) /* XXX: optimize all that by build the window and multipying/adding at the same time */ - /* multiply by the window */ - for(i=0;iframe_len / 2) + s->block_pos - n4; ptr = &s->frame_out[ch][index]; - for(i=0;idsp.vector_fmul_add_add(ptr,window,output,ptr,0,2*n,1); /* specific fast case for ms-stereo : add to second channel if it is not coded */ if (s->ms_stereo && !s->channel_coded[1]) { ptr = &s->frame_out[1][index]; - for(i=0;idsp.vector_fmul_add_add(ptr,window,output,ptr,0,2*n,1); } } } -- cgit v1.2.3