2005-06-23 Wim Taymans <wim@fluendo.com>
+ * gst/rtsp/gstrtspsrc.c: (gst_rtsp_proto_get_type),
+ (gst_rtspsrc_class_init), (gst_rtspsrc_create_stream),
+ (gst_rtspsrc_add_element), (gst_rtspsrc_set_state),
+ (gst_rtspsrc_stream_setup_rtp),
+ (gst_rtspsrc_stream_configure_transport), (find_stream),
+ (gst_rtspsrc_loop), (gst_rtspsrc_open), (gst_rtspsrc_play),
+ (gst_rtspsrc_change_state):
+ * gst/rtsp/rtspurl.c: (rtsp_url_parse):
+ Make rtspsrc a live source.
+ Don't try to parse NULL urls.
+
+2005-06-23 Wim Taymans <wim@fluendo.com>
+
* gst/udp/gstudpsrc.c: (gst_udpsrc_init):
Make udpsrc a live source.
/* first our rtp session manager */
if ((ret =
- gst_element_set_state (stream->rtpdec, state)) != GST_STATE_SUCCESS)
+ gst_element_set_state (stream->rtpdec, state)) == GST_STATE_FAILURE)
goto done;
/* then our sources */
if (stream->rtpsrc) {
if ((ret =
gst_element_set_state (stream->rtpsrc,
- state)) != GST_STATE_SUCCESS)
+ state)) == GST_STATE_FAILURE)
goto done;
}
if (stream->rtcpsrc) {
if ((ret =
gst_element_set_state (stream->rtcpsrc,
- state)) != GST_STATE_SUCCESS)
+ state)) == GST_STATE_FAILURE)
goto done;
}
}
/* we manage this element */
gst_rtspsrc_add_element (src, stream->rtpsrc);
- if ((ret =
- gst_element_set_state (stream->rtpsrc,
- GST_STATE_PAUSED)) != GST_STATE_SUCCESS)
+ ret = gst_element_set_state (stream->rtpsrc, GST_STATE_PAUSED);
+ if (ret == GST_STATE_FAILURE)
goto start_rtp_failure;
if (!(stream->rtcpsrc =
/* we manage this element */
gst_rtspsrc_add_element (src, stream->rtcpsrc);
- if ((ret =
- gst_element_set_state (stream->rtcpsrc,
- GST_STATE_PAUSED)) != GST_STATE_SUCCESS)
+ ret = gst_element_set_state (stream->rtcpsrc, GST_STATE_PAUSED);
+ if (ret == GST_STATE_FAILURE)
goto start_rtcp_failure;
g_object_get (G_OBJECT (stream->rtpsrc), "port", rtpport, NULL);
/* FIXME, make sure it outputs the caps */
pad = gst_element_get_pad (stream->rtpdec, "srcrtp");
name = g_strdup_printf ("rtp_stream%d", stream->id);
- gst_element_add_ghost_pad (GST_ELEMENT (src), pad, name);
+ gst_element_add_pad (GST_ELEMENT (src), gst_ghost_pad_new (name, pad));
g_free (name);
gst_object_unref (GST_OBJECT (pad));
gchar *new;
gint rtpport, rtcpport;
gchar *trxparams;
+ gboolean res;
/* allocate two udp ports */
- gst_rtspsrc_stream_setup_rtp (stream, &rtpport, &rtcpport);
+ if (!gst_rtspsrc_stream_setup_rtp (stream, &rtpport, &rtcpport))
+ goto setup_rtp_failed;
trxparams = g_strdup_printf ("client_port=%d-%d", rtpport, rtcpport);
new = g_strconcat (transports, "RTP/AVP/UDP;unicast;", trxparams, NULL);
("Could not send message."), (NULL));
return FALSE;
}
+setup_rtp_failed:
+ {
+ GST_ELEMENT_ERROR (src, RESOURCE, WRITE, ("Could not setup rtp."), (NULL));
+ return FALSE;
+ }
}
static gboolean
rtspsrc->interleaved = FALSE;
if (!gst_rtspsrc_open (rtspsrc))
goto open_failed;
- /* need to play now for the preroll, might delay that to
- * next state when we have NO_PREROLL as a return value */
- gst_rtspsrc_play (rtspsrc);
break;
case GST_STATE_PAUSED_TO_PLAYING:
gst_rtspsrc_play (rtspsrc);
break;
}
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
+ if (ret == GST_STATE_FAILURE)
+ goto done;
+
ret = gst_rtspsrc_set_state (rtspsrc, GST_STATE_PENDING (rtspsrc));
- if (ret != GST_STATE_SUCCESS)
+ if (ret == GST_STATE_FAILURE)
goto done;
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element);
switch (transition) {
case GST_STATE_PLAYING_TO_PAUSED: