vp8dec: Also destroy decoder in set_format() if it was created already
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 12 Nov 2012 09:08:57 +0000 (10:08 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 12 Nov 2012 09:11:32 +0000 (10:11 +0100)
Fixes a memory leak.

ext/vpx/gstvp8dec.c

index 940083b..a06968d 100644 (file)
@@ -292,13 +292,16 @@ gst_vp8_dec_stop (GstVideoDecoder * base_video_decoder)
     gst_video_codec_state_unref (gst_vp8_dec->output_state);
     gst_vp8_dec->output_state = NULL;
   }
+
   if (gst_vp8_dec->input_state) {
     gst_video_codec_state_unref (gst_vp8_dec->input_state);
     gst_vp8_dec->input_state = NULL;
   }
+
   if (gst_vp8_dec->decoder_inited)
     vpx_codec_destroy (&gst_vp8_dec->decoder);
   gst_vp8_dec->decoder_inited = FALSE;
+
   return TRUE;
 }
 
@@ -308,6 +311,9 @@ gst_vp8_dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
   GstVP8Dec *gst_vp8_dec = GST_VP8_DEC (decoder);
 
   GST_DEBUG_OBJECT (gst_vp8_dec, "set_format");
+
+  if (decoder->decoder_inited)
+    vpx_codec_destroy (&decoder->decoder);
   gst_vp8_dec->decoder_inited = FALSE;
 
   if (gst_vp8_dec->input_state)