videoencoder: Don't unref frame twice if not in the list
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 4 Jun 2012 08:46:13 +0000 (10:46 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 4 Jun 2012 08:46:13 +0000 (10:46 +0200)
gst-libs/gst/video/gstvideoencoder.c

index 5633369..0405f04 100644 (file)
@@ -1496,10 +1496,14 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder,
 
 done:
   /* handed out */
-  priv->frames = g_list_remove (priv->frames, frame);
-  /* Remove the reference from the list and the reference that
-   * was provided to us */
-  gst_video_codec_frame_unref (frame);
+
+  /* unref once from the list */
+  l = g_list_find (priv->frames, frame);
+  if (l) {
+    gst_video_codec_frame_unref (frame);
+    priv->frames = g_list_delete_link (priv->frames, l);
+  }
+  /* unref because this function takes ownership */
   gst_video_codec_frame_unref (frame);
 
   GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);