diff options
-rw-r--r-- | gst/debugutils/fpsdisplaysink.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gst/debugutils/fpsdisplaysink.c b/gst/debugutils/fpsdisplaysink.c index b37ab112..54f5cc54 100644 --- a/gst/debugutils/fpsdisplaysink.c +++ b/gst/debugutils/fpsdisplaysink.c @@ -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 |