aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2008-02-24 18:56:52 +0000
committerMåns Rullgård <mans@mansr.com>2008-02-24 18:56:52 +0000
commit6f4e2b5a9564d012c05ba361020768c925dda5e1 (patch)
tree8e6e106dfcdf73874c3fa37d51a980863707040e
parentac6f133027263749e2f8c7269367d0558f3781bc (diff)
downloadffmpeg-6f4e2b5a9564d012c05ba361020768c925dda5e1.tar.gz
fix memory leaks in vp3 decoder
Originally committed as revision 12191 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/vp3.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
index 2beb93fb39..eade1eb3cf 100644
--- a/libavcodec/vp3.c
+++ b/libavcodec/vp3.c
@@ -2313,7 +2313,9 @@ if (!s->keyframe) {
static int vp3_decode_end(AVCodecContext *avctx)
{
Vp3DecodeContext *s = avctx->priv_data;
+ int i;
+ av_free(s->superblock_coding);
av_free(s->all_fragments);
av_free(s->coeffs);
av_free(s->coded_fragment_list);
@@ -2322,6 +2324,19 @@ static int vp3_decode_end(AVCodecContext *avctx)
av_free(s->macroblock_fragments);
av_free(s->macroblock_coding);
+ for (i = 0; i < 16; i++) {
+ free_vlc(&s->dc_vlc[i]);
+ free_vlc(&s->ac_vlc_1[i]);
+ free_vlc(&s->ac_vlc_2[i]);
+ free_vlc(&s->ac_vlc_3[i]);
+ free_vlc(&s->ac_vlc_4[i]);
+ }
+
+ free_vlc(&s->superblock_run_length_vlc);
+ free_vlc(&s->fragment_run_length_vlc);
+ free_vlc(&s->mode_code_vlc);
+ free_vlc(&s->motion_vector_vlc);
+
/* release all frames */
if (s->golden_frame.data[0] && s->golden_frame.data[0] != s->last_frame.data[0])
avctx->release_buffer(avctx, &s->golden_frame);