GstPad *srcpad, *sinkpad;
GstElement *payloader;
guint buffer_size;
- gboolean is_joined;
GstBin *joined_bin;
/* TRUE if this stream is running on
GST_DEBUG ("finalize stream %p", stream);
/* we really need to be unjoined now */
- g_return_if_fail (!priv->is_joined);
+ g_return_if_fail (priv->joined_bin == NULL);
if (priv->addr_v4)
gst_rtsp_address_free (priv->addr_v4);
GstRTSPStreamPrivate *priv;
GstPad *pad, *selpad;
guint i;
- GstBin *bin;
priv = stream->priv;
- bin = GST_BIN (gst_object_get_parent (GST_OBJECT (priv->funnel[1])));
for (i = 0; i < 2; i++) {
if (!priv->sinkpad && i == 0) {
}
/* add udpsrc */
- gst_bin_add (bin, udpsrc_out[i]);
+ gst_bin_add (priv->joined_bin, udpsrc_out[i]);
/* and link to the funnel */
selpad = gst_element_get_request_pad (priv->funnel[i], "sink_%u");
gst_element_sync_state_with_parent (udpsrc_out[i]);
}
}
-
- gst_object_unref (bin);
}
/* must be called with lock */
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), FALSE);
priv = stream->priv;
- g_return_val_if_fail (priv->is_joined, FALSE);
+ g_return_val_if_fail (priv->joined_bin != NULL, FALSE);
g_mutex_lock (&priv->lock);
g_return_if_fail (GST_IS_RTSP_STREAM (stream));
priv = stream->priv;
- g_return_if_fail (priv->is_joined);
+ g_return_if_fail (priv->joined_bin != NULL);
g_mutex_lock (&priv->lock);
if (family == G_SOCKET_FAMILY_IPV4) {
g_return_if_fail (GST_IS_RTSP_STREAM (stream));
priv = stream->priv;
- g_return_if_fail (priv->is_joined);
+ g_return_if_fail (priv->joined_bin != NULL);
g_mutex_lock (&priv->lock);
if (ssrc && priv->session)
priv = stream->priv;
g_mutex_lock (&priv->lock);
- if (priv->is_joined)
+ if (priv->joined_bin != NULL)
goto was_joined;
/* create a session with the same index as the stream */
(GCallback) caps_notify, stream);
}
- priv->joined_bin = bin;
- priv->is_joined = TRUE;
+ priv->joined_bin = gst_object_ref (bin);
g_mutex_unlock (&priv->lock);
return TRUE;
priv = stream->priv;
g_mutex_lock (&priv->lock);
- if (!priv->is_joined)
+ if (priv->joined_bin == NULL)
goto was_not_joined;
+ if (priv->joined_bin != bin)
+ goto wrong_bin;
priv->joined_bin = NULL;
if (priv->srtpdec)
gst_object_unref (priv->srtpdec);
- priv->is_joined = FALSE;
+ g_clear_object (&priv->joined_bin);
g_mutex_unlock (&priv->lock);
return TRUE;
g_mutex_unlock (&priv->lock);
return FALSE;
}
+wrong_bin:
+ {
+ GST_ERROR_OBJECT (stream, "leaving the wrong bin");
+ g_mutex_unlock (&priv->lock);
+ return FALSE;
+ }
}
/**
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), GST_FLOW_ERROR);
priv = stream->priv;
g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
- g_return_val_if_fail (priv->is_joined, FALSE);
+ g_return_val_if_fail (priv->joined_bin != NULL, FALSE);
g_mutex_lock (&priv->lock);
if (priv->appsrc[0])
priv = stream->priv;
g_return_val_if_fail (GST_IS_BUFFER (buffer), GST_FLOW_ERROR);
- if (!priv->is_joined) {
+ if (priv->joined_bin == NULL) {
gst_buffer_unref (buffer);
return GST_FLOW_NOT_LINKED;
}
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), FALSE);
priv = stream->priv;
g_return_val_if_fail (GST_IS_RTSP_STREAM_TRANSPORT (trans), FALSE);
- g_return_val_if_fail (priv->is_joined, FALSE);
+ g_return_val_if_fail (priv->joined_bin != NULL, FALSE);
g_mutex_lock (&priv->lock);
res = update_transport (stream, trans, TRUE);
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), FALSE);
priv = stream->priv;
g_return_val_if_fail (GST_IS_RTSP_STREAM_TRANSPORT (trans), FALSE);
- g_return_val_if_fail (priv->is_joined, FALSE);
+ g_return_val_if_fail (priv->joined_bin != NULL, FALSE);
g_mutex_lock (&priv->lock);
res = update_transport (stream, trans, FALSE);