static vpx_codec_err_t vp8_destroy(vpx_codec_alg_priv_t *ctx) { int i; vp9_remove_decompressor(ctx->pbi); for (i = NELEMENTS(ctx->mmaps) - 1; i >= 0; i--) { if (ctx->mmaps[i].dtor) ctx->mmaps[i].dtor(&ctx->mmaps[i]); } return VPX_CODEC_OK; }
VP9D_PTR vp9_create_decompressor(VP9D_CONFIG *oxcf) { VP9D_COMP *const pbi = vpx_memalign(32, sizeof(VP9D_COMP)); VP9_COMMON *const cm = pbi ? &pbi->common : NULL; if (!cm) return NULL; vp9_zero(*pbi); // Initialize the references to not point to any frame buffers. memset(&cm->ref_frame_map, -1, sizeof(cm->ref_frame_map)); if (setjmp(cm->error.jmp)) { cm->error.setjmp = 0; vp9_remove_decompressor(pbi); return NULL; } cm->error.setjmp = 1; vp9_initialize_dec(); vp9_create_common(cm); pbi->oxcf = *oxcf; pbi->ready_for_new_data = 1; cm->current_video_frame = 0; // vp9_init_dequantizer() is first called here. Add check in // frame_init_dequantizer() to avoid unnecessary calling of // vp9_init_dequantizer() for every frame. vp9_init_dequantizer(cm); vp9_loop_filter_init(cm); cm->error.setjmp = 0; pbi->decoded_key_frame = 0; init_macroblockd(pbi); vp9_worker_init(&pbi->lf_worker); return pbi; }
static vpx_codec_err_t vp9_destroy(vpx_codec_alg_priv_t *ctx) { if (ctx->pbi) vp9_remove_decompressor(ctx->pbi); return VPX_CODEC_OK; }