OSDN Git Service

fix memory leaks in vp3 decoder
authorMåns Rullgård <mans@mansr.com>
Sun, 24 Feb 2008 18:56:52 +0000 (18:56 +0000)
committerMåns Rullgård <mans@mansr.com>
Sun, 24 Feb 2008 18:56:52 +0000 (18:56 +0000)
Originally committed as revision 12191 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/vp3.c

index 2beb93f..eade1eb 100644 (file)
@@ -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);