diff --git a/vp8/dixie/dixie.c b/vp8/dixie/dixie.c index dd1b2060f62478464e31f8a3530777b04b5cde6e..be3a6a92e205314e0328c89632e0b9ca53d7a0dc 100644 --- a/vp8/dixie/dixie.c +++ b/vp8/dixie/dixie.c @@ -525,3 +525,12 @@ vp8_dixie_decode_frame(struct vp8_decoder_ctx *ctx, return ctx_->error.error_code; } + + +void +vp8_dixie_decode_destroy(struct vp8_decoder_ctx *ctx) +{ + vp8_dixie_predict_destroy(ctx); + vp8_dixie_tokens_destroy(ctx); + vp8_dixie_modemv_destroy(ctx); +} diff --git a/vp8/dixie/dixie.h b/vp8/dixie/dixie.h index e3e7a95b6caf0c918dc2eb9735c695b950011c5b..eab5f2245eae699cec3e3efeab5336f35425cde7 100644 --- a/vp8/dixie/dixie.h +++ b/vp8/dixie/dixie.h @@ -315,6 +315,10 @@ void vp8_dixie_decode_init(struct vp8_decoder_ctx *ctx); +void +vp8_dixie_decode_destroy(struct vp8_decoder_ctx *ctx); + + vpx_codec_err_t vp8_parse_frame_header(const unsigned char *data, unsigned int sz, diff --git a/vp8/dixie/modemv.c b/vp8/dixie/modemv.c index cc1f3e5fd6510d60732e8aed4fbcabfcfe950dc6..60ba197f58fbcda9ab6eef6c59957b934d06ba52 100644 --- a/vp8/dixie/modemv.c +++ b/vp8/dixie/modemv.c @@ -666,3 +666,13 @@ vp8_dixie_modemv_init(struct vp8_decoder_ctx *ctx) ctx->mb_info_rows = ctx->mb_info_rows_storage + 1; } + + +void +vp8_dixie_modemv_destroy(struct vp8_decoder_ctx *ctx) +{ + free(ctx->mb_info_storage); + ctx->mb_info_storage = NULL; + free(ctx->mb_info_rows_storage); + ctx->mb_info_rows_storage = NULL; +} diff --git a/vp8/dixie/modemv.h b/vp8/dixie/modemv.h index 9afa187e87b1a9b7ea39e81e5f13ede076fde9b9..75cb5ef9f0d3058a01ff2aa2f299f955ffda1eb0 100644 --- a/vp8/dixie/modemv.h +++ b/vp8/dixie/modemv.h @@ -14,6 +14,10 @@ void vp8_dixie_modemv_init(struct vp8_decoder_ctx *ctx); +void +vp8_dixie_modemv_destroy(struct vp8_decoder_ctx *ctx); + + void vp8_dixie_modemv_process_row(struct vp8_decoder_ctx *ctx, struct bool_decoder *bool, diff --git a/vp8/dixie/predict.c b/vp8/dixie/predict.c index 05da4cd04f85d167a068f23f8683e984824abe5d..0a5f4cac629ccc191279b7cc453de13aeb581cc0 100644 --- a/vp8/dixie/predict.c +++ b/vp8/dixie/predict.c @@ -1836,6 +1836,20 @@ vp8_dixie_predict_init(struct vp8_decoder_ctx *ctx) } +void +vp8_dixie_predict_destroy(struct vp8_decoder_ctx *ctx) +{ + int i; + + for (i = 0; i < NUM_REF_FRAMES; i++) + { + vpx_img_free(&ctx->frame_strg[i].img); + ctx->frame_strg[i].ref_cnt = 0; + ctx->ref_frames[i] = NULL; + } +} + + void vp8_dixie_predict_process_row(struct vp8_decoder_ctx *ctx, unsigned int row, diff --git a/vp8/dixie/predict.h b/vp8/dixie/predict.h index 1eee7576961f0e68ddd70d33926680b39aa0a1e1..7e3a9c29ce6eb6567393399ac2bd49004d367397 100644 --- a/vp8/dixie/predict.h +++ b/vp8/dixie/predict.h @@ -14,6 +14,10 @@ void vp8_dixie_predict_init(struct vp8_decoder_ctx *ctx); +void +vp8_dixie_predict_destroy(struct vp8_decoder_ctx *ctx); + + void vp8_dixie_predict_process_row(struct vp8_decoder_ctx *ctx, unsigned int row, diff --git a/vp8/dixie/tokens.c b/vp8/dixie/tokens.c index 4a73be0a914302e95420a9426979735589b08e28..787aa202c2475c4d9ef79766210ea392d4a1c34d 100644 --- a/vp8/dixie/tokens.c +++ b/vp8/dixie/tokens.c @@ -479,3 +479,15 @@ vp8_dixie_tokens_init(struct vp8_decoder_ctx *ctx) vpx_internal_error(&ctx->error, VPX_CODEC_MEM_ERROR, NULL); } } + + +void +vp8_dixie_tokens_destroy(struct vp8_decoder_ctx *ctx) +{ + int i; + + for (i = 0; i < MAX_PARTITIONS; i++) + free(ctx->tokens[i].coeffs); + + free(ctx->above_token_entropy_ctx); +} diff --git a/vp8/dixie/tokens.h b/vp8/dixie/tokens.h index 577f05e052508e4ffc9bdc69f00dd63a128d6362..4ecaba0448f4af49a8b6a5f84416d863982362c4 100644 --- a/vp8/dixie/tokens.h +++ b/vp8/dixie/tokens.h @@ -14,6 +14,10 @@ void vp8_dixie_tokens_init(struct vp8_decoder_ctx *ctx); +void +vp8_dixie_tokens_destroy(struct vp8_decoder_ctx *ctx); + + void vp8_dixie_tokens_process_row(struct vp8_decoder_ctx *ctx, unsigned int partition, diff --git a/vp8/vp8_dixie_iface.c b/vp8/vp8_dixie_iface.c index 5f0c7902c32a920d0fc14ace1904fcea72d8d526..f5e1de9ae74430a127d0e1f7d67da264ccb884a1 100644 --- a/vp8/vp8_dixie_iface.c +++ b/vp8/vp8_dixie_iface.c @@ -82,6 +82,7 @@ static vpx_codec_err_t vp8_init(vpx_codec_ctx_t *ctx) static vpx_codec_err_t vp8_destroy(vpx_codec_alg_priv_t *ctx) { + vp8_dixie_decode_destroy(&ctx->decoder_ctx); vpx_free(ctx->base.alg_priv); return VPX_CODEC_OK; }