diff options
Diffstat (limited to 'apps/codecs/libtremor/block.c')
-rw-r--r-- | apps/codecs/libtremor/block.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/apps/codecs/libtremor/block.c b/apps/codecs/libtremor/block.c index a86668a521..0eaf7bc820 100644 --- a/apps/codecs/libtremor/block.c +++ b/apps/codecs/libtremor/block.c | |||
@@ -199,7 +199,10 @@ static int _vds_init(vorbis_dsp_state *v,vorbis_info *vi){ | |||
199 | if(!ci->fullbooks){ | 199 | if(!ci->fullbooks){ |
200 | ci->fullbooks=(codebook *)_ogg_calloc(ci->books,sizeof(*ci->fullbooks)); | 200 | ci->fullbooks=(codebook *)_ogg_calloc(ci->books,sizeof(*ci->fullbooks)); |
201 | for(i=0;i<ci->books;i++){ | 201 | for(i=0;i<ci->books;i++){ |
202 | vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]); | 202 | if(ci->book_param[i]==NULL) |
203 | goto abort_books; | ||
204 | if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i])) | ||
205 | goto abort_books; | ||
203 | /* decode codebooks are now standalone after init */ | 206 | /* decode codebooks are now standalone after init */ |
204 | vorbis_staticbook_destroy(ci->book_param[i]); | 207 | vorbis_staticbook_destroy(ci->book_param[i]); |
205 | ci->book_param[i]=NULL; | 208 | ci->book_param[i]=NULL; |
@@ -247,6 +250,15 @@ static int _vds_init(vorbis_dsp_state *v,vorbis_info *vi){ | |||
247 | } | 250 | } |
248 | 251 | ||
249 | return(0); | 252 | return(0); |
253 | abort_books: | ||
254 | for(i=0;i<ci->books;i++){ | ||
255 | if(ci->book_param[i]!=NULL){ | ||
256 | vorbis_staticbook_destroy(ci->book_param[i]); | ||
257 | ci->book_param[i]=NULL; | ||
258 | } | ||
259 | } | ||
260 | vorbis_dsp_clear(v); | ||
261 | return -1; | ||
250 | } | 262 | } |
251 | 263 | ||
252 | int vorbis_synthesis_restart(vorbis_dsp_state *v){ | 264 | int vorbis_synthesis_restart(vorbis_dsp_state *v){ |