Commit d13fd84f authored by andoma's avatar andoma

Correctly clean up IntraX8Context upon codec close.

patch by Zdenek Kabelac, zdenek d kabelac a gmail d com


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@11608 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent de8f1950
...@@ -676,6 +676,15 @@ void ff_intrax8_common_init(IntraX8Context * w, MpegEncContext * const s){ ...@@ -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]); 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. * Decode single IntraX8 frame.
* The parent codec must fill s->loopfilter and s->gb (bitstream). * The parent codec must fill s->loopfilter and s->gb (bitstream).
......
...@@ -51,6 +51,7 @@ typedef struct{ ...@@ -51,6 +51,7 @@ typedef struct{
} IntraX8Context; } IntraX8Context;
void ff_intrax8_common_init(IntraX8Context * w, MpegEncContext * const s); 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); int ff_intrax8_decode_picture(IntraX8Context * w, int quant, int halfpq);
#endif /* FFMPEG_INTRAX8_H */ #endif /* FFMPEG_INTRAX8_H */
...@@ -4119,6 +4119,7 @@ static int vc1_decode_end(AVCodecContext *avctx) ...@@ -4119,6 +4119,7 @@ static int vc1_decode_end(AVCodecContext *avctx)
av_freep(&v->acpred_plane); av_freep(&v->acpred_plane);
av_freep(&v->over_flags_plane); av_freep(&v->over_flags_plane);
av_freep(&v->mb_type_base); av_freep(&v->mb_type_base);
ff_intrax8_common_end(&v->x8);
return 0; return 0;
} }
......
...@@ -474,6 +474,14 @@ static int wmv2_decode_init(AVCodecContext *avctx){ ...@@ -474,6 +474,14 @@ static int wmv2_decode_init(AVCodecContext *avctx){
return 0; 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 = { AVCodec wmv2_decoder = {
"wmv2", "wmv2",
CODEC_TYPE_VIDEO, CODEC_TYPE_VIDEO,
...@@ -481,7 +489,7 @@ AVCodec wmv2_decoder = { ...@@ -481,7 +489,7 @@ AVCodec wmv2_decoder = {
sizeof(Wmv2Context), sizeof(Wmv2Context),
wmv2_decode_init, wmv2_decode_init,
NULL, NULL,
ff_h263_decode_end, wmv2_decode_end,
ff_h263_decode_frame, ff_h263_decode_frame,
CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1,
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment