Index: block.c =================================================================== --- block.c (revision 20820) +++ block.c (working copy) @@ -154,7 +154,6 @@ int i; long b_size[2]; LOOKUP_TNC *iramposw; - ogg_int32_t *internal_pcm=NULL; codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; private_state *b=NULL; @@ -213,13 +212,13 @@ _pcmp[1]=NULL; _pcmbp[0]=NULL; _pcmbp[1]=NULL; - - if(NULL != (internal_pcm = iram_malloc(vi->channels*v->pcm_storage*sizeof(ogg_int32_t)))) + v->iram_double_pcm=NULL; + if(NULL != (v->iram_double_pcm = iram_malloc(vi->channels*v->pcm_storage*sizeof(ogg_int32_t)))) { /* one-time initialisation at codec start or on switch from blocksizes greater than IRAM_PCM_END to sizes that fit */ for(i=0;ichannels;i++) - v->pcm[i]=&internal_pcm[i*v->pcm_storage]; + v->pcm[i]=&v->iram_double_pcm[i*v->pcm_storage]; iram_pcm_doublebuffer = true; } else @@ -250,6 +249,7 @@ int vorbis_synthesis_restart(vorbis_dsp_state *v){ vorbis_info *vi=v->vi; codec_setup_info *ci; + int i; if(!v->backend_state)return -1; if(!vi)return -1; @@ -267,6 +267,10 @@ /* indicate to synthesis code that buffer pointers no longer valid (if we're using double pcm buffer) and will need to reset them */ v->reset_pcmb = true; + if(iram_pcm_doublebuffer){ + for(i=0;ichannels;i++) + v->pcm[i]=&v->iram_double_pcm[i*v->pcm_storage]; + } return(0); } Index: ivorbiscodec.h =================================================================== --- ivorbiscodec.h (revision 20820) +++ ivorbiscodec.h (working copy) @@ -78,6 +78,7 @@ void *backend_state; ogg_int32_t *iram_pcm; /* IRAM PCM buffer */ + ogg_int32_t *iram_double_pcm; /* IRAM PCM 2nd buffer */ int iram_pcm_storage; /* size of IRAM PCM buffer */ bool reset_pcmb; } vorbis_dsp_state;