From c13eba29ff5615cc74a7818e42cc9d464a7c7075 Mon Sep 17 00:00:00 2001 From: Tomasz Malesinski Date: Thu, 27 Sep 2007 21:58:51 +0000 Subject: FS #7833: Optimizations to the Vorbis codec: - ARM assembly version of parts of mdct, - special case for vorbis_book_decodevv_add for 2 channels and even book->dim, - store the output in vb->pcm if possible, as it is usually in IRAM as opposed to v->pcm. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14875 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/Tremor/block.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'apps/codecs/Tremor/block.c') diff --git a/apps/codecs/Tremor/block.c b/apps/codecs/Tremor/block.c index 80cbb7809c..e609fc44f7 100644 --- a/apps/codecs/Tremor/block.c +++ b/apps/codecs/Tremor/block.c @@ -171,6 +171,7 @@ static int _vds_init(vorbis_dsp_state *v,vorbis_info *vi){ v->pcm_storage=ci->blocksizes[1]; v->pcm=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcm)); + v->pcmb=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcmb)); v->pcmret=(ogg_int32_t **)_ogg_malloc(vi->channels*sizeof(*v->pcmret)); for(i=0;ichannels;i++) @@ -308,25 +309,28 @@ int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){ /* large/large */ ogg_int32_t *pcm=v->pcm[j]+prevCenter; ogg_int32_t *p=vb->pcm[j]; - vect_add(pcm, p, n1); + vect_add(p, pcm, n1); + v->pcmb[j]=p; }else{ /* large/small */ ogg_int32_t *pcm=v->pcm[j]+prevCenter+n1/2-n0/2; ogg_int32_t *p=vb->pcm[j]; vect_add(pcm, p, n0); + v->pcmb[j]=v->pcm[j]+prevCenter; } }else{ if(v->W){ /* small/large */ ogg_int32_t *pcm=v->pcm[j]+prevCenter; ogg_int32_t *p=vb->pcm[j]+n1/2-n0/2; - vect_add(pcm, p, n0); - vect_copy(&pcm[n0], &p[n0], n1/2-n0/2); + vect_add(p, pcm, n0); + v->pcmb[j]=p; }else{ /* small/small */ ogg_int32_t *pcm=v->pcm[j]+prevCenter; ogg_int32_t *p=vb->pcm[j]; - vect_add(pcm, p, n0); + vect_add(p, pcm, n0); + v->pcmb[j]=p; } } @@ -351,10 +355,8 @@ int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){ v->pcm_returned=thisCenter; v->pcm_current=thisCenter; }else{ - v->pcm_returned=prevCenter; - v->pcm_current=prevCenter+ - ci->blocksizes[v->lW]/4+ - ci->blocksizes[v->W]/4; + v->pcm_returned=0; + v->pcm_current=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4; } } @@ -436,7 +438,7 @@ int vorbis_synthesis_pcmout(vorbis_dsp_state *v,ogg_int32_t ***pcm){ if(pcm){ int i; for(i=0;ichannels;i++) - v->pcmret[i]=v->pcm[i]+v->pcm_returned; + v->pcmret[i]=v->pcmb[i]+v->pcm_returned; *pcm=v->pcmret; } return(v->pcm_current-v->pcm_returned); -- cgit v1.2.3