fpsdisplaysink: Fix resetting of the sink in NULL
authorJan Schmidt <thaytan@noraisin.net>
Fri, 15 May 2009 09:45:45 +0000 (10:45 +0100)
committerJan Schmidt <thaytan@noraisin.net>
Sat, 16 May 2009 00:26:55 +0000 (01:26 +0100)
Reset the fpsdisplaysink in NULL by removing the textoverlay if we
created it.

Fixes: #582633

gst/debugutils/fpsdisplaysink.c

index b37ab11..54f5cc5 100644 (file)
@@ -267,11 +267,11 @@ fps_display_sink_start (GstFPSDisplaySink * self)
       gst_object_ref (self->text_overlay);
       g_object_set (self->text_overlay,
           "font-desc", DEFAULT_FONT, "silent", FALSE, NULL);
-    }
-    gst_bin_add (GST_BIN (self), self->text_overlay);
+      gst_bin_add (GST_BIN (self), self->text_overlay);
 
-    if (!gst_element_link (self->text_overlay, self->video_sink)) {
-      GST_ERROR_OBJECT (self, "Could not link elements");
+      if (!gst_element_link (self->text_overlay, self->video_sink)) {
+        GST_ERROR_OBJECT (self, "Could not link elements");
+      }
     }
     target_pad = gst_element_get_static_pad (self->text_overlay, "video_sink");
   }
@@ -280,6 +280,7 @@ no_text_overlay:
     if (self->text_overlay) {
       gst_element_unlink (self->text_overlay, self->video_sink);
       gst_bin_remove (GST_BIN (self), self->text_overlay);
+      self->text_overlay = NULL;
     }
     target_pad = gst_element_get_static_pad (self->video_sink, "sink");
   }
@@ -300,6 +301,13 @@ fps_display_sink_stop (GstFPSDisplaySink * self)
     g_source_remove (self->timeout_id);
     self->timeout_id = 0;
   }
+
+  if (self->text_overlay) {
+    gst_element_unlink (self->text_overlay, self->video_sink);
+    gst_bin_remove (GST_BIN (self), self->text_overlay);
+    gst_object_unref (self->text_overlay);
+    self->text_overlay = NULL;
+  }
 }
 
 static void