From: Zdenek Kabelac Date: Fri, 25 Jan 2008 07:37:46 +0000 (+0000) Subject: Correctly clean up IntraX8Context upon codec close. X-Git-Tag: v0.5~6360 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e2fdba650d3ae21c693eac21642e389c8da25a1d;p=platform%2Fupstream%2Flibav.git Correctly clean up IntraX8Context upon codec close. patch by Zdenek Kabelac, zdenek d kabelac a gmail d com Originally committed as revision 11608 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/intrax8.c b/libavcodec/intrax8.c index ec1567e..0436deb 100644 --- a/libavcodec/intrax8.c +++ b/libavcodec/intrax8.c @@ -677,6 +677,15 @@ void ff_intrax8_common_init(IntraX8Context * w, MpegEncContext * const s){ } /** + * 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). * The parent codec must call MPV_frame_start(), ff_er_frame_start() before calling this function. diff --git a/libavcodec/intrax8.h b/libavcodec/intrax8.h index fd8e36c..3f6de67 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 86ca7b9..01cff4c 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 842234b..cb37955 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, };