changeset 11342:8d23ea397dda libavcodec

Plug some memory leaks in the VP6 decoder
author vitor
date Wed, 03 Mar 2010 17:24:32 +0000
parents a26f51d0bb63
children 2b78e800f630
files vp56.c vp6.c
diffstat 2 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/vp56.c	Wed Mar 03 16:47:40 2010 +0000
+++ b/vp56.c	Wed Mar 03 17:24:32 2010 +0000
@@ -26,6 +26,7 @@
 
 #include "vp56.h"
 #include "vp56data.h"
+#include "get_bits.h"
 
 
 void vp56_init_dequant(VP56Context *s, int quantizer)
@@ -695,6 +696,7 @@
 av_cold int vp56_free(AVCodecContext *avctx)
 {
     VP56Context *s = avctx->priv_data;
+    int pt;
 
     av_freep(&s->qscale_table);
     av_freep(&s->above_blocks);
@@ -706,5 +708,15 @@
         avctx->release_buffer(avctx, s->framep[VP56_FRAME_GOLDEN2]);
     if (s->framep[VP56_FRAME_PREVIOUS]->data[0])
         avctx->release_buffer(avctx, s->framep[VP56_FRAME_PREVIOUS]);
+
+    for (pt=0; pt < 2; pt++) {
+        int ct, cg;
+        free_vlc(&s->dccv_vlc[pt]);
+        free_vlc(&s->runv_vlc[pt]);
+        for (ct=0; ct<3; ct++)
+            for (cg = 0; cg < 6; cg++)
+                free_vlc(&s->ract_vlc[pt][ct][cg]);
+    }
+
     return 0;
 }
--- a/vp6.c	Wed Mar 03 16:47:40 2010 +0000
+++ b/vp6.c	Wed Mar 03 17:24:32 2010 +0000
@@ -227,6 +227,7 @@
         nodes[map[2*i+1]].count = b + !b;
     }
 
+    free_vlc(vlc);
     /* then build the huffman tree accodring to probabilities */
     ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp,
                        FF_HUFFMAN_FLAG_HNODE_FIRST);