diff --git a/libavcodec/intrax8.c b/libavcodec/intrax8.c index ec1567ea23..0436deb4ce 100644 --- a/libavcodec/intrax8.c +++ b/libavcodec/intrax8.c @@ -676,6 +676,15 @@ void ff_intrax8_common_init(IntraX8Context * w, MpegEncContext * const s){ ff_init_scantable(s->dsp.idct_permutation, &w->scantable[2], wmv1_scantable[3]); } +/** + * Destroy IntraX8 frame structure. + * @param w pointer to IntraX8Context + */ +void ff_intrax8_common_end(IntraX8Context * w) +{ + av_freep(&w->prediction_table); +} + /** * Decode single IntraX8 frame. * The parent codec must fill s->loopfilter and s->gb (bitstream). diff --git a/libavcodec/intrax8.h b/libavcodec/intrax8.h index fd8e36ccc4..3f6de67da5 100644 --- a/libavcodec/intrax8.h +++ b/libavcodec/intrax8.h @@ -51,6 +51,7 @@ typedef struct{ } IntraX8Context; void ff_intrax8_common_init(IntraX8Context * w, MpegEncContext * const s); +void ff_intrax8_common_end(IntraX8Context * w); int ff_intrax8_decode_picture(IntraX8Context * w, int quant, int halfpq); #endif /* FFMPEG_INTRAX8_H */ diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 86ca7b978b..01cff4c057 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -4119,6 +4119,7 @@ static int vc1_decode_end(AVCodecContext *avctx) av_freep(&v->acpred_plane); av_freep(&v->over_flags_plane); av_freep(&v->mb_type_base); + ff_intrax8_common_end(&v->x8); return 0; } diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index 842234bfe1..cb37955124 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -474,6 +474,14 @@ static int wmv2_decode_init(AVCodecContext *avctx){ return 0; } +static int wmv2_decode_end(AVCodecContext *avctx) +{ + Wmv2Context *w = avctx->priv_data; + + ff_intrax8_common_end(&w->x8); + return ff_h263_decode_end(avctx); +} + AVCodec wmv2_decoder = { "wmv2", CODEC_TYPE_VIDEO, @@ -481,7 +489,7 @@ AVCodec wmv2_decoder = { sizeof(Wmv2Context), wmv2_decode_init, NULL, - ff_h263_decode_end, + wmv2_decode_end, ff_h263_decode_frame, CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, };