From ac6d73f913a469f718a40edc8c8c2b20f3b010e4 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 27 May 2015 16:08:51 +0200 Subject: [PATCH] improve cleanup Start stream when input socket is given. --- src/client/pv-context.c | 5 +++++ src/gst/gstpvsrc.c | 3 +++ src/server/pv-client-source.c | 13 +++++++++++++ 3 files changed, 21 insertions(+) diff --git a/src/client/pv-context.c b/src/client/pv-context.c index cfdb342b3..fd339cac7 100644 --- a/src/client/pv-context.c +++ b/src/client/pv-context.c @@ -560,6 +560,11 @@ on_client_disconnected (GObject *source_object, } g_variant_unref (ret); + g_clear_object (&priv->client); + g_clear_object (&priv->daemon); + g_bus_unwatch_name(priv->id); + priv->id = 0; + context_set_state (context, PV_CONTEXT_STATE_UNCONNECTED); } diff --git a/src/gst/gstpvsrc.c b/src/gst/gstpvsrc.c index a457b8c4a..30da4a210 100644 --- a/src/gst/gstpvsrc.c +++ b/src/gst/gstpvsrc.c @@ -120,6 +120,9 @@ gst_pulsevideo_src_finalize (GObject * object) { GstPulsevideoSrc *pvsrc = GST_PULSEVIDEO_SRC (object); + g_object_unref (pvsrc->fd_allocator); + g_mutex_clear (&pvsrc->lock); + g_cond_clear (&pvsrc->cond); g_free (pvsrc->source); G_OBJECT_CLASS (parent_class)->finalize (object); diff --git a/src/server/pv-client-source.c b/src/server/pv-client-source.c index aa591c041..10b21b7f7 100644 --- a/src/server/pv-client-source.c +++ b/src/server/pv-client-source.c @@ -233,6 +233,14 @@ client_release_source_output (PvSource *source, PvSourceOutput *output) static void client_source_finalize (GObject * object) { + PvClientSourcePrivate *priv = PV_CLIENT_SOURCE (object)->priv; + + gst_element_set_state (priv->pipeline, GST_STATE_NULL); + g_clear_object (&priv->filter); + g_clear_object (&priv->sink); + g_clear_object (&priv->src); + g_clear_object (&priv->pipeline); + G_OBJECT_CLASS (pv_client_source_parent_class)->finalize (object); } @@ -266,6 +274,11 @@ on_input_socket_notify (GObject *gobject, g_object_set (priv->filter, "caps", NULL, NULL); } g_object_set (priv->src, "socket", socket, NULL); + + if (socket) + gst_element_set_state (priv->pipeline, GST_STATE_PLAYING); + else + gst_element_set_state (priv->pipeline, GST_STATE_READY); } PvSourceOutput *