void vorbis_dsp_clear(vorbis_dsp_state *v){ int i; if(v){ vorbis_info *vi=v->vi; codec_setup_info *ci=(vi?vi->codec_setup:NULL); private_state *b=v->backend_state; if(b){ if(b->ve){ _ve_envelope_clear(b->ve); _ogg_free(b->ve); } if(b->transform[0]){ mdct_clear(b->transform[0][0]); _ogg_free(b->transform[0][0]); _ogg_free(b->transform[0]); } if(b->transform[1]){ mdct_clear(b->transform[1][0]); _ogg_free(b->transform[1][0]); _ogg_free(b->transform[1]); } if(b->flr){ if(ci) for(i=0;i<ci->floors;i++) _floor_P[ci->floor_type[i]]-> free_look(b->flr[i]); _ogg_free(b->flr); } if(b->residue){ if(ci) for(i=0;i<ci->residues;i++) _residue_P[ci->residue_type[i]]-> free_look(b->residue[i]); _ogg_free(b->residue); } if(b->psy){ if(ci) for(i=0;i<ci->psys;i++) _vp_psy_clear(b->psy+i); _ogg_free(b->psy); } if(b->psy_g_look)_vp_global_free(b->psy_g_look); vorbis_bitrate_clear(&b->bms); drft_clear(&b->fft_look[0]); drft_clear(&b->fft_look[1]); } if(v->pcm){ if(vi) for(i=0;i<vi->channels;i++) if(v->pcm[i])_ogg_free(v->pcm[i]); _ogg_free(v->pcm); if(v->pcmret)_ogg_free(v->pcmret); } if(b){ /* free header, header1, header2 */ if(b->header)_ogg_free(b->header); if(b->header1)_ogg_free(b->header1); if(b->header2)_ogg_free(b->header2); _ogg_free(b); } memset(v,0,sizeof(*v)); } }
void vorbis_dsp_clear(vorbis_dsp_state *v){ int i,j,k; if(v){ vorbis_info *vi=v->vi; codec_setup_info *ci=(vi?vi->codec_setup:NULL); backend_lookup_state *b=v->backend_state; if(b){ if(b->window[0][0][0]){ for(i=0;i<VI_WINDOWB;i++) if(b->window[0][0][0][i])_ogg_free(b->window[0][0][0][i]); _ogg_free(b->window[0][0][0]); for(j=0;j<2;j++) for(k=0;k<2;k++){ for(i=0;i<VI_WINDOWB;i++) if(b->window[1][j][k][i])_ogg_free(b->window[1][j][k][i]); _ogg_free(b->window[1][j][k]); } } if(b->ve){ _ve_envelope_clear(b->ve); _ogg_free(b->ve); } if(b->transform[0]){ mdct_clear(b->transform[0][0]); _ogg_free(b->transform[0][0]); _ogg_free(b->transform[0]); } if(b->transform[1]){ mdct_clear(b->transform[1][0]); _ogg_free(b->transform[1][0]); _ogg_free(b->transform[1]); } if(b->psy_g_look)_vp_global_free(b->psy_g_look); vorbis_bitrate_clear(&b->bms); } if(v->pcm){ for(i=0;i<vi->channels;i++) if(v->pcm[i])_ogg_free(v->pcm[i]); _ogg_free(v->pcm); if(v->pcmret)_ogg_free(v->pcmret); } /* free mode lookups; these are actually vorbis_look_mapping structs */ if(ci){ for(i=0;i<ci->modes;i++){ int mapnum=ci->mode_param[i]->mapping; int maptype=ci->map_type[mapnum]; if(b && b->mode)_mapping_P[maptype]->free_look(b->mode[i]); } /* free codebooks */ for(i=0;i<ci->books;i++) if(b && b->fullbooks)vorbis_book_clear(b->fullbooks+i); } if(b){ if(b->mode)_ogg_free(b->mode); if(b->fullbooks)_ogg_free(b->fullbooks); /* free header, header1, header2 */ if(b->header)_ogg_free(b->header); if(b->header1)_ogg_free(b->header1); if(b->header2)_ogg_free(b->header2); _ogg_free(b); } memset(v,0,sizeof(*v)); } }