{
GstRTSPStreamPrivate *priv;
- g_return_if_fail (GST_IS_RTSP_STREAM (stream));
+ g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), FALSE);
priv = stream->priv;
unsupported_transmode:
{
GST_DEBUG ("unsupported transport mode %d", transport->trans);
+ g_mutex_unlock (&priv->lock);
return FALSE;
}
unsupported_profile:
{
GST_DEBUG ("unsupported profile %d", transport->profile);
+ g_mutex_unlock (&priv->lock);
return FALSE;
}
unsupported_ltrans:
{
GST_DEBUG ("unsupported lower transport %d", transport->lower_transport);
+ g_mutex_unlock (&priv->lock);
return FALSE;
}
}
was_not_joined:
{
+ g_mutex_unlock (&priv->lock);
return TRUE;
}
}
GstClockTime * running_time)
{
GstRTSPStreamPrivate *priv;
+ GstStructure *stats;
GObjectClass *payobjclass;
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), FALSE);
payobjclass = G_OBJECT_GET_CLASS (priv->payloader);
g_mutex_lock (&priv->lock);
- if (seq && g_object_class_find_property (payobjclass, "seqnum"))
- g_object_get (priv->payloader, "seqnum", seq, NULL);
- if (rtptime && g_object_class_find_property (payobjclass, "timestamp"))
- g_object_get (priv->payloader, "timestamp", rtptime, NULL);
+ if (g_object_class_find_property (payobjclass, "stats")) {
+ g_object_get (priv->payloader, "stats", &stats, NULL);
+ if (stats == NULL)
+ goto no_stats;
- if (running_time
- && g_object_class_find_property (payobjclass, "running-time"))
- g_object_get (priv->payloader, "running-time", running_time, NULL);
+ if (seq)
+ gst_structure_get_uint (stats, "seqnum", seq);
- if (clock_rate && priv->caps) {
- GstStructure *s;
+ if (rtptime)
+ gst_structure_get_uint (stats, "timestamp", rtptime);
- s = gst_caps_get_structure (priv->caps, 0);
- if (!gst_structure_get_int (s, "clock-rate", (gint *) clock_rate))
- if (running_time)
+ if (running_time)
+ gst_structure_get_clock_time (stats, "running-time", running_time);
+
+ if (clock_rate) {
+ gst_structure_get_uint (stats, "clock-rate", clock_rate);
+ if (*clock_rate == 0 && running_time)
*running_time = GST_CLOCK_TIME_NONE;
+ }
+ gst_structure_free (stats);
+ } else {
+ if (!g_object_class_find_property (payobjclass, "seqnum") ||
+ !g_object_class_find_property (payobjclass, "timestamp"))
+ goto no_stats;
+
+ if (seq)
+ g_object_get (priv->payloader, "seqnum", seq, NULL);
+
+ if (rtptime)
+ g_object_get (priv->payloader, "timestamp", rtptime, NULL);
+
+ if (running_time)
+ *running_time = GST_CLOCK_TIME_NONE;
}
g_mutex_unlock (&priv->lock);
return TRUE;
+
+ /* ERRORS */
+no_stats:
+ {
+ GST_WARNING ("Could not get payloader stats");
+ g_mutex_unlock (&priv->lock);
+ return FALSE;
+ }
}
/**
}
if (add) {
- GST_INFO ("adding %s:%d-%d", dest, min, max);
- g_signal_emit_by_name (priv->udpsink[0], "add", dest, min, NULL);
- g_signal_emit_by_name (priv->udpsink[1], "add", dest, max, NULL);
if (ttl > 0) {
GST_INFO ("setting ttl-mc %d", ttl);
g_object_set (G_OBJECT (priv->udpsink[0]), "ttl-mc", ttl, NULL);
g_object_set (G_OBJECT (priv->udpsink[1]), "ttl-mc", ttl, NULL);
}
+ GST_INFO ("adding %s:%d-%d", dest, min, max);
+ g_signal_emit_by_name (priv->udpsink[0], "add", dest, min, NULL);
+ g_signal_emit_by_name (priv->udpsink[1], "add", dest, max, NULL);
priv->transports = g_list_prepend (priv->transports, trans);
} else {
GST_INFO ("removing %s:%d-%d", dest, min, max);
*
* @stream must be joined to a bin.
*
- * Returns: the RTP socket or %NULL if no socket could be allocated for @family.
- * Unref after usage
+ * Returns: (transfer full): the RTP socket or %NULL if no socket could be
+ * allocated for @family. Unref after usage
*/
GSocket *
gst_rtsp_stream_get_rtp_socket (GstRTSPStream * stream, GSocketFamily family)
{
GstRTSPStreamPrivate *priv = GST_RTSP_STREAM_GET_PRIVATE (stream);
GSocket *socket;
- gchar *name;
+ const gchar *name;
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), NULL);
g_return_val_if_fail (family == G_SOCKET_FAMILY_IPV4 ||
*
* @stream must be joined to a bin.
*
- * Returns: the RTCP socket or %NULL if no socket could be allocated for
- * @family. Unref after usage
+ * Returns: (transfer full): the RTCP socket or %NULL if no socket could be
+ * allocated for @family. Unref after usage
*/
GSocket *
gst_rtsp_stream_get_rtcp_socket (GstRTSPStream * stream, GSocketFamily family)
{
GstRTSPStreamPrivate *priv = GST_RTSP_STREAM_GET_PRIVATE (stream);
GSocket *socket;
- gchar *name;
+ const gchar *name;
g_return_val_if_fail (GST_IS_RTSP_STREAM (stream), NULL);
g_return_val_if_fail (family == G_SOCKET_FAMILY_IPV4 ||