static vpx_codec_err_t vp8_destroy(vpx_codec_alg_priv_t *ctx) { vp8_remove_decoder_instances(&ctx->yv12_frame_buffers); vpx_free(ctx); return VPX_CODEC_OK; }
int vp8_create_decoder_instances(struct frame_buffers *fb, VP8D_CONFIG *oxcf) { /* decoder instance for single thread mode */ fb->pbi[0] = create_decompressor(oxcf); if (!fb->pbi[0]) return VPX_CODEC_ERROR; #if CONFIG_MULTITHREAD if (setjmp(fb->pbi[0]->common.error.jmp)) { vp8_remove_decoder_instances(fb); memset(fb->pbi, 0, sizeof(fb->pbi)); vpx_clear_system_state(); return VPX_CODEC_ERROR; } fb->pbi[0]->common.error.setjmp = 1; fb->pbi[0]->max_threads = oxcf->max_threads; vp8_decoder_create_threads(fb->pbi[0]); fb->pbi[0]->common.error.setjmp = 0; #endif return VPX_CODEC_OK; }