[farsight2/master] Factor out nice sink freeing
Olivier Crête
olivier.crete at collabora.co.uk
Thu Feb 5 06:32:08 PST 2009
---
transmitters/nice/fs-nice-transmitter.c | 54 +++++++++++++++++--------------
1 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/transmitters/nice/fs-nice-transmitter.c b/transmitters/nice/fs-nice-transmitter.c
index 3451247..a94377c 100644
--- a/transmitters/nice/fs-nice-transmitter.c
+++ b/transmitters/nice/fs-nice-transmitter.c
@@ -742,14 +742,38 @@ fs_nice_transmitter_add_gst_stream (FsNiceTransmitter *self,
return NULL;
}
+
+static void
+remove_sink (FsNiceTransmitter *self, NiceGstStream *ns, guint component_id)
+{
+ GstStateChangeReturn ret;
+
+ if (ns->requested_tee_pads[component_id] == NULL)
+ return;
+
+ gst_element_release_request_pad (self->priv->sink_tees[component_id],
+ ns->requested_tee_pads[component_id]);
+ gst_object_unref (ns->requested_tee_pads[component_id]);
+ ns->requested_tee_pads[component_id] = NULL;
+
+ gst_element_set_locked_state (ns->nicesinks[component_id], TRUE);
+ ret = gst_element_set_state (ns->nicesinks[component_id], GST_STATE_NULL);
+ if (ret != GST_STATE_CHANGE_SUCCESS)
+ GST_ERROR ("Error changing state of nicesink: %s",
+ gst_element_state_change_return_get_name (ret));
+ if (!gst_bin_remove (GST_BIN (self->priv->gst_sink),
+ ns->nicesinks[component_id]))
+ GST_ERROR ("Could not remove nicesink element from transmitter"
+ " sink");
+ gst_element_set_locked_state (ns->nicesinks[component_id], FALSE);
+}
+
void
fs_nice_transmitter_free_gst_stream (FsNiceTransmitter *self,
NiceGstStream *ns)
{
guint c;
- fs_nice_transmitter_set_sending (self, ns, FALSE);
-
for (c = 1; c <= self->components; c++)
{
if (ns->nicesrcs[c])
@@ -774,6 +798,7 @@ fs_nice_transmitter_free_gst_stream (FsNiceTransmitter *self,
if (ns->nicesinks[c])
{
+ remove_sink (self, ns, c);
gst_object_unref (ns->nicesinks[c]);
}
@@ -812,30 +837,11 @@ fs_nice_transmitter_set_sending (FsNiceTransmitter *self,
g_mutex_unlock (ns->mutex);
+
if (current_sending)
{
- for (c = 1; c <= self->components; c++)
- {
- GstStateChangeReturn ret;
-
-
- if (ns->requested_tee_pads[c])
- {
- gst_element_release_request_pad (self->priv->sink_tees[c],
- ns->requested_tee_pads[c]);
- gst_object_unref (ns->requested_tee_pads[c]);
- }
-
- gst_element_set_locked_state (ns->nicesinks[c], TRUE);
- ret = gst_element_set_state (ns->nicesinks[c], GST_STATE_NULL);
- if (ret != GST_STATE_CHANGE_SUCCESS)
- GST_ERROR ("Error changing state of nicesink: %s",
- gst_element_state_change_return_get_name (ret));
- if (!gst_bin_remove (GST_BIN (self->priv->gst_sink), ns->nicesinks[c]))
- GST_ERROR ("Could not remove nicesink element from transmitter"
- " sink");
- gst_element_set_locked_state (ns->nicesinks[c], FALSE);
- }
+ for (c = 1; c <= self->components; c++)
+ remove_sink (self, ns, c);
}
else
{
--
1.5.6.5
More information about the farsight-commits
mailing list