From 54fd30e7fde135cff28258a1c7971ac6d7d92b20 Mon Sep 17 00:00:00 2001 From: Tomek Malesinski Date: Sun, 23 Sep 2007 19:56:08 +0200 Subject: [PATCH] Tremor: store result of overlapping in vb->pcm if possible, because it is in IRAM as opposed to v->pcm. --- apps/codecs/Tremor/block.c | 20 +++++++++++--------- apps/codecs/Tremor/ivorbiscodec.h | 1 + 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/apps/codecs/Tremor/block.c b/apps/codecs/Tremor/block.c index 80cbb78..e609fc4 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); diff --git a/apps/codecs/Tremor/ivorbiscodec.h b/apps/codecs/Tremor/ivorbiscodec.h index b3e6322..2574a11 100644 --- a/apps/codecs/Tremor/ivorbiscodec.h +++ b/apps/codecs/Tremor/ivorbiscodec.h @@ -59,6 +59,7 @@ typedef struct vorbis_dsp_state{ vorbis_info *vi; ogg_int32_t **pcm; + ogg_int32_t **pcmb; ogg_int32_t **pcmret; int pcm_storage; int pcm_current; -- 1.4.4.4